Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Listbox.hint
D. Annies - Fr 29.01.10 10:57
Titel: Listbox.hint
Hi, Delpher,
ich "schwebe" mit der Maus über einer Listbox und fahre die einzelnen Einträge ab, das sind die Namen von Schulklassen.
Dann will ich jeweils die zugehörigen Klassenlehrer aus einer anderen Tabelle als Hint sehen.
Ich habe folgenden Code, der aber den Klassenlehrer nicht wechselt:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin QAusleihsatz.Locate('Klasse', listbox1.Items[listbox1.ItemIndex], []); listbox1.Hint := QAusleihsatz.fieldbyname('KLK').asstring; end; |
Wie muss ich das ändern?
Gruß, Detlef
guinnes - Fr 29.01.10 11:14
Erst ShowHint auf False, den Hint wechseln und dann ShowHint wieder auf True
D. Annies - Fr 29.01.10 11:20
Danke, reicht aber noch nicht, ich bekomme immer den markierten Eintrag angezeigt.
---
Moderiert von
Narses: Beiträge zusammengefasst---
So, jetzt habe ich folgende Lösung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var item: integer; begin with Sender as TListbox do begin item := itemAtpos(Point(x, y), true); if item >= 0 then begin QAusleihsatz.Locate('Klasse', listbox1.Items[Item], []); listbox1.Hint := QAusleihsatz.fieldbyname('KLK').asstring; end; end; end; |
Aber ich muss jedesmal wieder neu von außen in die Listbox, kann also nicht einfach die Einträge "abfahren".
guinnes - Fr 29.01.10 12:06
D. Annies hat folgendes geschrieben : |
Aber ich muss jedesmal wieder neu von außen in die Listbox, kann also nicht einfach die Einträge "abfahren". |
Deswegen sollst du Showhint auch ausschalten und wieder einschalten. Bei mir klappt das z.B. bei einem TChart problemlos :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure TPlanung.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); Var Index : Integer;
procedure GetHint ( aList : TStringList); begin with aList do begin fChargenName := Names[Index]; Chart1.Hint := Names[Index] + #$0d + Trim(Copy(Strings[Index],16,255)); end; end;
begin if fEnableMouseMove Then begin Chart1.ShowHint := False; Chart1.Hint := #$0D; fChargenName := ''; Index := Series1.GetCursorValueIndex; if (Index >= 0) and (Index < fChargen.Count) Then begin GetHint(fChargen); fMouseKessel := Trunc(Series1.YValues.Value[Index]); end else begin Index := Series2.GetCursorValueIndex; if (Index >= 0) and (Index < fLaufende.Count) Then GetHint(fLaufende); end; if Chart1.Hint <> #$0d Then Chart1.ShowHint := True; end; end; |
D. Annies - Fr 29.01.10 13:10
Tut mir leid, ich krieg's für die Listbox nicht hin :roll: :(
guinnes - Fr 29.01.10 13:52
D. Annies hat folgendes geschrieben : |
Tut mir leid, ich krieg's für die Listbox nicht hin :roll: :( |
Ich kann dich beruhigen, mit ner Listbox krieg ichs auch nicht hin :bawling:
Wahrscheinlich wirken die einzelnen ChartSeries so, als würde die Maus den Chart verlassen und dann wieder betreten
D. Annies - Fr 29.01.10 14:45
Hi, Guinnes,
na, ja, beruhigt bin ich nicht, :wink: wir beide sind wohl eher kaltgestellt!
Trotzdem danke für deine Mühe,
Detlef :motz:
ALF - Fr 29.01.10 15:15
Hi, ich versuch mal zu Helfen kenn mich aber in Tabellen und so nicht aus :?
Aber was machst Du hier:
Delphi-Quelltext
1:
| listbox1.Hint := QAusleihsatz.fieldbyname('KLK').asstring; |
Wo erhöchst Du hier die tabellenzeile oder so.
Du übergibst , wenn ich es richtig sehe, immer den gleichen Wert oder!?
Gruss ALf
Nersgatt - Fr 29.01.10 15:33
ALF hat folgendes geschrieben : |
Hi, ich versuch mal zu Helfen kenn mich aber in Tabellen und so nicht aus :?
Aber was machst Du hier:
Delphi-Quelltext 1:
| listbox1.Hint := QAusleihsatz.fieldbyname('KLK').asstring; |
Wo erhöchst Du hier die tabellenzeile oder so.
Du übergibst , wenn ich es richtig sehe, immer den gleichen Wert oder!? |
Ne, macht er nicht. Mit dem Locate eine Zeile vorher sucht er den passenden Datensatz raus und zeigt das die Daten aus dem entsprechenden Feld an.
guinnes - Fr 29.01.10 16:00
Ich Habs :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.ListBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var item : integer; HS : string; LB : TListBox; begin LB := Sender as TListbox; item := LB.itemAtpos(Point(x, y), true); if item >= 0 then begin HS := LB.Items.Strings[Item]; if HS <> LB.Hint then begin LB.Hint := HS; Application.ActivateHint(Point(X,Y)); end; end; end; |
D. Annies - Fr 29.01.10 17:56
Allteer!! (Tschuldigung!)
PERFEKT! Wie bist du denn darauf gekommen?
Ja, so wollte ich es haben. Dann noch wieder den Locate gesetzt - es funzt!
Vielen, vielen Dank! Hatte ich gar nicht mehr mit gerechnet.
Gruß aus Lübeck,
Detlef
guinnes - Fr 29.01.10 19:40
D. Annies hat folgendes geschrieben : |
Allteer!! (Tschuldigung!) |
Na, ja, mit 56 stört mich das nicht mehr, es passt ja :wink:
Zitat: |
Wie bist du denn darauf gekommen? |
Einfach ( hust ) im Quelltext der Forms.Pas ( da liegt ja das Application-Objekt ) nach Hint gesucht
Zitat: |
Dann noch wieder den Locate gesetzt - es funzt! |
Du solltest dir den gefundenen Zeileninhalt aber in der Form merken, sonst wird deine Datenbank bei jedem noch so kleinen Ruckler an der Maus abgefragt, was ja nicht nötig ist
D. Annies - Fr 29.01.10 22:05
Hi, guinnes,
off-topic:
nun, und ich: detlef := guinnes - 1; (ich auch allteer ..) - Nein, ich war nur so begeistert, hatte nicht gedacht, dass es doch geht - und so (hust) einfach!!
bis denne,
Detlef
kmma - Mo 23.08.10 15:06
Hallo
Ich habe eine Frage zu dieser Lösung. So wie sie dasteht funktioniert das, sobald ich aber eine Variable HS2 einfüge, klappt das nicht mehr, hat jemand eine Ahnung warum? (Wichtig: Ich mache garnichts mit hs2, ich bin da nur draufgestoßen weil ich eigentlich den hint-Text ändern wollte.
guinnes hat folgendes geschrieben : |
Ich Habs :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.ListBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var item : integer; HS, hs2 : string; LB : TListBox; begin LB := Sender as TListbox; item := LB.itemAtpos(Point(x, y), true); if item >= 0 then begin HS := LB.Items.Strings[Item]; HS2 := lowercase(hs); if HS <> LB.Hint then begin LB.Hint := HS; Application.ActivateHint(Point(X,Y)); end; end; end; | |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!