Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Balloontips in Mouse-Events "einbeziehen" (https://www.delphipraxis.net/38921-balloontips-mouse-events-einbeziehen.html)

Alex_ITA01 26. Jan 2005 08:23


Balloontips in Mouse-Events "einbeziehen"
 
Moin Moin erstmal...
ich habe da mal eine Frage zu den BalloonTips.

Mit folgendem Code lass ich mir auf meiner Form ein Balloontip anzeigen.
Jetzt möchte ich aber folgendes:
Angenommen ich habe ein Image wo sich Graphen drinne befinden. Nun möchte ich, dass wenn sich die Maus über einem Graphen befindet, so ein Baloontip angezeigt wird. Die Abfrage, ob sich die Maus über dem Graph befindet ist relativ simple (funktioniert auch schon) und nun möchte ich eben ein Balloontip anzeigen und sobald die Maus ins "Leere" geht auf dem Image, den Balloontip wieder ausblenden.
Hat sowas jemand schonmal probiert, geschafft oder ähnliches?
Würde mich sehr freuen wenn ihr ne Lösung habt.
MFG Alex

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Commctrl;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure ShowBalloonTip(Icon          : Integer;
                             Title         : PChar;
                             Text          : PWideChar;
                             BackCL, TextCL : TColor);    
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowBalloonTip(1,'Hallo','TEST',clBlack,clWhite);
end;

procedure TForm1.ShowBalloonTip(Icon: Integer; Title: PChar; Text: PWideChar;
                                BackCL, TextCL: TColor);
const
  TOOLTIPS_CLASS   = 'tooltips_class32';
  TTS_ALWAYSTIP    = $01;
  TTS_NOPREFIX     = $02;
  TTS_BALLOON      = $40;
  TTF_SUBCLASS     = $0010;
  TTF_TRANSPARENT  = $0100;
  TTF_CENTERTIP    = $0002;
  TTM_ADDTOOL      = $0400 + 50;
  TTM_SETTITLE     = (WM_USER + 32);
  ICC_WIN95_CLASSES = $000000FF;
type
  TOOLINFO = packed record
    cbSize  : Integer;
    uFlags  : Integer;
    hwnd    : THandle;
    uId     : Integer;
    rect    : TRect;
    hinst   : THandle;
    lpszText : PWideChar;
    lParam  : Integer;
  end;
var
  hWndTip : THandle;
  ti     : TOOLINFO;
  hWnd   : THandle;
begin
  hWnd   := Form1.Handle;
  hWndTip := CreateWindow(TOOLTIPS_CLASS,
                          nil,
                          WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP,
                          0, 0, 0, 0,
                          hWnd,
                          0,
                          HInstance,
                          nil);
  if hWndTip <> 0 then
  begin
    SetWindowPos(hWndTip,
                 HWND_TOPMOST,
                 0 , 0 , 0, 0,
                 SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    ti.cbSize  := SizeOf(ti);
    ti.uFlags  := TTF_TRANSPARENT or TTF_SUBCLASS;
    ti.hwnd    := hWnd;
    ti.lpszText := Text;
    Windows.GetClientRect(hWnd, ti.rect);
    SendMessage(hWndTip, TTM_SETTIPBKCOLOR, BackCL, 0);
    SendMessage(hWndTip, TTM_SETTIPTEXTCOLOR, TextCL, 0);
    SendMessage(hWndTip, TTM_ADDTOOL, 1, Integer(@ti));
    SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title));
  end;
end;

end.

Alex_ITA01 27. Jan 2005 08:24

Re: Balloontips in Mouse-Events "einbeziehen"
 
*PUSH*!!!
Hat keiner eine Idee?

MFG Alex

shmia 27. Jan 2005 08:57

Re: Balloontips in Mouse-Events "einbeziehen"
 
Wenn du alle Hints global für die ganze Anwendung "ballonisieren" willst (also andere Optik),
dann müsstest du eine neue Klasse von THintWindow ableiten.
Delphi-Quellcode:
TBallonHintWindow = class(THintWindow)
....
end;
Dann müsstest du beim Programmstart die neue Klasse "registrieren":
Delphi-Quellcode:
procedure THauptFormular.OnCreate(sender:TObject);
begin
   Application.HintWindowClass := TBallonHintWindow;
end;

Alex_ITA01 27. Jan 2005 09:16

Re: Balloontips in Mouse-Events "einbeziehen"
 
das Problem ist ja, ich will nicht alle Hint's "ändern" sondern nur auf bestimmte Maus-Positionen im Image reagieren und dann dort ein Hint bzw. Balloontip anzeigen. Alle anderen Komponenten auf der Form bleiben ganz normal behandelt mit dem "Standard-Hint". (ShowHint = True und Hint = 'Irgendwas').

MFG Alex

shmia 27. Jan 2005 10:44

Re: Balloontips in Mouse-Events "einbeziehen"
 
Zitat:

Zitat von Alex_ITA01
das Problem ist ja, ich will nicht alle Hint's "ändern" sondern nur auf bestimmte Maus-Positionen im Image reagieren und dann dort ein Hint bzw. Balloontip anzeigen. Alle anderen Komponenten auf der Form bleiben ganz normal behandelt mit dem "Standard-Hint". (ShowHint = True und Hint = 'Irgendwas').

Dann würde ich erst mal deinen Ballon-Hint in einer Klasse kapseln, denn du musst dir das
Window-Handle (hWndTip) für später merken.
Wenn du das mit folgendem Tip:
http://www.swissdelphicenter.ch/de/showcode.php?id=1068
kombinierst, dann kannst du feststellen, ob der Mauszeiger dein Image verlassen hat.

Alex_ITA01 27. Jan 2005 15:11

Re: Balloontips in Mouse-Events "einbeziehen"
 
okay danke, ich werde es mal in den nächsten Tagen probieren... (komme leider heute und morgen nicht dazu).
MFG Alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz