Frage zu QuestionDlg [gelöst]

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Frage zu QuestionDlg [gelöst]

Beitrag von six1 »

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.
Zuletzt geändert von six1 am Do 18. Nov 2021, 15:08, insgesamt 2-mal geändert.
Gruß, Michael

Sieben
Beiträge: 202
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

Beitrag von Sieben »

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);

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Frage zu QuestionDlg

Beitrag von six1 »

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...
Gruß, Michael

Sieben
Beiträge: 202
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

Beitrag von Sieben »

Gegenfrage: was kann QuestionDlg, was MessageDlg nicht kann? Und ja, (selbst-) zentrierende Dialoge habe ich mir unter Delphi auch schon immer gemacht.

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Frage zu QuestionDlg

Beitrag von six1 »

QuestionDlg kann mit eigenen Beschriftungen und Vorselektion aufwarten... das ist schon genau, was ich benötige!

z.B.:

Code: Alles auswählen

[mbYes, 'Ja', mbYesToAll, 'Ja zu allen', mbNo, 'Nein', 'IsDefault']
Gruß, Michael

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

Re: Frage zu QuestionDlg

Beitrag von wp_xyz »

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.
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.

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;
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.
Zuletzt geändert von wp_xyz am Mi 17. Nov 2021, 18:58, insgesamt 1-mal geändert.

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Frage zu QuestionDlg

Beitrag von six1 »

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.
das ist ein echtes Problem, da die Beschriftungen schon mal nur in Englisch erscheinen, mal abgesehen davon, dass diese unveränderlich sind.

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 :lol:
Gruß, Michael

Benutzeravatar
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

Beitrag von Winni »

Hi!

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

Sieben
Beiträge: 202
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

Beitrag von Sieben »

...da die Beschriftungen schon mal nur in Englisch erscheinen,
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.

Ansonsten entweder MessageDlgPos oder DefaultPromptDialog verwenden oder wirklich selbst schreiben.

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Frage zu QuestionDlg

Beitrag von six1 »

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...
Gruß, Michael

Sieben
Beiträge: 202
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

Beitrag von Sieben »

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!'...?

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Frage zu QuestionDlg

Beitrag von six1 »

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...
Gruß, Michael

Benutzeravatar
Ally
Beiträge: 263
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Frage zu QuestionDlg

Beitrag von Ally »

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

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Frage zu QuestionDlg

Beitrag von fliegermichl »

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.

Benutzeravatar
six1
Beiträge: 788
Registriert: Do 1. Jul 2010, 19:01

Re: Frage zu QuestionDlg

Beitrag von six1 »

...zu spät :lol:
Bin schon dran und eigentlich fast fertig.

Aber Danke!
Gruß, Michael

Antworten