Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MessageDlg mit eigenen Icons (https://www.delphipraxis.net/23932-messagedlg-mit-eigenen-icons.html)

Helmi 12. Jun 2004 10:57


MessageDlg mit eigenen Icons
 
Hallo Jungs,

ich hab folgende Frage:

Wie kann man (falls es geht) in einem MessageDlg eigene Icons einbringen?
Ausser den Windows-Icons (Question, Information, Error, Warning, ...)

mfg
Helmi


:thuimb:

nailor 12. Jun 2004 11:08

Re: MessageDlg mit eigenen Icons
 
Guckst du in der OH bei "MessageDlg (Funktion)". Da ist ne lange Liste mit Überladungen, wobei manche die Angabe einer BitMap zulassen.

Helmi 12. Jun 2004 11:24

Re: MessageDlg mit eigenen Icons
 
oki danke

nur wie kann ich eine solche überladene Funktion laden?

Meflin 12. Jun 2004 11:33

Re: MessageDlg mit eigenen Icons
 
vielleicht hilft dir die dp suche, da gabs schon ein paar threads dazu!

Sebastian Nintemann 12. Jun 2004 11:41

Re: MessageDlg mit eigenen Icons
 
Zitat:

Zitat von Helmi
nur wie kann ich eine solche überladene Funktion laden?

"Überladen" bedeutet, dass mehrere Funktionen mit gleichem Namen existieren, die sich nur über die Art/Anzahl der Parameter unterscheiden. Du musst also nur die entsprechenden Parameter einsetzen (von der Version der Funktion, die du willst), der Compiler weiß dadurch, welche Funktion er nehmen soll.

Viele Grüße, Sebastian

Helmi 12. Jun 2004 11:45

Re: MessageDlg mit eigenen Icons
 
Zitat:

Überladen" bedeutet, dass mehrere Funktionen mit gleichem Namen existieren, die sich nur über die Art/Anzahl der Parameter unterscheiden. Du musst also nur die entsprechenden Parameter einsetzen (von der Version der Funktion, die du willst), der Compiler weiß dadurch, welche Funktion er nehmen soll.
das heisst also ich brauch die funktion nicht noch irgendwo zu laden, damit der Compiler weiss, dass ich diese spezielle überladende Funktion brauche?

Meflin 12. Jun 2004 11:46

Re: MessageDlg mit eigenen Icons
 
nein musst du nicht

Helmi 12. Jun 2004 11:49

Re: MessageDlg mit eigenen Icons
 
wenn ich aber eine andere funktion von MessageDlg haben will und einfach drauf los programmiere

dann erhalte ich vom Compiler folgende Fehlermeldung:

Zitat:

Zu viele Parameter
ich möchte folgende MessageDlg-Funktion benutzen:

Code:
function MessageDlg(const Msg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload;

Sebastian Nintemann 12. Jun 2004 11:53

Re: MessageDlg mit eigenen Icons
 
Hallo Helmi,
nein, brauchst du nicht (du musst für die MessageDlg Funktionen die Unit 'Dialogs' eingebunden haben, die ist aber standardmäßig sowieso dabei).

Hier ein Beispiel:
Delphi-Quellcode:
function Add(a:integer): integer; overload; //1. Funktion
begin
  result := a + 5;
end;

function Add(a,b:integer): integer; overload; //2. Funktion
begin
  result := a + b;
end;

{...}

var
  a,b: integer;
begin
  a := 10;
  b := 20;
  //entweder
  Caption := IntToStr(Add(a)); //Hier steht 15 in der Caption, weil Funktion 1 genommen wird
  //oder
  Caption := IntToStr(Add(a,b)); //Hier steht 30 in der Caption, weil Funktion 2 genommen wird
end;
Viele Grüße, Sebastian

Sebastian Nintemann 12. Jun 2004 11:54

Re: MessageDlg mit eigenen Icons
 
Etwas langsam.. ;)

Wie rufst Du die Funktion
Delphi-Quellcode:
function MessageDlg(const Msg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload;
Denn auf?

Helmi 12. Jun 2004 11:57

Re: MessageDlg mit eigenen Icons
 
mmh

ich versteh das nicht :wall:

ich poste jetzt einfach mal meinen Code - ist zwar nur ein Test aber egal:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  Bitmap: TBitmap;
begin

  Bitmap := TBitmap.Create;

  Bitmap.LoadFromFile('e:\delphi\Icons, Bitmaps, Avi\bmp\alarm.bmp');

  MessageDlg('hallo', mtCustom, [mbYes, mbNo], 0, [mbnone], Bitmap);

  Bitmap.Free;
end;
und wie ich schon mal geschrieben hab, will ich folgende MessageDlg-Funktion benutzen:

Code:
function MessageDlg(const Msg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload;
vielleicht kann mir jemand sagen, was ich falsch mach...

:wall:

Sebastian Nintemann 12. Jun 2004 12:45

Re: MessageDlg mit eigenen Icons
 
Hmm...
Ich seh auch nicht warum der Code nicht funktioniert. Die eckigen Klammern bei mbNone müssen da nicht hin. Aber wenn man die wegmacht funktionierts immernoch nicht.
Hat jemand das mal versucht? Bei mir klapps jedenfalls nicht (D6 und D7, wobei die D6-OH sowieso nur eine MessageDlg Funktion kennt).
Hab auch eine von den anderen überladenen MessageDlg-Funktionen versucht, ging auch nicht. Delphi will immer nur die Parameter, die in der Standard-MessageDlg erwartet werden (Die mein D6 in der OH hat).

Viele Grüße, Sebastian

nailor 12. Jun 2004 12:56

Re: MessageDlg mit eigenen Icons
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Bitmap: TBitmap;
begin

  Bitmap := TBitmap.Create;

  Bitmap.LoadFromFile('e:\delphi\Icons, Bitmaps, Avi\bmp\alarm.bmp');

  MessageDlg(WideString('hallo'), TMsgDlgType(mtCustom),

   TMsgDlgButtons(mbYesNo), Longint(0), TMsgDlgBtn(mbnone), TBitmap(Bitmap));

  Bitmap.Free;
end;
alles von hand umgecastet: und siehe da: [Fehler] Unit1.pas(37): Undefinierter Bezeichner: 'mbYesNo'

^^ was soll das denn jetzt?

Meflin 12. Jun 2004 13:10

Re: MessageDlg mit eigenen Icons
 
mbYes, mbNo sollte das heissen oder nicht? esgibt ja keinen YesNo-Button ;-)

Helmi 12. Jun 2004 13:12

Re: MessageDlg mit eigenen Icons
 
geht trotzdem nicht

nailor 12. Jun 2004 13:25

Re: MessageDlg mit eigenen Icons
 
ja. muss es heißen. allerdings hat die dumme delphi-hilfe mir gesagt, dass es auch mbYesNo gibt (allerdings nur in QDialogs) ind Dialogs allein gibt es nur mbYesNoCancel

aber auch mit Korrektur klappt es nicht

Meflin 12. Jun 2004 13:27

Re: MessageDlg mit eigenen Icons
 
ok, die schreibweise war mir unbekannt! :stupid:

nailor 12. Jun 2004 13:30

Re: MessageDlg mit eigenen Icons
 
PS: hab mich vertan, siehe post oben

PS2: schaut euch mal die API-Funktion "MessageBoxIndirect" an, damit sollte es gehen

Dani 12. Jun 2004 14:10

Re: MessageDlg mit eigenen Icons
 
In Delphi 6 scheint es keine solche Funktion zu geben (MessageDlg mit BMP Parameter ist gemeint) und MessageBoxIndirect gibts nur für NT :gruebel:

Delphi-Quellcode:
{...}

 Uses
  Dialogs,
  ExtCtrls;

{...}

function MessageDlgImg(const Msg: String; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; BMP32x32: TBitmap=nil; CustomTitle: String=''; HelpCtx: Integer=0): Integer; overload;

function MessageDlgImg(const Msg: String; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; ImagePath: String=''; CustomTitle: String=''; HelpCtx: Integer=0): Integer; overload;

implementation

{...}

function MessageDlgImg(const Msg: String; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; BMP32x32: TBitmap=nil; CustomTitle: String=''; HelpCtx: Integer=0): Integer; overload;
var Img: TImage;
begin
 if DlgType = mtCustom then DlgType := mtInformation;
 Img := nil;
  with CreateMessageDialog(Msg, DlgType, Buttons) do
    try
      HelpContext := HelpCtx;
      HelpFile := Application.HelpFile;
      Position := poScreenCenter;
      if CustomTitle <> '' then Caption := CustomTitle;
      if BMP32x32 <> nil then
       begin
        Img := FindComponent('Image') as TImage;
        if Img <> nil then
         begin
          Img.Picture.Bitmap.Assign(BMP32x32);
          Img.Transparent := true;
         end;
       end;
      Result := ShowModal;
    finally
      Free;
      Img := nil;
    end;
end;


function MessageDlgImg(const Msg: String; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; ImagePath: String=''; CustomTitle: String=''; HelpCtx: Integer=0): Integer; overload;
var Img: TImage;
begin
 if DlgType = mtCustom then DlgType := mtInformation;
 Img := nil;
  with CreateMessageDialog(Msg, DlgType, Buttons) do
    try
      HelpContext := HelpCtx;
      HelpFile := Application.HelpFile;
      Position := poScreenCenter;
      if CustomTitle <> '' then Caption := CustomTitle;
      if ImagePath <> '' then
       begin
        Img := FindComponent('Image') as TImage;
        if Img <> nil then
         try
          Img.Picture.LoadFromFile(ImagePath);
          Img.Transparent := true;
         except
          {tue nichts}
         end;
       end;
      Result := ShowModal;
    finally
      Free;
      Img := nil;
    end;
end;

{ Beispiel }

procedure TForm1.Button1Click(Sender: TObject);
var BMP: TBitmap;
begin
  MessageDlgImg('Test', mtWarning, [mbYes, mbNo],
                'H:\ProjectPics\LAN.bmp', 'Guten Tag');

  BMP := TBitmap.Create;
  try
   BMP.LoadFromFile('H:\ProjectPics\LAN.bmp');
   MessageDlgImg('Test', mtWarning, [mbYes, mbNo],
                 'H:\ProjectPics\LAN.bmp', 'Guten Tag');
  finally
   BMP.Free;
  end;
end;

{...}

Robert_G 12. Jun 2004 15:51

Re: MessageDlg mit eigenen Icons
 
Da war wohl wieder jemand zu faul für die Suche.
Genau dieses Thema hatten wir hier erst vor 2 oder 3 Wochen!
Das Bildchen in einem Message-Dialog ändern

Helmi 12. Jun 2004 17:11

Re: MessageDlg mit eigenen Icons
 
danke erstmal für die ganzen Tips...

Zitat:

Da war wohl wieder jemand zu faul für die Suche.
Genau dieses Thema hatten wir hier erst vor 2 oder 3 Wochen!
ganz faul war ich aber nicht, da ich danach gesucht habe...

nur leider heissen viele Threads immer anders, obwohl es sich oft um die gleiche Sache handelt
(z. B. Message-Dialog, MessageDlg, ...)!


Trotzdem vielen Dank für die Hilfe :cheers: :party:

Sebastian Nintemann 12. Jun 2004 18:12

Re: MessageDlg mit eigenen Icons
 
@Robert: Ich hatte nach MessageDlg gesucht... ;)
@Dani: In Delphi 6 wird ja auch nicht behauptet, dass es verschiedene Versionen der Funktion gibt (siehe OH), aber in Delphi 7... Würd mich ja mal interessieren, warum die overloads nicht funktionieren. Hat Borland vielleicht einfach vergessen die in die Dialogs-Unit zu packen?
Anders gefragt: ist es irgendjemandem mit D7 gelungen eine der überladenen MessageDlg-Funktionen aufzurufen?

Viele Grüße, Sebastian

Steve 14. Jun 2004 13:41

Re: MessageDlg mit eigenen Icons
 
Zitat:

Zitat von Grotesquery
Anders gefragt: ist es irgendjemandem mit D7 gelungen eine der überladenen MessageDlg-Funktionen aufzurufen?

Japp, musst nur QDialogs statt Dialogs einbinden :zwinker:

Gruß
Stephan

Helmi 14. Jun 2004 14:04

Re: MessageDlg mit eigenen Icons
 
Zitat:

Japp, musst nur QDialogs statt Dialogs einbinden
könntest du bitte ein Beispiel posten?

ich schaffs selber ned :wall:

Steve 14. Jun 2004 14:27

Re: MessageDlg mit eigenen Icons
 
Delphi-Quellcode:
USES
 QDialogs, {...}

BEGIN
  MessageDlg('Soll ich?', mtConfirmation, mbYesNoCancel, 0, mbNo);
END;
Aber irgendwie funzt das mit den Rückgabewerten nich so ganz :roll: Außerdem sieht der Dialog relativ bescheiden aus :cry:

Aber immerhin kann man die überladenen Fkt. aufrunfen :tongue:

Gruß
Stephan

nailor 14. Jun 2004 14:30

Re: MessageDlg mit eigenen Icons
 
edit: stuss geschrieben

Steve 14. Jun 2004 14:31

Re: MessageDlg mit eigenen Icons
 
edit: auf Stuss geantwortet :mrgreen: :zwinker:

nailor 14. Jun 2004 14:35

Re: MessageDlg mit eigenen Icons
 
[ot]lol. der war ja grade mal eine minute online[/ot]

Helmi 14. Jun 2004 14:47

Re: MessageDlg mit eigenen Icons
 
ich hätt jetzt noch eine Frage:

also das mit den übergeordneten Funktionen aufrufen geht ja jetzt, dank Steve

aber wie kann man jetzt da so ein eigenes Bitmap einbinden?

nailor 14. Jun 2004 14:51

Re: MessageDlg mit eigenen Icons
 
bei den beiden varianten hier kann man ein TBitmap angeben:

Delphi-Quellcode:
function MessageDlg(const Caption: WideString; const Msg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload;
function MessageDlg(const Caption: WideString; const Msg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload;

Helmi 14. Jun 2004 14:54

Re: MessageDlg mit eigenen Icons
 
des is mir schon klar

aber wie? :-)

nailor 14. Jun 2004 16:09

Re: MessageDlg mit eigenen Icons
 
wie wie?

einfach ein bitmap erstellen (bm := TBitmap.Create) und z.b. per bm.LoadFromFile('file') füllen und dann da angeben. die anderen parameter wie immer angeben.

Helmi 14. Jun 2004 17:27

Re: MessageDlg mit eigenen Icons
 
also ich hab das jetzt mal probiert

hier erst mal der Code:

Code:
var
  Bm: TBitmap;
begin

  Bm := TBitmap.Create;

  Bm.LoadFromFile('e:\delphi\Icons, Bitmaps, Avi\bmp\alarm.bmp');

  MessageDlg('ficken', 'hallo', mtCustom, mbYesNo, 0, mbno, bm);

  Bm.Free;
aber wenn ich das ausführen will, dann sagt der Compiler zu mir:

Zitat:

Es gibt keine überladende Version von 'MessageDlg', die man mit diesen Argumenten aufrufen kann
schreib ich aber anstatt "bm" "nil", dann gehts

was ist verkehrt?

mfg
Helmi


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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