unterschiedliche Anzeige bei "QuestionDlg"

Rund um die LCL und andere Komponenten
klema
Beiträge: 11
Registriert: Sa 4. Apr 2015, 13:34

unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von klema »

Hallo im Forum,

habe beim Einstieg schon viele Hilfen von euch bekommen. Dafür Danke an alle.

Jetzt habe ich ein Problem mit "QuestionDlg":
Bei Ausführung der Anweisung "QuestionDlg('Caption','Meldung',mtInformation, [mrYes,'&Ja',mrNo,'&Nein','IsDefault'],'')" werden die "&" Markierungen und der "IsDefault"-Zusatz nur dann korrekt berücksichtigt, wenn in der Entwicklungsumgebung vorher(!) ein Breakpoint gesetzt wurde. Bei der Ausführung der erzeugten EXE-Datei werden beide Angaben ebenfalls ignoriert.
falsch
falsch
QD-falsch.jpg (14.73 KiB) 2977 mal betrachtet
korrekt
korrekt
QD-korrekt.jpg (14.34 KiB) 2977 mal betrachtet
Hat jemand dafür eine Erklärung bzw. eine Lösung?

Gruß klema
Gruß klema

Benutzeravatar
theo
Beiträge: 11344
Registriert: Mo 11. Sep 2006, 19:01

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von theo »

Hallo.
Welches System ist das?
Welche Lazarus Version?

klema
Beiträge: 11
Registriert: Sa 4. Apr 2015, 13:34

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von klema »

Hallo Theo,
theo hat geschrieben: Welches System ist das?
Welche Lazarus Version?
Lazarus Version 1.2.6 - auf Win8.1
FPC 2.6.4
Gruß klema

Benutzeravatar
theo
Beiträge: 11344
Registriert: Mo 11. Sep 2006, 19:01

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von theo »

Ja, keine Ahnung. Dieser Dialog scheint nicht überall das Gleiche zu machen.

Bei mir auf Linux unter dem Windows Emulator "Wine" zeigt er die Unterstreichungen, aber wählt nicht den "Nein" Knopf aus.
Auf Linux GTK2 ist der "Nein" Knopf ausgewählt, aber es sind keine Unterstreichungen da.
Nur auf Linux Qt ist beides da.

Ich benutze: Lazarus 1.5 r48574M FPC 3.1.1 x86_64-linux-gtk 2

Offenbar waren diese Punkte bzw. dieser Dialog bisher nicht genug wichtig, als dass es jemanden getrieben hätte, das korrekt zu implementieren.
Kannst ja mal versuchen, die Probleme zu beheben oder wenigstens einen Eintrag im Bugtracker machen: http://bugs.freepascal.org

klema
Beiträge: 11
Registriert: Sa 4. Apr 2015, 13:34

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von klema »

theo hat geschrieben:Ja, keine Ahnung. Dieser Dialog scheint nicht überall das Gleiche zu machen.

Bei mir auf Linux unter dem Windows Emulator "Wine" zeigt er die Unterstreichungen, aber wählt nicht den "Nein" Knopf aus.
Auf Linux GTK2 ist der "Nein" Knopf ausgewählt, aber es sind keine Unterstreichungen da.
Nur auf Linux Qt ist beides da.

Ich benutze: Lazarus 1.5 r48574M FPC 3.1.1 x86_64-linux-gtk 2

Offenbar waren diese Punkte bzw. dieser Dialog bisher nicht genug wichtig, als dass es jemanden getrieben hätte, das korrekt zu implementieren.
Kannst ja mal versuchen, die Probleme zu beheben oder wenigstens einen Eintrag im Bugtracker machen: http://bugs.freepascal.org
Trotzdem erst einmal Danke.
Gruß klema

wp_xyz
Beiträge: 5456
Registriert: Fr 8. Apr 2011, 09:01

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von wp_xyz »

Die Unterstreichungen sind doch so eine Microsoft-Optimierung, um dem Benutzer seine schönen Fensterchen nicht zu verschandeln: sie erscheinen nur, wenn du ALT drückst (irgendwo in den Systemeinstellungen gibt es eine Einstellung, in der man das ausschalten kann).

Der Default-Schalter wird bei mir (Windows 7) richtig angezeigt.

klema
Beiträge: 11
Registriert: Sa 4. Apr 2015, 13:34

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von klema »

wp_xyz hat geschrieben:Die Unterstreichungen sind doch so eine Microsoft-Optimierung, um dem Benutzer seine schönen Fensterchen nicht zu verschandeln: sie erscheinen nur, wenn du ALT drückst (irgendwo in den Systemeinstellungen gibt es eine Einstellung, in der man das ausschalten kann).

Der Default-Schalter wird bei mir (Windows 7) richtig angezeigt.
Hallo wp_xyz,

danke für den Hinweis auf die Funktion der Alt-Taste, hatte ich vergessen. Ob dann die korrekte Funktion des Default-Schalters auch mit einer Windowsfunktion zusammenhängt? Seltsam bleibt dann allerdings nach wie vor die korrekte Anzeige nach einem Breakpoint. :?:
Na egal, ich schau mal weiter.
Zuletzt geändert von klema am So 5. Apr 2015, 14:32, insgesamt 1-mal geändert.
Gruß klema

klema
Beiträge: 11
Registriert: Sa 4. Apr 2015, 13:34

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von klema »

... Das Problem (Default-Button) scheint noch ganz woanders zu liegen, wobei ich nach wie vor nicht weiß, ob es bei Lazarus oder einer Windowseinstellung (siehe ALT-Taste) zu suchen ist: Auch bei einem ganz primitiven Programm aus zwei Buttons und einem Label (das nur anzeigt, welcher Button per Maus oder Enter-Taste gedrückt wurde, siehe Anhang) werden schon die Einstellungen im Objektinspektor ignoriert: Ich habe beim zweiten Button Default auf TRUE gestellt, default ist aber immer der erste. Das ändert sich auch nicht, wenn ich einer FormCreate-Methode für beide Buttons den Default-Wert explizit setze (siehe Listing: 1 -> false / 2 -> true).
Dateianhänge
project1.zip
(313.1 KiB) 96-mal heruntergeladen
Gruß klema

wp_xyz
Beiträge: 5456
Registriert: Fr 8. Apr 2011, 09:01

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von wp_xyz »

Weiß nicht, ob es so sein soll oder nicht, ich denke eher das erstere...

Jedenfalls ist bei dem Beispiel das zusätzliche Problem, dass das Formular nur die zwei Buttons enthält (außer dem Label). Button1 wurde anscheinend als 1. erzeugt und ist standardmäßig fokussiert. Die beiden Buttons sind äquivalent und daher kommt die Default-Eigenschaft nicht zum Tragen - Default kennzeichnet den Button, der bei ENTER ausgeführt wird, wenn z.B. der Fokus auf einem anderen Control liegt (außer bei einem anderen Button!).

Füge z.B. ein TEdit in dein Formular und mache es zum aktiven Control (Form.ActiveControl := Edit1). Dann ist zur Laufzeit Edit1 fokussiert, und Button2 hat wie gewünscht die Default-Farbe, und bei ENTER wird entsprechend "Button2 angezeigt".

klema
Beiträge: 11
Registriert: Sa 4. Apr 2015, 13:34

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von klema »

OK, das stimmt natürlich. Das könnte man sogar ausnutzen, indem man ein Dummy-Editfeld der Breite 0 integriert. Hauptsache es ist sichtbar (visible = true) und hat den Fokus (TabOrder = 0).
Aber leider ist dadurch das Problem mit dem "IsDefault"-Schalter in "QuestionDlg" auch nicht gelöst. Vielleicht muss ich mir dann doch einen eigenen Dialog basteln.

Danke für Zeit und Hilfe.
Gruß klema

wp_xyz
Beiträge: 5456
Registriert: Fr 8. Apr 2011, 09:01

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von wp_xyz »

Das könnte man sogar ausnutzen, indem man ein Dummy-Editfeld der Breite 0 integriert.
Warum so kompliziert? Setze halt bei einem nur-zwei-Button-Formular das ActiveControl des Formulars auf den Default-Button.

klema
Beiträge: 11
Registriert: Sa 4. Apr 2015, 13:34

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von klema »

Joo, manchmal ist man blind (frei nach dem Motto: warum einfach, wenn es auch kompliziert geht).

Und das ist doch auch die Lösung für das Problem, dass der "IsDefault"-Parameter beim Aufruf von QuestionDlg nicht korrekt berücksichtigt wird, - glaube ich zumindest.

In der Datei PROMPTDIALOG.INC (LCL) habe ich den constructor TQuestionDlg.CreateQuestionDlg am Ende der FOR-Schleife (in meiner Datei nach Zeile 776) ergänzt durch

Code: Alles auswählen

    if NewButton.Default
      then ActiveControl := NewButton;
 
Ein erster Test hat bei mir funktioniert. Aber ich probiere erst mal weiter.

Nochmals Danke.
Gruß klema

wp_xyz
Beiträge: 5456
Registriert: Fr 8. Apr 2011, 09:01

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von wp_xyz »

In der Datei PROMPTDIALOG.INC (LCL) habe ich den constructor TQuestionDlg.CreateQuestionDlg am Ende der FOR-Schleife (in meiner Datei nach Zeile 776) ergänzt
Die Quellen der LCL zu ändern, ist nur eine vorübergehende Lösung: Demnächst wird Version 1.4 veröffentlicht und irgendwann wirst du dir die neue Version installieren, und irgendwann wirst du merken, dass der QuestionDlg wieder nicht funktioniert - weil die neue Version deine Änderung nicht enthält. Die sauberste Lösung ist, aus deinen Änderungen einen Patch zu extahieren und im BugTracker zu posten, damit das in die Quellen von Lazarus aufgenommen wird.


klema
Beiträge: 11
Registriert: Sa 4. Apr 2015, 13:34

Re: unterschiedliche Anzeige bei "QuestionDlg"

Beitrag von klema »

Ja, ich weiß. Ich wollte dies aber erst einmal selber weiter testen.

Trotzdem danke für den Hinweis.
Gruß klema

Antworten