Frage zu QuestionDlg [gelöst]
Frage zu QuestionDlg [gelöst]
Hi,
ich blicke nicht ganz durch, wie ein QuestionDlg aufgerufen wird.
Die Function ist in dialogs.pas definiert:
function QuestionDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
Buttons: array of const; HelpCtx: Longint): TModalResult; overload;
Soweit ist das klar.
Aber was wird da aufgerufen?
Bei Messagedlg gibt es ein CreateMessageDialog.
Für QuestionDlg finde ich das nicht.
Hintergrund ist, dass ich nach dem Erzeugen des Fensters noch ein paar Dinge am Dialogfenster ändern möchte.
ich blicke nicht ganz durch, wie ein QuestionDlg aufgerufen wird.
Die Function ist in dialogs.pas definiert:
function QuestionDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
Buttons: array of const; HelpCtx: Longint): TModalResult; overload;
Soweit ist das klar.
Aber was wird da aufgerufen?
Bei Messagedlg gibt es ein CreateMessageDialog.
Für QuestionDlg finde ich das nicht.
Hintergrund ist, dass ich nach dem Erzeugen des Fensters noch ein paar Dinge am Dialogfenster ändern möchte.
Zuletzt geändert von six1 am Do 18. Nov 2021, 15:08, insgesamt 2-mal geändert.
Gruß, Michael
-
- Beiträge: 289
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: Frage zu QuestionDlg
Schlechte Karten. QuestionDlg selbst erzeugt nur die Buttons und stellt dann durch:
Code: Alles auswählen
Result := WidgetSet.AskUser(aCaption, ConvertLineEndings(aMsg),
DialogIds[DlgType], DialogButtons, HelpCtx);
Re: Frage zu QuestionDlg
Hmmm, also konkreter:
Ich benötige einen Dialog exakt wie QuestionDlg, jedoch mit der Möglichkeit das Fenster zu positionieren.
Leider ist das immer sehr unglücklich, wenn ein Programm ein Abfragefenster in der Mitte des Bildschirms positioniert.
Gerade bei den großen Bildschirmen, welche heute im Umlauf sind, sieht das sehr bescheiden aus, so eine Abfrage fernab vom Klick erscheinen zu lassen...
Ich benötige einen Dialog exakt wie QuestionDlg, jedoch mit der Möglichkeit das Fenster zu positionieren.
Leider ist das immer sehr unglücklich, wenn ein Programm ein Abfragefenster in der Mitte des Bildschirms positioniert.
Gerade bei den großen Bildschirmen, welche heute im Umlauf sind, sieht das sehr bescheiden aus, so eine Abfrage fernab vom Klick erscheinen zu lassen...
Gruß, Michael
-
- Beiträge: 289
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: Frage zu QuestionDlg
Gegenfrage: was kann QuestionDlg, was MessageDlg nicht kann? Und ja, (selbst-) zentrierende Dialoge habe ich mir unter Delphi auch schon immer gemacht.
Re: Frage zu QuestionDlg
QuestionDlg kann mit eigenen Beschriftungen und Vorselektion aufwarten... das ist schon genau, was ich benötige!
z.B.:
z.B.:
Code: Alles auswählen
[mbYes, 'Ja', mbYesToAll, 'Ja zu allen', mbNo, 'Nein', 'IsDefault']
Gruß, Michael
Re: Frage zu QuestionDlg
Wieso "exakt wie QuestionDlg"? Dieser läuft über das Widgetset und da hast du keinen Einfluss, es sei denn du willst dich mit den Details der Betriebssystem-Routinen befassen - vielleicht geht's dann.six1 hat geschrieben: Mi 17. Nov 2021, 18:40 Ich benötige einen Dialog exakt wie QuestionDlg, jedoch mit der Möglichkeit das Fenster zu positionieren.
Warum nimmst du nicht MessageDlgPos? Da kannst du das X,Y der Dialog-Position angeben:
Code: Alles auswählen
function MessageDlgPos(const aMsg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): TModalResult;
Zuletzt geändert von wp_xyz am Mi 17. Nov 2021, 18:58, insgesamt 1-mal geändert.
Re: Frage zu QuestionDlg
das ist ein echtes Problem, da die Beschriftungen schon mal nur in Englisch erscheinen, mal abgesehen davon, dass diese unveränderlich sind.Der einzige Unterschied zu QuestionDlg ist, dass man nur auf die vordefinierten Buttons zurückgreifen kann; im QuestionDlg kann man auch Buttons mit eigenen Captions und Rückgabewerten einbauen.
Wobei ich den Fokus darauf legen möchte, dass eine Darstellung in der Bildschirmmitte eigentlich gar nicht geht.
Wie lösen das Andere?
Klar, ich könnte einen eigenen Dialog programmieren; ging aber in meiner Naivität davon aus, dass ich etwas ableiten kann und durch x und y ergänzen kann.
Da habe ich mich wohl getäuscht

Gruß, Michael
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Frage zu QuestionDlg
Hi!
Was brauchst Du denn genau?
In den Dialogs gibt es außerdem den Allrounder:
Der ist nun wirklich sehr flexibel.
Fall der nicht ausreicht, musst Du Dir selbst ne Form schnitzen.
Geht bestimmt schneller, als ewig rumzuprobieren.
Winni
Was brauchst Du denn genau?
In den Dialogs gibt es außerdem den Allrounder:
Code: Alles auswählen
function DefaultPromptDialog(const DialogCaption,
DialogMessage: String;
DialogType: longint; Buttons: PLongint;
ButtonCount, DefaultIndex, EscapeResult: Longint;
UseDefaultPos: boolean
X, Y: Longint): Longint;// widgetset independent implementation,
Der ist nun wirklich sehr flexibel.
Fall der nicht ausreicht, musst Du Dir selbst ne Form schnitzen.
Geht bestimmt schneller, als ewig rumzuprobieren.
Winni
-
- Beiträge: 289
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: Frage zu QuestionDlg
LCLStrConsts übersetzen lassen, ich habe da unlängst etwas drüber geschrieben. LCLStrConsts.de.po in die Projektressourcen laden, rkDefTrans in die uses aufnehmen und schon hast du deutsche Beschriftungen....da die Beschriftungen schon mal nur in Englisch erscheinen,
Ansonsten entweder MessageDlgPos oder DefaultPromptDialog verwenden oder wirklich selbst schreiben.
Re: Frage zu QuestionDlg
Danke Sieben.
Leider ist da wieder das MessageDlg Problem, dass die Captions Englisch sind.
Übersetzung mittels LCLStrConsts.de.po ist zu unfelxibel.
Also doch selbst was kreieren...
Leider ist da wieder das MessageDlg Problem, dass die Captions Englisch sind.
Übersetzung mittels LCLStrConsts.de.po ist zu unfelxibel.
Also doch selbst was kreieren...
Gruß, Michael
-
- Beiträge: 289
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: Frage zu QuestionDlg
Probier das doch mal aus mit der Übersetzung. Oder brauchst du wirklich eigene Beschriftungen wie zB 'Kommt drauf an', 'Keine Ahnung' oder 'Auf jeden Fall!'...?
Re: Frage zu QuestionDlg
Naja, es ist schon so, dass ich diesen Dialog extensiv benötige.
Manchmal ist es nicht nur "Ja Alle" sondern "Alle Vorgänge" ... in der Art
Ich benötige also wirklich etwas Flexibilität.
Ist aber ok, ich bau mir einen Dialog, damit ich mich Beschränkungen nicht unterwerfen muss.
Das passt dann wohl auch besser zum Design meiner Software...
Manchmal ist es nicht nur "Ja Alle" sondern "Alle Vorgänge" ... in der Art
Ich benötige also wirklich etwas Flexibilität.
Ist aber ok, ich bau mir einen Dialog, damit ich mich Beschränkungen nicht unterwerfen muss.
Das passt dann wohl auch besser zum Design meiner Software...
Gruß, Michael
- Ally
- Beiträge: 282
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: Frage zu QuestionDlg
Hallo six1,
Da wäre noch TaskDialog zu nennen. (https://wiki.lazarus.freepascal.org/TTaskDialog)
Bietet viele Möglichkeiten und ist, zumindest unter Windows, in deutsch.
Gruß Roland
Da wäre noch TaskDialog zu nennen. (https://wiki.lazarus.freepascal.org/TTaskDialog)
Bietet viele Möglichkeiten und ist, zumindest unter Windows, in deutsch.
Gruß Roland
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Frage zu QuestionDlg
Ich kann mich dunkel erinnern, daß jemand hier mal eine sehr flexible Dialogunit gepostet hat, bei der man so ziemlich alles einstellen kann. Leider kann ich die grad nicht finden.
Re: Frage zu QuestionDlg
...zu spät
Bin schon dran und eigentlich fast fertig.
Aber Danke!

Bin schon dran und eigentlich fast fertig.
Aber Danke!
Gruß, Michael