TListbox und TBalloonHint
Hallo ihr Lieben,
ich habe eine TListbox in der Namen von Leuten aufgezählt sind. Wenn man nun mit den Mauscursor dadrüber fährt, möchte ich, dass die Adresse der Personen angezeigt wird. Habe ich auch fast soweit geschafft, wie ich es möchte, aber es tun sich zwei Probleme auf. 1: Dieses "dadrüberfahren", durch die Liste funktioniert nicht. Ich muss jedes Mal aus der Listbox heraus und wieder herein mit den Mauszeiger. 2: Wenn ich dann wieder auf einen Eintrag gehe, zeigt er mir die Adresse vom vorherigen Eintrag ein, auf den ich war. -.- Ich habe schon folgende Thread gelesen: Listbox.hint oder auch hier ListBox: Hint = Item @ Mouse, klappt beides bei mir nicht. -.- Ich hab jetzt auch die Struktur von dem Beispiel hier ausprobiert und auch keinen Erfolg gehabt. Hint ähnlich wie ICQ Benutzer-Informationen Hier ist mein Quellcode:
Delphi-Quellcode:
Über Tipps wäre ich sehr erfreut.
procedure TForm.lst1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var ID: Integer; Text, neuerHint: string; begin Application.CancelHint; ID:=lst1.ItemAtPos(Point(x,y), True); if (ID>=0) then begin Text:=lst1.Items.Strings[ID]; //[...]Datenbankabfrage nach der Adresse[...] neuerHint:=dtm.sdqrySuche.FieldByName('strasse').AsString+ #13+#10+ dtm.sdqrySuche.FieldByName('plz').AsString+' ' + dtm.sdqrySuche.FieldByName('ort').AsString; if neuerHint<>lst1.Hint then begin lst1.Hint:=neuerHint; Application.ActivateHint(Point(x,y)); end; end; end; Ich mach mir jetzt erstmal 'n Kakao. :) |
AW: TListbox und TBalloonHint
Falls Dir niemand konkreter helfen kann...
Ich habe mal Hints für eine ComboBox realisiert wie hier: http://delphi.about.com/library/weekly/aa102604a.htm Vielleicht findest Du in der Gegend etwas... |
AW: TListbox und TBalloonHint
Hallo,
mich macht dein
Delphi-Quellcode:
stutzig. das gehört dort am Anfang nicht hin und kann so auch nicht funktionieren.
Application.CancelHint;
setzt das mal direkt vor
Delphi-Quellcode:
Wenn das noch nicht geht, würde ich das activatehint auch mal ausklammern.
Application.ActivateHint(Point(x,y));
Gruß Frank |
AW: TListbox und TBalloonHint
ohne Daten, aber im Prinzip ...
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Application.HintPause :=0; Application.HintHidePause :=2000; end; procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var ANewHint:String; i:Integer; begin i := ListBox1.ItemAtPos(Point(x,y), True); if i>-1 then begin ANewHint := ListBox1.Items[i]; if ANewHint<>Listbox1.Hint then begin Listbox1.Hint:=ANewHint; Application.ActivateHint(Point(x,y)); end; end; end; |
AW: TListbox und TBalloonHint
Zitat:
danke erstmal für die Denkanstöße. Bummi, deine Version ist ja fast die gleiche wie meine und leider brachte sie auch nicht den erwünschten Erfolg. Die Daten sind immer noch die vom vorherigen Datensatz, auf dem die Maus war. Auch muss ich immer noch 'raus aus der Listbox, um einen neuen Hint zu bekommen. Ich würde ja am liebsten verbissen daran weiterarbeiten, bis das funktioniert, aber ich weiß nicht so recht, wo da der Fehler liegen könnte, da ich den Quelltext schon mehrere Male durch den Debugger jagte und eigentlich auch an der Stelle
Delphi-Quellcode:
die richtige Adresse in der Variable angezeigt wird.
lst1.Hint:=neuerHint;
Ein Kollege vermutete, dass das MouseMove-Ereignis auch vielleicht noch so ganz das richtige dafür ist, was ich da basteln möchte. Aber sowas wie MouseOver gibt es ja leider nicht bei der Listbox. -.- Mir jetzt selber so ein Ereignis zu schreiben, ist mir für diese Sache eigentlich auch zu aufwendig, da würde ich mir lieber eine andere Art überlegen, die Adresse anzeigen zu lassen. EDIT! So, Maya Sherlock Holmes hat zugeschlagen und geht der Sache jetzt auf 'n Grund. Ich hab jetzte infach mir 'n Label noch mit hingeklatscht und wenn ich jetzt über die Liste fahre, funktioniert das mit dem Label so wie ich das will, dass immer aktuell die Adresse des anvisierten Namen angezeigt wird. Ein weiterer Test bestätigte mir, dass das Problem bei dem TBalloonHint liegt. Als ich den aus dem CustomHint von der Listbox 'rausnahm, funktionierte das einwandfrei mit dem Standardhint! Die Schrift ist mir von dem aber zu klein, weswegen ich den BalloonHint nehmen möchte. Jemand einen Tipp, was ich bei den Eigenschaften ändern muss? Den Delay habe ich schon 'runtergesetzt, kann aber z.B. nicht so recht was mit der Eigenschaft "HideAfter" anfangen und die OH empfinde ich da jetzt auch nicht als hilfreich. |
AW: TListbox und TBalloonHint
Mhhhh, was ich hier eingestellt habe wurde mit 2010 getestet und funktioniert, geht es bei Dir auch nicht in der abgespeckten Version, oder tritt das Problem erst im Zusammenhang mit den Daten auf?
|
AW: TListbox und TBalloonHint
Ich hab meinen Beitrag oben mal aktualisiert. ;)
|
AW: TListbox und TBalloonHint
ist zwar etwas unsauber, aber funktioniert
Delphi-Quellcode:
Listbox1.Hint:=ANewHint;
Sendmessage(Listbox1.Handle,CM_MOUSELeave,0,0); Sendmessage(Listbox1.Handle,CM_MOUSEENTER,0,0); Application.ActivateHint(Point(x,y)) |
AW: TListbox und TBalloonHint
Or, du bist super, danke!!
Für alle, die auch mal das Problem haben sollten, hier der Quelltext:
Delphi-Quellcode:
Ich habe sicherheitshalber noch eingebaut, dass die ID kleiner als die Liste sein muss, da ich die Befürchtung hatte, dass mir das sonst knallt, wenn man außerhalb der Daten gelangt.
procedure TForm1.lst1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var ID: Integer; Text, neuerHint: string; begin ID:=lst1.ItemAtPos(Point(x,y), True); if (ID > -1 ) AND (ID < lst1.Items.Count) then begin Text:=lst1.Items.Strings[ID]; //[..]Datenbankabfrage für die Adressen[...] neuerHint:=dtm.sdqrySuche.FieldByName('strasse').AsString+ #13+#10+ dtm.sdqrySuche.FieldByName('plz').AsString+' ' + dtm.sdqrySuche.FieldByName('ort').AsString; if neuerHint<>lst1.Hint then begin lst1.Hint:=neuerHint; SendMessage(lst1.Handle,CM_MOUSELEAVE,0,0); SendMessage(lst1.Handle,CM_MOUSEENTER,0,0); Application.ActivateHint(Point(x,y)); end; end; end; Bummi, dir ein absolut dickes "DANKE". |
AW: TListbox und TBalloonHint
never mind ...:oops:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 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