Avatar billede thanders Nybegynder
08. marts 2004 - 00:34 Der er 9 kommentarer

Avslutt Hoved vindu

Hei, jeg ønsker at når brukeren avslutter vinduer så dukker det opp en dialog om han/hun vil avslutte (ok, cancel).

Hvordan gjør jeg det?

OnClose? ...
Avatar billede stone Forsker
08. marts 2004 - 01:37 #1
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;
Avatar billede armena Nybegynder
08. marts 2004 - 01:39 #2
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;
Avatar billede hrc Mester
16. marts 2004 - 02:23 #3
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.
Avatar billede armena Nybegynder
16. marts 2004 - 06:11 #4
hrc, jeg kan sige dig at min kode er blevet testet. Det virker ligeså godt som stone's :-)
Avatar billede armena Nybegynder
16. marts 2004 - 06:15 #5
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.
Avatar billede stone Forsker
16. marts 2004 - 08:18 #6
mit eksempel giver også danske knapper "ja" "nej"
Avatar billede stone Forsker
16. marts 2004 - 08:26 #7
eller det sprog pc'en er opsat til som standard, da man jo ikke ved hvilke sprog brugerne af ens program har.
Avatar billede hrc Mester
16. marts 2004 - 10:03 #8
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.
Avatar billede stone Forsker
12. juni 2004 - 17:40 #9
mon ikke det var på tide at lukke den tråd??
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