![]() |
AW: "Don't ask again" Messagedialog ?
Ich hole den Thread jetzt mal wieder nach oben. Unter Delphi 2010 funktioniert das nämlich nicht mehr. Es wird nur der erste Buchstabe des Text und der Caption angezeigt.
Taskdialog kann ich nicht nehmen, da das Programm unter XP auch noch arbeiten soll. Hat einer eine Idee ? |
AW: "Don't ask again" Messagedialog ?
|
AW: "Don't ask again" Messagedialog ?
Das schon, aber die Kosten 85 bzw. 185 Euro. Das ist es mir nicht Wert.
Da bau ich mir lieber selber ein Fenster |
AW: "Don't ask again" Messagedialog ?
Hallo,
Zitat:
Ändere beim Bsp.-Code auf Seite 1 alles von String auf AnsiString, und übergib auch nur einen solchen. Heiko |
AW: "Don't ask again" Messagedialog ?
Zitat:
|
AW: "Don't ask again" Messagedialog ?
bau dir einen mit ner form zusammen. wo ist das problem? das dauert höchstens 5 minuten.
|
AW: "Don't ask again" Messagedialog ?
Haben wir nicht auch irgendwo soeinen Dialog als OpenSource in der DP rumliegen?
Dachte ich hätte sowas mal gesehn. |
AW: "Don't ask again" Messagedialog ?
Ich finde es schon schöner, wenn sich die Messagebox dem Design von Windows anpasst, was bei einem selbstgebauten Formular nicht so schön ist.
Zitat:
So funktioniert es auch mit Delphi 2010
Delphi-Quellcode:
function MessageBoxCheck; external 'shlwapi.dll' index 191;
function MessageBoxCheck(hWnd: THandle; Text: PWideChar; Title: PWideChar; dwType: DWORD; Default: Integer; RegVal: PChar): Integer; stdcall; |
AW: "Don't ask again" Messagedialog ?
Zitat:
|
AW: "Don't ask again" Messagedialog ?
noch eine selbstgebastelte Version:
Delphi-Quellcode:
Diese paßt sich zumindestens an das Aussehn der Delphi-Dialoge an.
uses Dialogs, StdCtrls, Math;
var MessageDlgExList: TStringList; const mbAuto = TMsgDlgBtn(Ord(High(TMsgDlgBtn)) + 1); function MessageDlgEx(const DlgID, Msg: String; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; DefaultButton: TMsgDlgBtn = mbAuto): Integer; var Dialog: TForm; i, X, Y: Integer; C: TWinControl; Query: TCheckBox; begin if (DlgID <> '') and (MessageDlgExList.IndexOfName(DlgID) >= 0) then begin Result := StrToInt(MessageDlgExList.Values[DlgID]); Exit; end; if DefaultButton = mbAuto then if mbOk in Buttons then DefaultButton := mbOk else if mbYes in Buttons then DefaultButton := mbYes else DefaultButton := mbRetry; Dialog := CreateMessageDialog(Msg, DlgType, Buttons, DefaultButton); try if DlgID <> '' then begin X := 999; Y := 0; for i := Dialog.ComponentCount - 1 downto 0 do if Dialog.Components[i] is TWinControl then begin C := TWinControl(Dialog.Components[i]); if C.Visible then begin X := Min(C.Left, X); Y := Max(C.Top + C.Height, Y); end; end; Query := TCheckBox.Create(Dialog); Query.Parent := Dialog; Query.Left := X; Query.Top := Dialog.ClientHeight; Query.Width := 100; Query.Caption := 'merken'; Dialog.ClientHeight := Dialog.ClientHeight + Query.Height + (Dialog.ClientHeight - Y); end; Result := Dialog.ShowModal; if Query.Checked and (Result <> MB_ABORTRETRYIGNORE) then MessageDlgExList.Add(DlgID + MessageDlgExList.NameValueSeparator + IntToStr(Result)); finally Dialog.Free; end; end; initialization MessageDlgExList := TStringList.Create; MessageDlgExList.Sorted := True; finalization MessageDlgExList.Free; end. MessageDlgExList kann man bei Programmstart laden und beim Beenden speichern (oder sofort über MessageDlgExList.OnChange speichern) Die DlgID muß für jeden Dialog vergeben werden. Wurde der Dialog gespeichert/gemerkt, dann wird beim nächsen Aufruf das letzte Result zurückgegeben und nichts angezeigt. Will man einen/alle Dialoge wieder anzeigen, dann einfach die MessageDlgExList bearbeiten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 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