![]() |
Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeigen?
Hallo,
ich habe in meinem Forumlar eine TCheckListbox mit Einträgen. Ist es mir möglich ein onMouseOver Event einzubauen, dass mir, immer wenn ich die Maus über einen Eintrag in der Listbox bewege, ein kleines Popup mit einer für diesen Eintrag spezifischen Hilfe anzeigt? Und: wie füge ich an die TChecklistbox ein event onmouseover hinzu: Ich Muß ich ne neue Komponente erstellen, mich von checklistbox ableiten und irgendwie das event zufügen, oder??? nur: wie mach ich das? Danke, winx |
Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
Hi!
ich würde es so machen: Jedem Item vorher mit AddObjekt einen Pointer auf ein Objekt mitgeben, das Infos über das jeweilige Item speichert.
Delphi-Quellcode:
im OnMouseMove-Event dann:
TItemInfo = class
private fInfoPicture: TBitmap; [ ...usw.. ] public property InfoString: string; property InfoPicture: TBitmap read fInfoPicture; end;
Delphi-Quellcode:
Das Item unter der Maus herausbekommen.
Index := ListBox1.ItemAtPos(Point(X, Y), true);
Nun das drangehängte Objekte des Item aufrufen und die Infos dazu auslesen.
Delphi-Quellcode:
with TItemInfo(ListBox1.Items.Objects[Index]) do
begin ItemInfoString:= InfoString; [...] end; Gruß Pfoto |
Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
Das ist ne gute Idee :-)
jetzt bräucht ich nur noch nen Tip, wie ich das Problem mit dem Control überschreiben mache, damit ich bei der ComboBoxListBox das mouseOverEvent bekomme? Hat da jemand nen Tip? Thx, winx |
Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
He,
das brauch ich ja gar nicht :-) Mit deinem MouseOve klappt es !!! Jetzt nur noch ne letzte Frage: Kann ich irgendwie so ne schöne, gelbe Hilfe (als Popup) beim MouseMove einbleden, wenn er über dem Objekt ist??? Danke, winx |
Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
Delphi-Quellcode:
Tchecklistbox.showhint:=true;
TChecklistbox.hint:='Das wird angezeigt' |
Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
dass problem ist, das der hint spezifisch für die ganze box ist und nich fürs item...
also kommt der hint auch, wenn ich nur auf die combolistbos fahre, irgendwo hin... kann man das auch fürs item machen? |
Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
Na du überprüfst doch bei onMouseMove, wo sich die Maus befindet. Und je nachdem, wo die Maus ist, sezt du das Hintfenster neu, oder lässt es halt gar nicht anzeigen.
|
Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
So hab ichs jetzt auch, aber irgendwie klappt des noch nich so richtig:
Delphi-Quellcode:
jetzt zeigt sich NIX mehr an :-(
procedure Tmainform.objectlistMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var index : integer; val : string; begin index := objectlist.ItemAtPos(Point(x,y),true); if (index > -1) then begin objectlist.ShowHint := true; try if (objectlist.Items[objectlist.ItemIndex] = objectlist.Items[objectlist.ItemAtPos(Point(X, Y), True)]) then objectlist.Hint := objectlist.Items[index] else objectList.ShowHint := false; finally objectlist.ShowHint := false; end; end; end; wo liegt denn da der Fehler??? |
Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
Hallo nochmal,
also hier ist mein Code, eben getestet:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TItemData = class private fInfoString: string; public property InfoString: string read fInfoString; constructor Create(aInfoString: string); end; TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; lblItemData: TLabel; procedure Button1Click(Sender: TObject); procedure ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin { Einfach mal ein paar sinnlose Einträge einfügen } for i:= 0 to 10 do ListBox1.Items.AddObject('Eintrag Nr. ' + inttostr(i), TItemData.Create('Daten zu Eintrag Nr. ' + inttostr(i))); end; { TItemData } constructor TItemData.Create(aInfoString: string); begin inherited Create; fInfoString:= aInfoString; end; procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Index: integer; begin with TListbox(Sender) do begin Index:= ItemAtPos(Point(x,y), true); ShowHint:= Index <> -1; If (Index <> -1) then Hint:= TItemData(Items.Objects[Index]).InfoString; end; end; end. Natürlich könnte man das Ganze noch etwas perfektionieren, indem z.B. der Hint schneller oder länger angezeigt wird. Das kann man ja dann nach Wunsch einstellen. Gruß Pfoto |
Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
Hallo Pfoto,
swoeit war ich doch auch schon ,allerdings zeigts dann immer, wenn ich auf die Control gehe die Infobox an, ich möchte aber nur wenn man über ein Objekt geht. Und dann hab ichs mir so gedacht:
Delphi-Quellcode:
aber klappt eben nich...bin mir nur nich im klaren, wieso?
procedure Tmainform.objectlistMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var index : integer; val : string; begin index := objectlist.ItemAtPos(Point(x,y),true); if (index > -1) then begin objectlist.ShowHint := true; try if (objectlist.Items[objectlist.ItemIndex] = objectlist.Items[objectlist.ItemAtPos(Point(X, Y), True)]) then objectlist.Hint := objectlist.Items[index] else objectList.ShowHint := false; finally objectlist.ShowHint := false; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz