Seltsammer fehler bei ShowModal und doppelt klick bei lv

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Seltsammer fehler bei ShowModal und doppelt klick bei lv

Beitrag von pluto »

Hallo,
heute ist mir ein seltsamer Fehler aufgefallen den ich mir nicht erkläern kann also:
ich habe in einer ListView das Ereignis Doppel klick benutzen wollen:

Code: Alles auswählen

procedure TForm1.ListView1DblClick(Sender: TObject);
begin
 
  if ListView1.Selected <> NIL then begin
    Form2.Edit1.Text:=ListView1.Selected.Caption;
    Form2.Edit2.Text:=ListView1.Selected.SubItems.strings[0];
    Form2.Edit3.Text:=ListView1.Selected.SubItems.strings[2];
    Form2.ShowModal;
  end;
end;
wenn ich jetzt auf einen Eintrag doppelt drauf klicke kommt das Dialog und die edit Komponenten werden ausgefüllt... aber die gesammte Maus hat sich aufgehangen und das Programm auch nicht mehr Linux reagiert nur noch auf die Tastertur(das programm kann ich auch nicht mehr beenden nur noch Strg+Alt+Löschtaste...

schreibe ich den gleichen code (das ist jetzt das seltsamme) in einem Button rein und lösche das Ereignis bei der ListView dann gehst wie gewünscht(naja fast)..


Kann mir jemand sagen was ich falsche mache ???
(bei bedarf lade ich das komplete Projekt hoch, ist ja noch nicht viel)
MFG
Michael Springwald

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von Antrepolit »

Hallo Pluto,

ich könnte mir vorstellen, dass es am ShowModal liegt, hab damit in mehreren Windows-
Programmen noch Probleme, allerdings in der Hinsicht, dass die Dialogfenster einfach nicht
modal sind.

MfG Antrepolit

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Bei ShowModal mußt du normalerweise auch anders vorgehen. Eigentlich fragt man das ab:

Code: Alles auswählen

if Form2.ShowModal = mrOK then begin
 
  end;
Mit ShowModal bekommt der Dialog den Focus, so wie du das ausführst verliert der Dialog den aber sofort wieder und der aufrufende Dialog bekommt den Focus nicht wieder. Das müßtest du gezielt mit SetFocus machen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Danke schnullerbacke werde ich probieren !
aber kann mir jemand sagen warum der gleiche code in einem buttom geht in bei einer ListView doppelclickereignis nicht ?
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Bei ListView brauchst du eigentlich kein Doppelklick, das arbeitet mit OnSelect auf einen einfachen Linksklick hin.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

für mein vorhaben wollte ich gerne den Doppel Klick nutzen !

Weil mit einfach klick währe das etwas zu blöd !
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Dann mußt du per OnKeyDown/OnKeyUp da ran. Dann setzt du nen Zähler und bei Zähler = 2 setzt du den zurück. Bei Zähler = 1 nimmst du das Ereignis von der Queue damit er den OnSelect nicht ausführt.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

was hat das Ereignis OnKeyDown/OnKeyUp mit dem Doppelklick mit der Linken Mauste zu tuen ?
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

genau versteh ich jetzt auch nicht warum du nochmal nen listenindex basteln willst Selected enthält doch den markierten eintrag ?!
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Das ist auch nicht das Problem !
Das Problem ist sobalt der oben geschrieben Code in dem Doppelklick ereignis rein kommt kann ich keiner komponente mehr den Focus geben(mit der Maus und Tastertur) also das gesammte betriebsystem hängt ! ich kann(wenn ich glück habe) nur noch per strg+alt+löschtaste neu starten ! mehr nicht !

Schreibe ich den code jedoch in einem button dann geht es wunderbar !

Ich habe nicht vor deshalb eine eigene ListView basteln zu müssen !
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Du versuchst da in einer CallBack-Prozedur ein Formular aufzurufen. Das ist ein gar gefährlich Spiel. Der kehrt danach sofort zu dem zuletzt aktivem Objekt zurück. Da aber nun dein Formular Form2 angeblich den Focus hat, verliert dein Aufrufer-Objekt den Focus und Form2 verliert ihn wegen ShowModal auch gleich wieder. Das nennt man dann Deadlock.

Du darfst bei so einer Konstruktion bestenfalls Form2.Show verwenden, dann behält der Aufrufer den Focus und du mußt später dein Form2 aktivieren. Das ganze führt, so wie du das gemacht hast dazu, das die Rückkehr-Adresse vom Stack genommen wird, damit verklemmt sich die ganze Anwendung und in diesem Fall scheinbar auch das BS.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

das erlärt vieles !
Verstehen tue ich das noch nicht 100%ig aber ich glaube ich kann das mit einer variable vom typ Boolean umgehen oder ?
wenn ich den beim doppel klick setzte und erst wieder zurück setze wenn das fourmla geschlossen ist oder so !

Ich frage mich immer noch warum das in einem button geht und bei einer listview nicht !
letzendlich ist das doch das selbe oder nicht ?
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wo isn da ne callback funktion ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Bei einem Button wechselst du aber nicht durch die Hintertür den Focus, was du da vorhast hab ich auch schonmal versucht, das geht nicht. Wenn du das mit Show machst geht es. Das Form hat auch noch Showable oder ähnlich, das kannst du abprüfen und dann den Focus wechseln.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Versteh trotsdem net warum das net gehen soll
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten