AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TListbox und TBalloonHint

Ein Thema von Maya · begonnen am 20. Mär 2012 · letzter Beitrag vom 21. Mär 2012
Antwort Antwort
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#1

TListbox und TBalloonHint

  Alt 20. Mär 2012, 12:01
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:
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;
Über Tipps wäre ich sehr erfreut.
Ich mach mir jetzt erstmal 'n Kakao.
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen

Geändert von Maya (20. Mär 2012 um 13:36 Uhr) Grund: Weiterer Thread eingefügt!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TListbox und TBalloonHint

  Alt 20. Mär 2012, 16:47
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...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: TListbox und TBalloonHint

  Alt 20. Mär 2012, 18:03
Hallo,

mich macht dein
Application.CancelHint; stutzig. das gehört dort am Anfang nicht hin und kann so auch nicht funktionieren.
setzt das mal direkt vor
Application.ActivateHint(Point(x,y)); Wenn das noch nicht geht, würde ich das activatehint auch mal ausklammern.

Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)

Geändert von mkinzler (21. Mär 2012 um 06:34 Uhr) Grund: Delphi-Tag gefixt
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: TListbox und TBalloonHint

  Alt 20. Mär 2012, 22:44
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: TListbox und TBalloonHint

  Alt 21. Mär 2012, 05:42
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;
Guten Morgen ihr Lieben,

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 lst1.Hint:=neuerHint; die richtige Adresse in der Variable angezeigt wird.
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.
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen

Geändert von Maya (21. Mär 2012 um 06:05 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: TListbox und TBalloonHint

  Alt 21. Mär 2012, 06:03
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?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: TListbox und TBalloonHint

  Alt 21. Mär 2012, 06:10
Ich hab meinen Beitrag oben mal aktualisiert.
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: TListbox und TBalloonHint

  Alt 21. Mär 2012, 06:44
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))
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: TListbox und TBalloonHint

  Alt 21. Mär 2012, 06:59
Or, du bist super, danke!!

Für alle, die auch mal das Problem haben sollten, hier der Quelltext:

Delphi-Quellcode:
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;
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.

Bummi, dir ein absolut dickes "DANKE".
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: TListbox und TBalloonHint

  Alt 21. Mär 2012, 07:58
never mind ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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