Einzelnen Beitrag anzeigen

Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Balloontips in Mouse-Events "einbeziehen"

  Alt 26. Jan 2005, 09:23
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.
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat