Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 14.03.03 11:04 
Hab da ne Frage zu TListbox. Und zwar möchte ich, dass bei einem Doppelklick in die Liste das markierte Element bearbeitet werden kann, ODER, wenn man kein Element mit dem Doppelklcik getroffen hat, ein neues Element einfügen kann.
Das wollte ich so machen
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TMainform.ListBox1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
    xposition:=x; // xposition und yposition sind globale Variablen, in denen
    yposition:=y; //ich mir die Position des Mauszeigers merke
end;

procedure TMainform.Listbox1DBLClick(Sender: TObject);
var punkt:Tpoint;
begin
    punkt.x:=xposition;
    punkt.Y:=yposition;
    if listbox1.ItemAtPos(punkt,false)<listbox1.Count-1 then 
           {code fürs bearbeiten des Eintrages}
    else {code fürs einfügen eines neuen Eintrages}
end;


Das klappt aber nicht. Es wird immer nur der Code zum Bearbeiten ausgeführt, wenn ich einen Eintrag treffe. Bei einem Doppelklick auf eine leere Stelle der Listbox passiert nix.

_________________
We are, we were and will not be.


Zuletzt bearbeitet von Gausi am Fr 14.03.03 13:46, insgesamt 1-mal bearbeitet
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 14.03.03 11:28 
Versuch es mal nur mit dem Event OnDBLClick:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TMainform.Listbox1DBLClick(Sender: TObject); 
begin 
  if Listbox1.ItemIndex > -1 Then
    { code fürs bearbeiten }
  else
    { code fürs einfügen } 
end;

Gruß
TINO
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 14.03.03 11:41 
Das würde ich so ungerne machen, aus folgendem Grund:
Listbox1.Itemindex ist ja immer >-1, wenn man einmal einen Eintrag darin markiert hat. Es sei denn, man setzt ihn manuell wieder auf -1, wenn man z.B. die Listbox wieder verlässt (mit onExit..?)

Ausserdem: das klappt auch nicht. Scheinbar tritt das Event OnDblClick nur dann auf, wenn mit dem Klick ein Eintrag getroffen wird. :?

_________________
We are, we were and will not be.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 14.03.03 12:11 
Dann ändere mal Deine Event wie folgt:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TMainform.Listbox1DBLClick(Sender: TObject); 
var 
  punkt:Tpoint; 
  Idx: Integer;
begin 
  punkt.x:=xposition; 
  punkt.Y:=yposition; 

  Idx := listbox1.ItemAtPos (punkt, true);

  If Idx > -1  then 
     {code fürs bearbeiten des Eintrages} 
  else 
    {code fürs einfügen eines neuen Eintrages} 
end;
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 14.03.03 12:51 
danke für die Hilfe, aber auch das klappt nicht. Ich weiss jetzt auch warum, aber ich weiss noch nicht wie ich das ändern kann.
Hab zu testzwecken noch ne Memo eingefügt, in die bei einem Doppelklick was reingeschrieben wird:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TMainform.Listbox1DBLClick(Sender: TObject); 
var 
  punkt:Tpoint; 
  Idx: Integer; 
begin 
  memo1.lines.add('Doppelklick');
  punkt.x:=xposition; 
  punkt.Y:=yposition; 
  Idx := listbox1.ItemAtPos (punkt, true); 
  If Idx > -1  then 
    {code fürs bearbeiten des Eintrages} 
  else 
    {code fürs einfügen eines neuen Eintrages} 
end;

Die Prozedur wird NUR DANN aufgerufen, wenn man einen Doppelklick auf einen Listeneintrag macht. Wenn man keinen Eintrag trifft, wird die Prozedur NICHT aufgerufen (da kein "Doppelklick" in der Memo erscheint).

_________________
We are, we were and will not be.
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 14.03.03 13:45 
Hab das Problem gelöst, mit dem OnMouseDown Event und einem Timer, wie es ONZ an anderer Stelle in diesem Forum erklärt hat. Damit hab ich mir mein eigenes DoppelklickEvent gebaut.

_________________
We are, we were and will not be.