MessageDlg Button ändern

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

MessageDlg Button ändern

Beitrag von Aphadias »

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?

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: MessageDlg Button ändern

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: MessageDlg Button ändern

Beitrag von Aphadias »

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?

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: MessageDlg Button ändern

Beitrag von Mathias »

Da kann sicher Googeln weiter helfen. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: MessageDlg Button ändern

Beitrag von wp_xyz »

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

Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: MessageDlg Button ändern

Beitrag von Aphadias »

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

Antworten