Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dialogs.pas - MessageDlg erweitern (https://www.delphipraxis.net/78817-dialogs-pas-messagedlg-erweitern.html)

Balu der Bär 11. Okt 2006 14:54


Dialogs.pas - MessageDlg erweitern
 
Moin,

folgendes Problem: Und zwar bräuchte ich einen weiteren optionalen Button in einem MessageDlg. Daher versuche ich diesen Dialog etwas zu erweitern. Im Speziellen geht es um den Button mbSaveAll, welchen ich gerne hinzufügen möchte. Also in die Dialogs.pas gesprungen und Zeile 394 entsprechend angepasst:
Delphi-Quellcode:
type
  TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);
  TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
    mbAll, mbNoToAll, mbYesToAll, mbHelp, mbSaveAll); //mbSaveAll hinzugefügt
  TMsgDlgButtons = set of TMsgDlgBtn;
Ebenfalls in den Zeilen um 2074 habe ich entsprechende Änderungen eingefügt:
Delphi-Quellcode:
var
  Captions: array[TMsgDlgType] of Pointer = (@SMsgDlgWarning, @SMsgDlgError,
    @SMsgDlgInformation, @SMsgDlgConfirm, nil);
  IconIDs: array[TMsgDlgType] of PChar = (IDI_EXCLAMATION, IDI_HAND,
    IDI_ASTERISK, IDI_QUESTION, nil);
  ButtonNames: array[TMsgDlgBtn] of string = (
    'Yes', 'No', 'OK', 'Cancel', 'Abort', 'Retry', 'Ignore', 'All', 'NoToAll',
    'YesToAll', 'Help', 'SaveAll');
  ButtonCaptions: array[TMsgDlgBtn] of Pointer = (
    @SMsgDlgYes, @SMsgDlgNo, @SMsgDlgOK, @SMsgDlgCancel, @SMsgDlgAbort,
    @SMsgDlgRetry, @SMsgDlgIgnore, @SMsgDlgAll, @SMsgDlgNoToAll, @SMsgDlgYesToAll,
    @SMsgDlgHelp, @SMsgDlgSaveAll);
  ModalResults: array[TMsgDlgBtn] of Integer = (
    mrYes, mrNo, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrAll, mrNoToAll,
    mrYesToAll, mrSaveAll, 0);
Dein Eintrag in der consts.pas (@SMsgDlgSaveAll) natürlich auch.

Trotzdem erhalte ich beim folgenden Code
Delphi-Quellcode:
MessageDlg('Hier kann ein beliebiger Text angegeben werden.', mtInformation, [mbOK, mbSaveAll], 0);
immernoch die Meldung das mbSaveAll ein undefinierter Bezeichner sei.

So schwer kann das doch nicht sein, wie kann ich den MessageDlg denn nun wirklich erweitern? Bin über jeden Hinweis glücklich. Danke euch.

Muetze1 11. Okt 2006 15:10

Re: Dialogs.pas - MessageDlg erweitern
 
Wenn ich einen Dialog brauche, den ich so nicht mit MessageDlg() erreiche, baue ich mir eine Form und zeige diese modal an. Ich habe nix davon Quellen mit fremden Copyright abzuändern um dann beim nächsten Update bzw. die nächste Neuinstallation festzustellen, dass alle Änderungen wieder fehlen. Auch bin ich damit inkompatibel zu allem meinem Mitentwicklern. Du kannst doch Dialoge so einfach bauen mit einer Form und entsprechend frei handhaben und noch über deinen Wunsch hinaus anpassen, daher kann ich es nicht verstehen sich selber mit den Änderung der VCL Quellen in's eigene Abseits zu schiessen.

Und das Problem ist, dass Delphi nicht die Quellen ständig neu übersetzt. Alle als Quellcode gelieferten Dateien liegen als compilierte Version mit vor und diese nutzt Delphi. Die DCU's sind natürlich nicht aktuell und daher kennen sie auch deinen neuen Typ nicht.

Balu der Bär 11. Okt 2006 15:33

Re: Dialogs.pas - MessageDlg erweitern
 
Zitat:

Zitat von Muetze1
Wenn ich einen Dialog brauche, den ich so nicht mit MessageDlg() erreiche, baue ich mir eine Form [...]

Das ist mir sehr wohl bewusst und zur Zeit mache es auch noch so. Ich finde es aber reichlich unkomfortabel, da ich jedem neuen Projekt dieses Form hinzufügen muss. Weiterhin braucht solch ein Formular mehr Speicher (wenn auch nur minimal), deshalb wollte ich den MessageDlg erweitern.
Zitat:

Zitat von Muetze1
Und das Problem ist, dass Delphi nicht die Quellen ständig neu übersetzt. Alle als Quellcode gelieferten Dateien liegen als compilierte Version mit vor und diese nutzt Delphi. Die DCU's sind natürlich nicht aktuell und daher kennen sie auch deinen neuen Typ nicht.

Auch das ist mir bewusst, trotz Neukompilierung der Dialogs.pas kennt Delphi den Bezeichner mbSaveAll nicht.

Balu der Bär 11. Okt 2006 15:48

Re: Dialogs.pas - MessageDlg erweitern
 
Okay, ich habe es jetzt anders gelöst.

http://www.delphi-library.de/viewtopic.php?t=22600

Muetze1 11. Okt 2006 15:54

Re: Dialogs.pas - MessageDlg erweitern
 
Zitat:

Zitat von Balu der Bär
Weiterhin braucht solch ein Formular mehr Speicher (wenn auch nur minimal), deshalb wollte ich den MessageDlg erweitern.

Sehr komisch, wo doch die Funktion MessageDlg() intern eine Form instanziiert und entsprechend Elemente darauf platziert.

Balu der Bär 11. Okt 2006 16:07

Re: Dialogs.pas - MessageDlg erweitern
 
Stimmt, dass hatte ich bei meiner Argumentation nicht bedacht. Trotzdem is es immer noch weniger Aufwand (imho) bei jeder Delphi-Neuinstallation eine Dialogs.pas auszutauschen als jedem neuem Projekt dieses Formular hinzuzufügen.

Wenn also doch noch jemand weiß wo mein Fehler lag oder was ich vergessen habe wäre es gut es uns hier mitzuteilen. :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.

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