Seltsammer fehler bei ShowModal und doppelt klick bei lv
-
- 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
-
- 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)
seltsam unter Delphi ging ist, da bin ich mir 100% sicher ! da habe ich sowas öfter gemacht !
was ist denn die Z-Ordnung ?
davon habe ich noch nie was gehört !
ich verstehe immer noch nicht wo der unterschied zwischen einem Buttom klick und einem ListView doppel klick sein soll !
Es sind beides Ereignisse das eine wird nur einmal ausgelöst und beim zweiten werden mid. zwei ausgelöst !
Naja muss ich das Problem wohl anders lösen. Schade es währe so schön gewesen es auf diese art und weise zu lösen !
Mal sehen was sich anbitet auser eine ListView .... mir geht es ja darum das ich bestimmte Einträge in der ListView ändern möchte(vom user) und diese Änderungen werden im zweiten Dialog gemacht und die werden dann übernommen !
evlt. eignet sich auch eine Stringgrid ist zwar nicht ganz so schön aber müste glaube ich auch gehen !
(die frage ist ja auch ob das bei allen Komponenten so ist...)
was ist denn die Z-Ordnung ?
davon habe ich noch nie was gehört !
ich verstehe immer noch nicht wo der unterschied zwischen einem Buttom klick und einem ListView doppel klick sein soll !
Es sind beides Ereignisse das eine wird nur einmal ausgelöst und beim zweiten werden mid. zwei ausgelöst !
Naja muss ich das Problem wohl anders lösen. Schade es währe so schön gewesen es auf diese art und weise zu lösen !
Mal sehen was sich anbitet auser eine ListView .... mir geht es ja darum das ich bestimmte Einträge in der ListView ändern möchte(vom user) und diese Änderungen werden im zweiten Dialog gemacht und die werden dann übernommen !
evlt. eignet sich auch eine Stringgrid ist zwar nicht ganz so schön aber müste glaube ich auch gehen !
(die frage ist ja auch ob das bei allen Komponenten so ist...)
MFG
Michael Springwald
Michael Springwald
-
- 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
Z-Ordnung beschreibt die Anordnung der einzelnen Objekte innerhalb eines Parent-Objektes wie z.B. TForm. Dabei kann der Parent eines TListView z.B. ein TBevel sein und der Parent TBevel dann TForm.
Da bei ShowModal der Fokus wechselt, kann das bei so einer Konstruktion zu Problemen führen, weil der Parent von TBevel (hier TForm) in diesem Fall den Fokus verliert. Beim Rücksprung versucht die Anwendung dann den Fokus wieder an TListView zu übergeben, was nicht mehr geht weil TForm den Fokus verloren hat und eventuell nicht wieder bekommt.
Das war bei entsprechend komplexen Anordnungen auch schon bei Delphi der Fall. Sicher ließ sich das nur mit Show verhindern, da tritt das merkwürdigerweise nicht auf. Allerdings muß man da nachträglich das gewünschte Form zum aktiven machen.
Beispielhaft sei mal angeführt, du hast ein MainForm das mehr oder weniger nur aus der Menueleiste besteht. Dies soll ständig aktiv sein um in seinem Thread eine Datenquelle abzufragen. Nun öffnest du ein Formular in dem irgendwas gemacht wird, zu einem beliebigen Zeitpunkt x kommt ein Datenquellen-Ereignis im MainForm an und das muß nun seinerseits einen Dialog öffnen ohne dabei selbst den Fokus zu verlieren. Das gleiche kannst du aber per Mausklick auch aus dem Formular heraus machen das gerade geöffnet ist und selbst ein Datenquellen-Ereignis produzieren.
Genau bei so einem Szenario passiert das auch bei Delphi...
Da bei ShowModal der Fokus wechselt, kann das bei so einer Konstruktion zu Problemen führen, weil der Parent von TBevel (hier TForm) in diesem Fall den Fokus verliert. Beim Rücksprung versucht die Anwendung dann den Fokus wieder an TListView zu übergeben, was nicht mehr geht weil TForm den Fokus verloren hat und eventuell nicht wieder bekommt.
Das war bei entsprechend komplexen Anordnungen auch schon bei Delphi der Fall. Sicher ließ sich das nur mit Show verhindern, da tritt das merkwürdigerweise nicht auf. Allerdings muß man da nachträglich das gewünschte Form zum aktiven machen.
Beispielhaft sei mal angeführt, du hast ein MainForm das mehr oder weniger nur aus der Menueleiste besteht. Dies soll ständig aktiv sein um in seinem Thread eine Datenquelle abzufragen. Nun öffnest du ein Formular in dem irgendwas gemacht wird, zu einem beliebigen Zeitpunkt x kommt ein Datenquellen-Ereignis im MainForm an und das muß nun seinerseits einen Dialog öffnen ohne dabei selbst den Fokus zu verlieren. Das gleiche kannst du aber per Mausklick auch aus dem Formular heraus machen das gerade geöffnet ist und selbst ein Datenquellen-Ereignis produzieren.
Genau bei so einem Szenario passiert das auch bei Delphi...
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
@Pluto
Teile es in 2 Teile
1) Wie gehabt, nur kein ShowModal + Sende eine Message
2) In der Behandlung der Message zeige das Fenster.
Teile es in 2 Teile
1) Wie gehabt, nur kein ShowModal + Sende eine Message
2) In der Behandlung der Message zeige das Fenster.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- 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:
Ich würde lieber das Problem geklärt haben
@schnullerbacke das geht nicht was du da schreibst
Showmodal zeigt das formular an, die hauptform verliert den fokus
das formular wird gechlossen, die hauptform hat den fokus wieder und damit auch die listbox weil die das aktive element auf der hauptform ist.
ausserdem ist das was du da beschreibst bei show auch der fall da verliert die mainform auch den fokus und kann ihn sogar wiedererlangen bevor das andere formular geschlossen ist da mussts also eher zu fehlern kommen.
@pluto
mach mal bitte n beispiel wo der fehler auftritt und hängs an ich bekomme den nicht nachgestellt wenns wirklich so ist mach ich dann n bugreport
@schnullerbacke das geht nicht was du da schreibst
Showmodal zeigt das formular an, die hauptform verliert den fokus
das formular wird gechlossen, die hauptform hat den fokus wieder und damit auch die listbox weil die das aktive element auf der hauptform ist.
ausserdem ist das was du da beschreibst bei show auch der fall da verliert die mainform auch den fokus und kann ihn sogar wiedererlangen bevor das andere formular geschlossen ist da mussts also eher zu fehlern kommen.
@pluto
mach mal bitte n beispiel wo der fehler auftritt und hängs an ich bekomme den nicht nachgestellt wenns wirklich so ist mach ich dann n bugreport
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- 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
-
- 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)
vielen dank für eure erklärungs versuche !
Dahinter gekommen bin ich noch nicht, warum das jetzt nicht gehen soll und vollem wo ist der unterschied zwischen einem Show und einem ShowModal auser das das form deaktiviert wird !
Ich habe mal ein beispiel Projekt angehangen(ist soll den player Amarok fernsteuern über dcop und ist für meine usb fernbedingung ausgelegt ! sollte aber Problem los laufen.....
ich hoffe einer von euch hat eine/media/hda7 Verzeichnis dort muss nämlich noch eine Datei rein die geladen wird !
edit:
Datei geändert, jetzt müste es auch laufen wenn die Datei nicht gefunden wird !
Weil dann wird eine Stringlist einfach vom code aus gefüllt !
Dahinter gekommen bin ich noch nicht, warum das jetzt nicht gehen soll und vollem wo ist der unterschied zwischen einem Show und einem ShowModal auser das das form deaktiviert wird !
Ich habe mal ein beispiel Projekt angehangen(ist soll den player Amarok fernsteuern über dcop und ist für meine usb fernbedingung ausgelegt ! sollte aber Problem los laufen.....
ich hoffe einer von euch hat eine/media/hda7 Verzeichnis dort muss nämlich noch eine Datei rein die geladen wird !
edit:
Datei geändert, jetzt müste es auch laufen wenn die Datei nicht gefunden wird !
Weil dann wird eine Stringlist einfach vom code aus gefüllt !
- Dateianhänge
-
usbfernbedingung.zip
- (260.7 KiB) 85-mal heruntergeladen
Zuletzt geändert von pluto am Fr 9. Feb 2007, 12:50, insgesamt 1-mal geändert.
MFG
Michael Springwald
Michael Springwald
-
- 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)
ich hoffe mit diesem beispiel kannst du mehr anfangen als mit dem davor:
Wird die Datei nicht gefunden wird einfach eine Stringlist mit add gefüllt....
ich glaube sogar das das beispiel müste unter Windows laufen, ob da der Fehler auch auftritt weiß ich nicht !
@Christian danke für dein angebot mit dem Bug tracker !, ich glaube hier sind wir das erste mal einer Meinung oder ?
Wird die Datei nicht gefunden wird einfach eine Stringlist mit add gefüllt....
ich glaube sogar das das beispiel müste unter Windows laufen, ob da der Fehler auch auftritt weiß ich nicht !
@Christian danke für dein angebot mit dem Bug tracker !, ich glaube hier sind wir das erste mal einer Meinung oder ?
MFG
Michael Springwald
Michael Springwald
-
- 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:
wo ist das beispiel ? hast du den vorherigen beitrag wieder editiert ?
ich find das blöd mit der editiererei um rechtschreibfehler zu korrigieren ok, aber so exxesiv wie das hier betrieben wird kommen die antworten ja schnell mal aus dem zusammenhang also in dem forum was ich betreibe hab ichs editieren verboten dürfen nur mods.
ich find das blöd mit der editiererei um rechtschreibfehler zu korrigieren ok, aber so exxesiv wie das hier betrieben wird kommen die antworten ja schnell mal aus dem zusammenhang also in dem forum was ich betreibe hab ichs editieren verboten dürfen nur mods.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- 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:
Ich habs gestern schon im Linux und eben im Windows mit
probiert wobei Form2 ein leeres formular ist und auf Form1 nur ne listbox ist damit gibts keine Fehler. Sicher das es nicht an was anderem liegt ?
Code: Alles auswählen
procedure TForm1.ListView1DblClick(Sender: TObject);
begin
if ListView1.Selected <> NIL then begin
if Form2.ShowModal = mrOK then begin
end;
end;
end;
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- 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)
genau so habe ich es auch !
und es geht bei mir(ubuntu) einfach nicht !
ich finde es blöd wenn 1000 unterschiedliche Versionen von einem zip-Archiv hochgeladen werden und sich keiner mehr zurecht findet !
ich probiere es gleich nochmal !
evlt. liegt es an der Form konfiguation....
ich habe die LV als Report eingestellt !
und es geht bei mir(ubuntu) einfach nicht !
ich finde es blöd wenn 1000 unterschiedliche Versionen von einem zip-Archiv hochgeladen werden und sich keiner mehr zurecht findet !
ich probiere es gleich nochmal !
evlt. liegt es an der Form konfiguation....
ich habe die LV als Report eingestellt !
MFG
Michael Springwald
Michael Springwald