Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ShowMessage 2. Parameter (https://www.delphipraxis.net/216518-showmessage-2-parameter.html)

Willie1 10. Jan 2025 11:32

ShowMessage 2. Parameter
 
Hallo Leute,

eine Kleinigkeit zum neuen Jahr. Ich wusste nicht, dass
Delphi-Quellcode:
ShowMessage
einen zweiten Parameter hat. Ich lese in der Hilfe, verstehe sie aber nicht!
Delphi-Quellcode:
tfAllowDialogCancellation
kann ich mir noch vorstellen. Aber das Fenster lässt sich immer mit <Esc> schließen. Was soll der Parameter?

Gruß Willie.

Uwe Raabe 10. Jan 2025 13:59

AW: ShowMessage 2. Parameter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Willie1 (Beitrag 1545009)
Aber das Fenster lässt sich immer mit <Esc> schließen.

Nicht wenn der neue Task-Dialog verwendet wird. Hier mal der optische Unterschied:

Willie1 10. Jan 2025 19:39

AW: ShowMessage 2. Parameter
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1545036)
Nicht wenn der neue Task-Dialog verwendet wird. Hier mal der optische Unterschied:

Ok, stimmt. Dann ist bei ShowMessage der zweite Parameter unnötig. ShowMessage ist eben die schnellste Möglichkeit ein Hinweisfenster zu bauen. Wi.

Uwe Raabe 10. Jan 2025 22:14

AW: ShowMessage 2. Parameter
 
Wieso unnötig? ShowMessage mit zwei Parametern ruft ja den neuen TaskDialog auf, wenn nicht irgendetwas dagegen spricht. Am Ende landet man hier und da wird die Prüfung gemacht:

Delphi-Quellcode:
function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
  const HelpFileName: string; TaskDlgFlags: TTaskDialogFlags): Integer;
begin
  if TOSVersion.Check(6) and UseLatestCommonDialogs and
     IsNewCommonCtrl and not ((shDialogs in TStyleManager.SystemHooks) and not StyleServices(Screen.ActiveCustomForm).IsSystemStyle) then
    Result := DoTaskMessageDlgPosHelp('', Msg, DlgType, Buttons,
      HelpCtx, X, Y, HelpFileName, TaskDlgFlags)
  else
    Result := DoMessageDlgPosHelp(CreateMessageDialog(Msg, DlgType, Buttons),
      HelpCtx, X, Y, HelpFileName);
end;
Die beiden Dialoge im ScreenShot entstehen aus demselben Code, jeweils durch ändern von UseLatestCommonDialogs.

Willie1 11. Jan 2025 17:24

AW: ShowMessage 2. Parameter
 
Hallo Uwe,

ich habe Themes und CommCtrl eingebunden. Aber mein Delphi 11.3 kennt
Delphi-Quellcode:
IsNewCommonCtrl
nicht. Die Hilfe auch nicht.

fred42 11. Jan 2025 20:52

AW: ShowMessage 2. Parameter
 
Zitat:

Zitat von Willie1 (Beitrag 1545063)
Hallo Uwe,

ich habe Themes und CommCtrl eingebunden. Aber mein Delphi 11.3 kennt
Delphi-Quellcode:
IsNewCommonCtrl
nicht. Die Hilfe auch nicht.

siehe hier

vcl.Dialogs;

Uwe Raabe 11. Jan 2025 23:27

AW: ShowMessage 2. Parameter
 
Die Abfrage mal auseinandergenommen:
Delphi-Quellcode:
  if TOSVersion.Check(6) and
     UseLatestCommonDialogs and
     IsNewCommonCtrl and
     not ((shDialogs in TStyleManager.SystemHooks) and not StyleServices(Screen.ActiveCustomForm).IsSystemStyle) then
TOSVersion.Check(6) bedeutet Windows Vista oder höher

UseLatestCommonDialogs ist zwar per default = True, könnte aber irgendwo in deinem Code geändert worden sein

Für IsNewCommonCtrl muss in den Projekt-Optionen unter Manifest Laufzeit-Themes aktiviert sein.

der not Block bedeutet: Es muss shDialogs aus TStyleManager.SystemHooks entfernt werden oder es muss der Windows Style aktiv sein. Solltest du also mit VCL-Styles arbeiten, muss das shDialogs da raus, denn dann werden die Dialoge von Windows verwendet. Sollen die Dialog auch im VCL-Style dargestellt werden, dann gehen halt die neuen Task-Dialoge nicht.

DaCoda 11. Jan 2025 23:35

AW: ShowMessage 2. Parameter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich benutze die "neuen" Dialoge mit einer kleinen Hilfsunit und die funktionieren eigentlich auch mit Styles.
Die Unit habe ich mal angehängt. Und in Kombination mit dem Vorschlag von Uwe Raabe kannst du dir schon was anständiges basteln :-)

Willie1 12. Jan 2025 18:43

AW: ShowMessage 2. Parameter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Uwe Raabe (Beitrag 1545069)
Die Abfrage mal auseinandergenommen:
Delphi-Quellcode:
  if TOSVersion.Check(6) and
     UseLatestCommonDialogs and
     IsNewCommonCtrl and
     not ((shDialogs in TStyleManager.SystemHooks) and not StyleServices(Screen.ActiveCustomForm).IsSystemStyle) then
TOSVersion.Check(6) bedeutet Windows Vista oder höher

UseLatestCommonDialogs ist zwar per default = True, könnte aber irgendwo in deinem Code geändert worden sein

ist Ok
Zitat:


Für IsNewCommonCtrl muss in den Projekt-Optionen unter Manifest Laufzeit-Themes aktiviert sein.
Ist aktiviert!
Zitat:


der not Block bedeutet: Es muss shDialogs aus TStyleManager.SystemHooks entfernt werden oder es muss der Windows Style aktiv sein. Solltest du also mit VCL-Styles arbeiten, muss das shDialogs da raus, denn dann werden die Dialoge von Windows verwendet. Sollen die Dialog auch im VCL-Style dargestellt werden, dann gehen halt die neuen Task-Dialoge nicht.
Ich verstehe deine Erklärungen- Vcl.Dialogs ist eingebunden. Außerhalb des Screenshots ist außer then alles in Ordnung.

jaenicke 12. Jan 2025 19:30

AW: ShowMessage 2. Parameter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Du brauchst diese Funktion nicht kopieren, denn die wird intern bereits verwendet, wenn du ShowMessage aufrufst. Du könntest darin aber einen Haltepunkt setzen und prüfen, was dort passiert, wenn du ShowMessage verwendest. Das sieht dann z.B. so aus:

Anhang 57332

Wie du siehst, komme ich in den ersten Zweig rein.

Aber was passiert bei dir denn, wenn du diese Zeilen ausprobierst?
Delphi-Quellcode:
  ShowMessage('Test', [tfAllowDialogCancellation]);
  ShowMessage('Test', []);
Macht das einen Unterschied?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.
Seite 1 von 2  1 2      

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