Autor Beitrag
OliverN_26
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Mi 05.01.11 04:48 
Hi Leute

Ich hab ein generelles Verständnis Problem mit der ListView.
Wenn ich z.B. 3 Einträge habe und auf den 1. Klicke .. warum wird dann der folgende Code 3x ausgeführt?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
var
  sl : TStringList;
  Antwort,i : Integer;
  Zeile : String;
  DHandle : TextFile;
begin
  Antwort := Application.MessageBox (PChar('Test'),'Test', MB_YesNo+MB_IconQuestion+MB_DefButton1);
  if Antwort = IDYes then begin
    .
    .
    .
  end;
end;


Ein weiteres Problem:
Ich klicke auf den Wert..es kommt die obige Frage..ich sage NEIN und der Wert wird innerhalb der ListView markiert (blau hinterlegt).
Danach kann ich drauf klicken wie ich will aber ich komm nicht in die obige Procedure.

Wo ist mein Denkfehler?

Danke
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 05.01.11 06:43 
Du prüfst ja auch gar nicht, welcher Eintrag betroffen ist. Und auch nicht, ob dieser markiert wurde oder es nicht mehr ist.

Du bekommst ggf. einmal das Event ausgelöst mit Selected auf False für den zuletzt markierten und dann mit Selected auf True für den jetzt markierten Eintrag.

Und bei mir passiert das auch nicht öfter. Einmal beim ersten Markieren und dann zweimal, wenn dieser deselektiert und der neue selektiert wird. :nixweiss:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  if Selected then
    ShowMessage('Markiert: ' + Item.Caption)
  else
    ShowMessage('Entmarkiert: ' + Item.Caption);
Nebenbei: Die Flags sollten mir or verknüpft werden. Es kommt hier auf das gleiche heraus, aber es sieht so ein wenig komisch aus.
ausblenden Delphi-Quelltext
1:
MB_YesNo or MB_IconQuestion or MB_DefButton1					
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Mi 05.01.11 15:55 
Hi

Selected bringt mich leider auch nicht weiter.
Ich will nichts weiter als einen Eintrag der Listview "anklicken" und dann soll was geschehen.
Mach ich das am Besten über SelectItem oder onMouseDown?
SelectItem scheint irgendwie vor der Markierung des Items aufgerufen zu werden, denn wie bereits erwähnt,
wenn ich meine MessageBox mit "NEIN" beantworte ist das ListViewItem blau unterlegt und ich kann drauf drücken
wie ich will. Ich komm nich in die procedure SelectItem. Das kann doch nich so schwer sein oder?
Hab leider noch nie mit ner ListView gearbeitet ..

danke

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ok, habs hinbekommen.
Habs jetz per onMouseDown gemacht und teste ob auch ein Item angeklickt wurde.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Item : TListItem;
begin
  Item := ListView1.GetItemAt(X,Y);
  if Assigned(Item) then begin
    .
    .
    .
  end;
end;


Danke :-)