Avatar billede zer0c00l Juniormester
22. april 2003 - 20:23 Der er 11 kommentarer og
1 løsning

Kommando til [mbYes,mbNo]??

Hej eksperter..

jeg har lige lavet en knap med kommandoen:

  MessageDlg ('Er du sikker på du vil afslutte?', mtWarning, [mbYes,mbNo] ,0);

Hvordan får jeg delphi til at fatte om jeg trykker yes eller no? altså hvordan føjer jeg en kommando til Yes-knappen?
Avatar billede soreno Praktikant
22. april 2003 - 20:26 #1
Fra http://www.delphibasics.co.uk/RTL.asp?Name=MessageDlg

var
  buttonSelected : Integer;
begin
  // Show a confirmation dialog
  buttonSelected := MessageDlg('Confirmation',mtError, mbOKCancel, 0);

  // Show the button type selected
  if buttonSelected = mrOK    then ShowMessage('OK pressed');
  if buttonSelected = mrCancel then ShowMessage('Cancel pressed');
end;

Altså, kig på returnværdien på funktionen.
Avatar billede zer0c00l Juniormester
22. april 2003 - 20:39 #2
For fedt man.. Jeg har brugt koden:

begin
  if PrintDialog1.execute then begin
    RichEdit1.Print('Title på dokument');
  end;
    end;
procedure TForm1.AfslutClick(Sender: TObject);
begin
  buttonSelected := MessageDlg('Er du sikker på, du vil afslutte?',mtWarning, [mbYes,mbNo], 0);  //Viser vinduet, der spørger, om man er sikker på, man vil sfslutte

  if buttonSelected = mrYes then application.terminate;  // Handling hvis der trykkes "Yes"
end;


Kan man ikke få det på dansk?? Med "Davarsel" fram for "Warning" mm? Eller hva.?
Avatar billede soreno Praktikant
22. april 2003 - 20:47 #3
Mon ikke det kommer det an på brugerens settings. Altså har du en engelsk Windows kommer teksten på engelsk.
Avatar billede zer0c00l Juniormester
22. april 2003 - 21:05 #4
nej for man skriver "yes" og "no" i delphi..
Avatar billede benoit Nybegynder
22. april 2003 - 21:28 #5
if messagedlg('Tekst', mtwarning, [mbyes, mbno],0)= mryes then Something;
Avatar billede hermandsen Juniormester
22. april 2003 - 23:49 #6
Application.MessageBox()

Til dem der nu er rigtig kræsne og vil have deres egne knap-navne, ikon osv. lavede jeg en gang en dll der kunne klare den...

Bær over med mig hvis der er fejl, det var min første dll!! :)

library msgbox;

uses
  Classes,
  Windows,
  StdCtrls,
  ExtCtrls,
  Forms,
  Graphics;

function CustomMessageBox(Owner: TComponent; const Text, Caption: PChar;
  const BtnCaptions: array of ShortString; const DefaultBtn, CancelBtn: Integer;
  const Icon: HICON): Integer; stdcall;

  function IntToStr(I: Integer): ShortString;
  begin
    Str(I, Result);
  end;

  function GetAveCharSize(Canvas: TCanvas): TPoint;
  var
    I: Integer;
    Buffer: array[0..51] of Char;
  begin
    for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
    for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
    GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
    Result.X := Result.X div 52;
  end;

  function Max(A, B: Integer): Integer;
  begin
    if A > B then Result := A else Result := B;
  end;

const
  mcVertMargin = 8;
  mcHorzMargin = 8;
  mcVertSpacing = 10;
  mcHorzSpacing = 10;
  mcIconTextSpacing = 16;
  mcTextButtonSpacing = 10;
  mcButtonWidth = 50;
  mcButtonHeight = 14;
  mcButtonSpacing = 4;
var
  Form: TForm;
  lblText: TLabel;
  imgIcon: TImage;
  I, X, HorzMargin, VertMargin, VertSpacing,
  ButtonHeight, ButtonWidth, ButtonSpacing, ButtonGroupWidth: Integer;
  Buttons: array of TButton;
  DialogUnits: TPoint;
begin
  Form := TForm.Create(Owner);                                    //Prepare form
  Form.BorderIcons := [biSystemMenu];
  Form.BorderStyle := bsDialog;
  Form.Caption := Caption;

  DialogUnits := GetAveCharSize(Form.Canvas);
  HorzMargin := MulDiv(mcHorzMargin, DialogUnits.X, 4);
  VertMargin := MulDiv(mcVertMargin, DialogUnits.Y, 8);
  VertSpacing := MulDiv(mcVertSpacing, DialogUnits.Y, 8);
  ButtonWidth := MulDiv(mcButtonWidth, DialogUnits.X, 4);

  imgIcon := TImage.Create(Form);                                //Prepare icon
  imgIcon.Name := 'Image';
  imgIcon.Picture.Icon.Handle := Icon;
  imgIcon.Parent := Form;
  imgIcon.SetBounds(HorzMargin, VertMargin, 32, 32);
//  CreateMessageDialog (Delphi-funktion. Min er en let modereret udgave af den)

  lblText := TLabel.Create(Form);                                //Prepare label
  lblText.Name := 'Text';
  lblText.Caption := Text;
  lblText.Parent := Form;
  lblText.Top := VertMargin;
  lblText.Left := imgIcon.Left + imgIcon.Width + mcIconTextSpacing;

  ButtonSpacing := MulDiv(mcButtonSpacing, DialogUnits.X, 4);
  ButtonGroupWidth := ButtonWidth * (High(BtnCaptions)+1) + ButtonSpacing * High(BtnCaptions);
  ButtonHeight := MulDiv(mcButtonHeight, DialogUnits.Y, 8);

  Form.ClientWidth := Max(lblText.Left + lblText.Width, ButtonGroupWidth) + HorzMargin*2;

  X := (Form.ClientWidth - ButtonGroupWidth) div 2;

  SetLength(Buttons, High(BtnCaptions)+1);                    //Prepare buttons

  for I := Low(BtnCaptions) to High(BtnCaptions) do
  begin
    Buttons[I] := TButton.Create(Form);
    Buttons[I].Caption := BtnCaptions[I];
    Buttons[I].Name := 'Button' + IntToStr(I);
    Buttons[I].Left := I*60;
    Buttons[I].Parent := Form;
    Buttons[I].TabOrder := I;
    Buttons[I].Tag := I;
    Buttons[I].ModalResult := I+1;
    Buttons[I].SetBounds(X, Max(lblText.Height, imgIcon.Height) + VertMargin + VertSpacing,
                        ButtonWidth, ButtonHeight);
    Inc(X, ButtonWidth + ButtonSpacing);

    if I = DefaultBtn then Buttons[I].Default := True;
    if I = CancelBtn then Buttons[I].Cancel := True;
  end;

  Form.ClientHeight := Buttons[0].Top + VertSpacing + VertMargin + 4;
  Form.Left := (Screen.Width - Form.Width) div 2;
  Form.Top := (Screen.Height - Form.Height) div 2;

  Result := Form.ShowModal;
  Form.Free;
end;

exports
  CustomMessageBox;
begin

end.


Hvis der er nogen der kan komme med forbedringer til den skal de være meget velkomne da jeg ikke selv synes den er helt perfekt, blot god meget af vejen! :)

//hermandsen
Avatar billede jensfudge Nybegynder
23. april 2003 - 10:53 #7
Det er ikke særligt svært at lave en MessageDlg selv. Lav en form, tilknyt en TImages som fyldes med billeder fra en "rigtig" MessageDlg. Lav en funktion UDENFOR klassen der hedder MessageDlgDK, med samme parametre som en alm MessageDlg, på funktionen kreeres din egen MessageDlg med FrmMessageDlgDK := TFrmMessageDlg.Create(application)

Husk at free den senere..


En helt anden ting der heller ikke er særlig svært:
Tilføj et sprog til dit projekt, der vil da oprettes en fil der hedder Projekt1.dan (hvis du har tilføjet dansk til projektet projekt1). Kører programmet på en dansk Windows og denne fil ligger i samme direktorie som exe-filen vises alt på dansk (du skal selv oversætte i Delphi-miljøet), køres der på et andet sprog windows vises det på engelsk. Se demoerne for sprog understøttelse, det er nemt nok

/Jens
Avatar billede zer0c00l Juniormester
23. april 2003 - 21:57 #8
hov.. kom til at fumle lidt i mit sidste indlæg.. jeg har brugt koden:

begin
  buttonSelected := MessageDlg('Er du sikker på, du vil afslutte?',mtWarning, [mbYes,mbNo], 0);  //Viser vinduet, der spørger, om man er sikker på, man vil sfslutte

  if buttonSelected = mrYes then application.terminate;  // Handling hvis der trykkes "Yes"
end;

Kan man ikke knytte denne kommando til et billede på en eller anden måde i stedet?
Avatar billede jensfudge Nybegynder
23. april 2003 - 22:15 #9
Jeg ved ikke hvad du mener "knytte denne kommando til et billede på en eller anden måde i stedet"...
Vil du vise et billede når man trykker yes, eller hvad er probelemet?
Avatar billede zer0c00l Juniormester
27. april 2003 - 14:05 #10
jaja smarte ;)
tak soreno.. fandt ud af resten selv..
Avatar billede jpvj Nybegynder
27. april 2003 - 14:07 #11
Du kan også rette i en fil - se følgende artikel:

http://delphi.about.com/library/weekly/aa020502a.htm
Avatar billede zer0c00l Juniormester
27. april 2003 - 14:53 #12
ok nice :) har afleveret projekt nu, men kan måske bruge det næste gang ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester