Autor Beitrag
Stoffel1984
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Fr 11.07.03 08:53 
Hallo!

Hab mal wieder ne kleine Frage an euch. Und zwar ich zeige in einer Listview (SubItem) einen sehr langen Text an. Über Sinn und zweck muss nicht diskutiert werden. Mein Chef will das so :? Es soll nun ein Fenster also ne andere Form erscheinen sobald der Mauszeiger über dieses spezielle Item fährt. Dies ist soweit kein Problem. Hab auch schon swas ähnliches gebaut:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Item: TListItem;
  HitTest: THitTests; 
begin 
  Item := ListView1.GetItemAt(x, y);
  HitTest := ListView1.GetHitTestInfoAt(x, y);
  if (Item <> nil) and (HitTest = [htOnItem]) then
  begin
    // Was kommt hier rein???
  end;
end;


Wie kann ich nun überprüfen ob der Mauszeiger auf einem speziellen SubItem liegt? Also zum Beispiel Item[1].Subitems[3] oder so ähnlich?
:wink:

Hoffe ihr habt ne Idee,

Gruß Stoffel
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Fr 11.07.03 12:24 
Ereigniss(e): OnMouseOver, OnMouseOut?!?
Position(en): Left, Top, Left+Width, Top+Height?!?

Vielleicht hilft dir das ein wenig weiter. Sorry, wenn die Hilfe nur so kurz ist, aber ich muß mal eben schnell los. :-) Ich poste ggf. später noch was dazu. :lol:

_________________
Hasta La Victoria Siempre
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Mi 16.07.03 12:57 
Ja das ist soweit kein Problem...
Hab den Code etwas angeändert stehe aber immernoch vor dem gleichen Problem: ich bekomme nicht heraus in welcher Spalte sich der Mauszeiger befindet:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.ListView1InfoTip(Sender: TObject; Item: TListItem;
  var InfoTip: String);
var
  HitTest: THitTests;
  x,y : integer;
begin
  x := Mouse.CursorPos.X;
  y := mouse.CursorPos.Y;
  Item := ListView1.GetItemAt(x, y);
  HitTest := ListView1.GetHitTestInfoAt(x, y);
  //irgendeine Abfrage
  hint.Show;
  hint.Left := X;
  hint.Top := Y;
  infotip:= '';
end;


Grüße,

Stoffel
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Do 17.07.03 13:23 
Hey Jungs das gibts doch nich :(

Ihr löst hier Probleme von denen ich nichtmal weis wie sie gemacht werden und jetzt könnt ihr so ne kleine Frage nicht beantworten......oder ist Sie vielleicht doch zu schwer? :nixweiss:

Bin echt total verzweifelt.....

Danke schonmal,

Stoffel
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: Do 17.07.03 14:13 
Hallo

also meines wissens nach kommst du ohne weiteres nicht an die Spalte ran. ich würd mit den Spaltenbreiten arbeiten um zu ermitteln, in welcher Spalte die Maus ist:

auf die Schnelle und zum Denkanstoß so (nich groß getestet, bestimmt noch n Fehler drin :wink: ) kannst es ja noch verbessern
Ein Problem sehe ich noch bei Columns.Items[i].Width da kommt Mist raus, wenn du eine Spaltenbreite änderst. Es gibt noch ne andere Möglichkeit, die steht auch in den VCL-Sourcen (hab aber hoier nur ne Standardversion, muß mal zu hause guggn)

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:
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var links,       //linke Pos einer Spalte
    rechts,      //rechte pos einer spalte
    i,spalte:integer;
begin
  Spalte:=-1;
  with listview1 do
    begin
      x:=x+abs(topitem.Left);  //Scrollen ausgleichen
      //erste spalte
      links:=0;
      rechts:=Columns.Items[0].Width;
      i:=0;

      while (i<=Columns.Count-1)  do
        begin
          if ((x>=links) and (x<=rechts)) then
            begin
             //mauspos in Spalte
              Spalte := i;
              break;
            end
           else
            begin
              //nächste Spalte
              links:=rechts;
              rechts:=rechts+Columns.Items[i].Width;
              inc(i);
            end;
        end;
    end;
  label1.Caption:='Spalte: '+inttostr(spalte);
end;


acho denk aber dran: die caption hat die Spalte 0, das erst subitem hat die Spaltennr 1, aber als Subitemindex die 0, mußt du aufpassen

mfg Frank

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