Autor Beitrag
csigg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Fr 10.06.05 15:21 
Ich hab ein recht grosses Listview in meinem Programm mit ca 100 Einträgen/Items. Jetzt würd ich mir zu jeden Item gern ein Hint anzeigen lassen, das aus der Datenbank gelesen wird. Das auslesen usw. ist nicht das Problem. Wie, wenn das überhaupt geht, kann ich ein Hint eines Items anszeigenlassen??
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 10.06.05 21:09 
Hallo

such mal im Forum nach Suche in: Delphi-Forum, Delphi-Library LISTBOX HINT oder Suche in: Delphi-Forum, Delphi-Library STRINGGRID HINT.
Die Vorgehensweise ist die gleiche, im mousemove die Zeile/Zelle bestimmmen, Hint ermitteln und mit altem hint vergleichen. Wenn ungleich dann nueen Hint setzen und application.cancelhint aufrufen, damit der Hint auch neu angezeigt wird. Showhint natürlich auch nicht vergessen.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Di 28.06.05 09:18 
Ich hab da mal geschaut, aber nicht wirklich brauchbares gefunden. Kann mir jemand sagen wie ich hier:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure Tfrm_Main.lvCube5InfoTip(Sender: TObject; Item: TListItem;
  var InfoTip: String);
var info: String;
    temp: String;
    ListItem: TListItem;
begin
If lvCube5.ShowHinT = false then
lvCube5.ShowHint := true;




 temp :=
 showMessage(temp);

lvCube5.Hint := info;
end;

weitermachen kann??
Ich muss irgendwie das ITEM auslesen können, weiss jemand wie??
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Di 28.06.05 09:29 
obige frage hat sich g rad erledigt, das Ereignis, OnInfoTip wird nie ausgelöst, hat jemand eine andere Idee??
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 28.06.05 10:15 
Hallo,

wenn Du die Eigenschaft ListView.Tag noch nicht genutzt wird, hast Du folgende Möglichkeit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var aItem : TListItem;
begin
  aItem := ListView1.GetItemAt(X, Y);
  if aItem <> nil then
      begin
      Hint := aItem.Caption;//hier entsprechend ändern
      if aItem.Index <> ListView1.Tag then
        begin
        Application.CancelHint;
        ListView1.Tag := aItem.Index;
        end;
      end
      else
        Application.CancelHint;
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
sahib
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117

Win 2000 SP4+
Delphi 5 Prof.
BeitragVerfasst: Di 28.06.05 10:17 
Oder so:

ausblenden volle Höhe 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:
36:
37:
38:
39:
Var
  Spalte, OldX, OldY: Integer;

procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  LI                    : TListItem;
  i                     : Byte;
  SpaltenBreite,
  VorherigeSpaltenBreite: Integer;
begin
  // Wurde Mauszeiger bewegt?
  if (X <> OldX) or (Y <> OldY) then begin
    LI := ListView1.GetItemAt(X, Y);  // Item holen
    if LI = nil then Exit;  // Keines da?
    OldX := X; OldY := Y;
    SpaltenBreite := 0;
    // Spalte suchen über Breite der Spalten und MausX
    with ListView1 do begin
      for i := 0 to Pred(Columns.Count) do begin
        VorherigeSpaltenBreite := SpaltenBreite;
        inc(SpaltenBreite, Columns.Items[i].Width);
        if X <= SpaltenBreite then begin
          Spalte := i;
          Break
        end
      end
    end
  end
end;

procedure TForm1.ListView1InfoTip(Sender: TObject; Item: TListItem;
  var InfoTip: String);
begin
  if Spalte = 0 then
    InfoTip := Item.Caption
  else
    InfoTip := Item.SubItems[Spalte]
end;


*EDIT* Ein 'end' und Kommentare eingefügt

Christian
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 28.06.05 10:38 
Hallo,

@sahib, hab das jetzt nicht getestet, aber reagiert das auch richtig, wenn die Spalten der ListView nach links verschoben werden?
Hatte mal etwas ähnliches programmiert, den Versatz der Spalten kann man mit TListItem.Left abfragen. Das nur zur Info.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
sahib
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117

Win 2000 SP4+
Delphi 5 Prof.
BeitragVerfasst: Di 28.06.05 11:14 
Hallo.

user profile iconLannes hat folgendes geschrieben:
Hatte mal etwas ähnliches programmiert, den Versatz der Spalten kann man mit TListItem.Left abfragen. Das nur zur Info.

Hmm, das kann schon angehen. Wozu ist die Eigenschaft .Left des Items da? Mit der arbeite ich nicht. Mein Code wird nicht funktionieren, wenn die Spalten untereinander vertauscht werden. Aber darüber hatte ich auch mal etwas gelesen, es gibt einen internen Array, wo die Daten abgelegt sind.

Christian
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Di 28.06.05 11:29 
also ich hab die Version von sahib genommen, die funktioniert ohne probleme.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 28.06.05 11:31 
Hallo,
user profile iconsahib hat folgendes geschrieben:
... Wozu ist die Eigenschaft .Left des Items da? ...

Wenn die Spalten der ListView nicht verschoben sind hat .Left den Wert 0. Verschiebt man nun die Spalten mit der horizontalen Scrollbar gibt .Left den positiven Wert des Versatzes an. Muss ich jetzt irgendwas über die Spaltenbreiten berechnen kann ich .Left in die Berechnung einbeziehen.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
sahib
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117

Win 2000 SP4+
Delphi 5 Prof.
BeitragVerfasst: Di 28.06.05 13:09 
Ok, Lannes. Das habe ich jetzt. Sollte aber kein Problem sein, diese Verschiebung rauszunehmen.

ausblenden Delphi-Quelltext
1:
  if X <= SpaltenBreite then begin					

wird zu
ausblenden Delphi-Quelltext
1:
  if X <= SpaltenBreite + LI.Left then begin					


Christian