AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Don't ask again" Messagedialog ?

Ein Thema von ralfiii · begonnen am 6. Apr 2009 · letzter Beitrag vom 14. Jul 2010
Antwort Antwort
Seite 2 von 3     12 3      
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#11

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 06:51
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 ?

Geändert von v2afrank (14. Jul 2010 um 06:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#12

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 08:28
Taskdialog kann ich nicht nehmen, da das Programm unter XP auch noch arbeiten soll. Hat einer eine Idee ?
Es gibt ja einige TaskDialog-Nachimplementationen (z.B. von JED und TMS). Die haben vermutlich auch diese DSA-Funktionalität.
Uli Gerhardt
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#13

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 08:30
Das schon, aber die Kosten 85 bzw. 185 Euro. Das ist es mir nicht Wert.
Da bau ich mir lieber selber ein Fenster
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 09:03
Hallo,

Zitat:
Unter Delphi 2010 funktioniert das nämlich nicht mehr. Es wird nur der erste Buchstabe des Text und der Caption angezeigt.
Könnte am Unicode liegen.
Ändere beim Bsp.-Code auf Seite 1 alles von String auf AnsiString,
und übergib auch nur einen solchen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#15

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 09:07
Das schon, aber die Kosten 85 bzw. 185 Euro. Das ist es mir nicht Wert.
Da bau ich mir lieber selber ein Fenster
Ob sich das lohnt, kommt auf deinen Stundensatz an.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#16

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 09:12
bau dir einen mit ner form zusammen. wo ist das problem? das dauert höchstens 5 minuten.
Gruß
Cookie
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#17

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 09:35
Haben wir nicht auch irgendwo soeinen Dialog als OpenSource in der DP rumliegen?
Dachte ich hätte sowas mal gesehn.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#18

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 09:38
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.

Hallo,

Könnte am Unicode liegen.
Ändere beim Bsp.-Code auf Seite 1 alles von String auf AnsiString,
und übergib auch nur einen solchen.
Heiko
Das ist der Grund, allerdings hat ein Umstellen von String auf Ansistring nicht funktioniert. Ich habe stattdessen die Unicodefunktion mit dem Index 191 genommen.
So funktioniert es auch mit Delphi 2010
Delphi-Quellcode:
function MessageBoxCheck; external 'shlwapi.dllindex 191;
function MessageBoxCheck(hWnd: THandle; Text: PWideChar; Title: PWideChar; dwType: DWORD; Default: Integer;
  RegVal: PChar): Integer; stdcall;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 10:12
Zitat:
Ich habe stattdessen die Unicodefunktion mit dem Index 191 genommen.
So funktioniert es auch mit Delphi 2010
Das ist auch die bessere Variante.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#20

AW: "Don't ask again" Messagedialog ?

  Alt 14. Jul 2010, 10:31
noch eine selbstgebastelte Version:
Delphi-Quellcode:
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.
Diese paßt sich zumindestens an das Aussehn der Delphi-Dialoge an.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 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