MessageDlg Button ändern

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

MessageDlg Button ändern

Beitragvon Aphadias » 12. Jul 2017, 14:50 MessageDlg Button ändern

Moin... ich nerve eigentlich schon wieder ungern. Ich möchte im MessageDlg die Buttons ändern und habe im Internet unzählige Bsp. gefunden (was gehen soll) aber nix geht davon. Die Quelltexte sind mir auch relativ einleuchtend. Aber es geht bei Lazarus nicht! Bei Delphi schein es wohl zu gehen aber bei mir nicht. Ich habe langsam die Vermutung das noch irgend was geladen werden muss. Ich könnte das ganze natürlich manuell lösen aber ich will verstehen warum es nicht bei mir geht.

Ich habe folgenden Quelltext als letztes benutzt:

Code: Alles auswählen
function MyMessageDialog(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; Captions: array of string): Integer;
var
  aMsgDlg: TForm;
  i: Integer;
  dlgButton: TButton;
  CaptionIndex: Integer;
begin
  // Create the Dialog
  // Dialog erzeugen
  aMsgDlg := CreateMessageDialog(Msg, DlgType, Buttons);
  captionIndex := 0;
  // Loop through Objects in Dialog
  // Über alle Objekte auf dem Dialog iterieren
  for i := 0 to aMsgDlg.ComponentCount - 1 do
  begin
   // If the object is of type TButton, then
   // Wenn es ein Button ist, dann...
    if (aMsgDlg.Components[i] is TButton) then
    begin
      dlgButton := TButton(aMsgDlg.Components[i]);
      if CaptionIndex > High(Captions) then Break;
      // Give a new caption from our Captions array
      // Schreibe Beschriftung entsprechend Captions array
      dlgButton.Caption := Captions[CaptionIndex];
      Inc(CaptionIndex);
    end;
  end;
  Result := aMsgDlg.ShowModal;
end;   
 
procedure TFstart.openExecute(Sender: TObject);
begin
 
  if MyMessageDialog('Was möchten sie öffnen?', mtConfirmation, mbOKCancel,
    ['1', '2']) = mrOk then
    ShowMessage('"1" clicked')
  else
    ShowMessage('"2" clicked');
 
end;


Laut den Foren soll der Funktionieren. Ich empfinde den Quelltext als richtig. Aber trotzdem geht nur ein MessageDlg auf wo ich OK oder CANCEL erscheint. Ich will aber die Buttons andere Captions zuweisen......

geht das überhaupt bei lazarus?
Aphadias
 
Beiträge: 90
Registriert: 28. Okt 2015, 18:28

Beitragvon Mathias » 12. Jul 2017, 16:34 Re: MessageDlg Button ändern

Du kannst das Ganze viel einfacher haben:

Code: Alles auswählen
  case QuestionDlg('Caption', 'Was soll ich tun ?', mtCustom, [mrYes, 'Y', mrNo, 'N', mrCancel, 'C', 1234, '1234'], '') of
    1234: begin
      ShowMessage('1234');
    end;
    mrYes: begin
      ShowMessage('Yes');
    end;
    mrNo: begin
      ShowMessage('No');
    end;
    mrCancel: begin
      ShowMessage('Abbruch');
    end;
  end;


Als Alternative, wen es komplex sein soll, kannst du natürlich auch ein Form bauen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3249
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Aphadias » 13. Jul 2017, 07:47 Re: MessageDlg Button ändern

Wahnsinn... das manche Dinge so einfach sind....

ich belese mich seit Tagen und sehe mir verschiedenste Beispiele ans... MessageDlg create... usw alles aufgelistet... aber in keinem Tutorial steht was von QuestionDlg....

echt danke... hat mir super und einfach geholfen :mrgreen:

EDIT:

was sagt eigentlich hinten am ende der klammer das ' ' aus?
Aphadias
 
Beiträge: 90
Registriert: 28. Okt 2015, 18:28

Beitragvon Mathias » 13. Jul 2017, 08:02 Re: MessageDlg Button ändern

Da kann sicher Googeln weiter helfen. :wink:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3249
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 13. Jul 2017, 09:07 Re: MessageDlg Button ändern

Und wenn Google auf eine veraltete Hilfeseite führt? Besser ist ein Blick in den Quelltext - wenn man weiß, wie man in Quelltexten navigiert, hat man einen schweren Vorteil, denn der Quelltext ist die aktuellste Dokumentation! Also: Auf "QuestionDlg" mit gedrückter CTRL-Taste klicken (falls nicht vorhanden, vorher das Such-Wort ins Editorfenster tippen), und Lazarus öffnet die zugehörige Unit, und zwar an der Stelle, an der QuestionDlg deklariert ist (je nach Lazarusversion kann es auch die Stelle sein, an der die Funktion implementiert ist). Hier sieht man dann, dass der letzte Parameter "HelpKeyword: string" ist. Mit SHIFT+CTRL+Auf/Ab wechselt man zwischen Implementation und Interface. Wenn du dann vielleicht noch wissen willst, was TMsgDlgType ist (dritter Parameter), wiederholst du den CTRL-Klick auf "TMsgDlgType" und landest bei: "TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);"
wp_xyz
 
Beiträge: 2274
Registriert: 8. Apr 2011, 08:01

Beitragvon Aphadias » 13. Jul 2017, 15:39 Re: MessageDlg Button ändern

alter falter... fühle mich jetzt wie der übelste crack :mrgreen: das war jetzt mal ein richtig brauchbarer tipp... danke ^^

bei mir geht dann eine unit dialogs auf... habe dann dort meine maus über questiondlg gehalten und bekam eine erklärung...
Aphadias
 
Beiträge: 90
Registriert: 28. Okt 2015, 18:28

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

porpoises-institution
accuracy-worried