Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Eigene Buttons in MessageBox (https://www.delphipraxis.net/2652-eigene-buttons-messagebox.html)

ChrisF 31. Jan 2003 11:53


Eigene Buttons in MessageBox
 
Tach zusammen,

ich möchte in einer MessageBox nicht die Vordefinierten Buttons (OK, Abbrechen etc.) verwenden, sondern eigene Beschriftungen vergeben (in meinem Fall 'Kopieren' und 'Verschieben' meinetwegen mit den Rückgabewerden IDCOPY und IDMOVE.
Die API-Hilfe gibt mir irgendwie das vernichtende Urteil, es gäbe nur die Vordefinierten Buttons...

Gibt es eine elegante Möglichkeit das Prob zu lösen?
Auf eine separate Form möchte ich nur ungern zurückgreifen müssen.

Bin für jede Hilfe dankbar die nicht gerade damit zu tun hat, eine eigene User32.dll zu schreiben :wink:

Gruß
Christoph

Luckie 31. Jan 2003 11:58

Um ein eigenes Formular wirst du nicht drumrum kommen. das was du wilklst, bietet die Messagebox von Windows einfach nicht.

ChrisF 31. Jan 2003 12:07

Zitat:

Zitat von Luckie
Um ein eigenes Formular wirst du nicht drumrum kommen. das was du wilklst, bietet die Messagebox von Windows einfach nicht.

Danke für die Aufmunternden Worte :wink:
Bin ich eigentlich der Einzige, der sowas will?
Naja, nichtsdestotrotz habe ich es gerade geschafft.

Zwar nicht mit MessageBox, sondern mit MessageDlg resp. CreateMessageDialog.

Danke trotzdem

Chris

Luckie 31. Jan 2003 12:16

Wie hast du das jetzt gemacht? Die Funktionen, die du angesproochen hast, kenn doch auch nur die Buttons von der Messagebox. :roll:

Zeig mal bitte Code, das interessiert mich jetzt.

ChrisF 31. Jan 2003 13:32

Habe nach TButton Componenten gesucht und gefunden ;-)

Sieht dann so aus:

Delphi-Quellcode:
function ExtMessageDialog(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; Captions: array of string): Integer;
var
  aMsgDlg: TForm;
  i: Integer;
  dlgButton: TButton;
  CaptionIndex: Integer;
  Left : Integer;
begin
  aMsgDlg := CreateMessageDialog(Msg, DlgType, Buttons);
  Left := Trunc(aMsgDlg.Width / 2) -80;
  captionIndex := 0;
  for i := 0 to aMsgDlg.ComponentCount - 1 do
  begin
    if (aMsgDlg.Components[i] is TButton) then
    begin
      dlgButton := TButton(aMsgDlg.Components[i]);
      if CaptionIndex > High(Captions) then Break;
      dlgButton.Width := 75;
      dlgButton.Left := Left;
      Left := Left + 80;
      dlgButton.Caption := Captions[CaptionIndex];
      Inc(CaptionIndex);
    end;
  end;
  Result := aMsgDlg.ShowModal;
end;
habe die Anregung gefunden auf www.swissdelphicenter.ch

Chris

DLX 17. Jul 2018 13:23

AW: Eigene Buttons in MessageBox
 
wie genau ruft man diese function auf ?
Gelöst:
ExtMessageDialog('Es fehlt die Berechtigung für die Bearbeitung!',mtError , [mbYes ,mbNo, mbAbort],['Ja', 'Nein', 'Anmelden']);

bcvs 17. Jul 2018 16:38

AW: Eigene Buttons in MessageBox
 
Der Thread ist über 15 Jahre alt.

Heutzutage nimmt man für so etwas einen TTaskDialog.

Linusdere42069 27. Jun 2021 21:52

AW: Eigene Buttons in MessageBox
 
Und so was wird uns heute immer noch in der Schule gelehrt, dass man da nicht auf eine andere Programmiersprache zurückgreifen kann.

(PS: BITTE NICHT FRAU TRENSCH)

mfg Linus

himitsu 28. Jun 2021 12:12

AW: Eigene Buttons in MessageBox
 
Und die aktuelleren GUI-Richtlinien für MSWindows besagen auch, dass man das auf die Buttons draufschreibt, was gemacht wird.

z.B. in einem Anmeldendialg steht dann nicht OK/Abbrechen sondern Login/Abbrechen oder /Schließen drauf.


Das Umbenennen, was mit CreateMessageDialog/TMessageDialog ging, das kann man auch mit dem TaskDialog machen.
Und das der TaskDialog unter Windows XP nicht funktioniert, das kann man fast ignorrieren.
XE und Win7 sind tot und auch die ersten Versionen/Updates von Win10 sind bereits abgekündigt.


Der TMessageDialog war ja ursprünglich auch nur ein Bugfix, für uralte Windowse, wo dessen DialogAPIs nicht existierten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz