procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin If Application.MessageBox('Er du sikker på du vil lukke dit navnet på dit program ?', 'navnet på dit program', MB_YESNO) = IDNO then CanClose := False; //dialogbox lukning af Vinlageret end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var Modal : TModalResult; begin Modal := Messagedlg('Er du sikkert på at du vil afslutte?', mtinformation, [mbok, mbcancel], 0); if Modal = mrok then Action:= cafree else if Modal = mrcancel then Action:= canone; end;
stone's eksempel er bedst. Han bruger den rette hændelse (event) - den er der med dette ene formål. Det kan enddog blive en one-liner.
begin CanClose := MessageDlg('Quit?',mtConfimation,[mbYes,mbNo],0) = mrYes; end;
Armenea eksempel er interessant men ikke korrekt. Det er forkert brug af Action-variablen, som mest bruges til at lukke MDI-børn (a=caFree) - tror ikke det har været testet.
Og ja det er mest brugt til MDI childs, men hvem siger at man ikke også kan bruge det til en løsning som dette? Jeg kan i hvert fald ikke se hvad der er forkert ved at bruge Action-variablen.
Armena: Når jeg viser forme (og jeg autokreerer aldig en form), så ser det sådan her ud:
with TfrmSomething.Create(self) do try if ShowModal = mrOK then begin // Do something end; finally Free; end;
Så dur det sgu ikke at jeg sætter Action = caFree. Det eneste sted jeg kan bruge det er hvis jeg laver et Show på en subform:
if not assigned(frmSomething) then frmSomething := TfrmSomething.Create(self);
frmSomething.Show;
Her skal Action altid sættes til caFree og her fungerer dit eksempel faktisk (desuden skal frmSomething sættes til nil i dens OnDestroy event) - men hvornår har man en "Vil du lukke?" på en subform? Er det ikke mest normalt på hovedformen?
Det er min erfaring at det er DE TO velfungerende løsninger og på det grundlag siger jeg at dit eksempel ikke dur fordi det kun retter sig mod een situation og det er den forkerte.
Desuden synes jeg at når nu der findes en OnCloseQuery, så er det forkert at råde andre til at bruge OnClose i stedet.
Stone: Bevares, bevares. Jeg kan da også lave en OneLiner ud af dit eksempel:
begin CanClose := Application.MessageBox('Vil du lukke?', 'ProgNavn', MB_YESNO) = IDYES; end;
Det var bare for at demonstrere <Variabel> := <boolsk udtryk>
Der er også MessageDlgPos så man kan placere dialogen andetsteds end centreret på skærmen. Der er mange muligheder.
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.