Einzelnen Beitrag anzeigen

Capa

Registriert seit: 26. Okt 2003
102 Beiträge
 
RAD-Studio 2010 Arc
 
#1

FormCloseQuery FormShowing abfrage

  Alt 23. Feb 2011, 20:29
Also immo sieht mein Code so aus
der soll quasi abfragen ob noch eine Form offen ist und wenn nicht schliessen
ansonsten fehlermeldung.
Soweit so gut nun hab ich das Problem das ständig neue Forms dazu kommen da
dachte ich mir muss das ganze etwas vereinfachen und hab eine version geschrieben
wo ich nur nen integer wert ändern muss.
nun funzt das aber nicht so wirklich.

Alte Version:
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := False;
  if (not Form2.Showing) then
    if (not Form3.Showing) then
      if (not Form4.Showing) then
        if (not Form5.Showing) then
          if (not Form6.Showing) then
           if (not Form7.Showing) then
            CanClose := True;

  if (not CanClose) then
    MessageDlg('Bitte erst alle Fenster schließen bevor das Hauptfenster geschlossen wird!', mtError, [mbOK], 0);
end;
Neue Version:
Delphi-Quellcode:
var maxfom: integer;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var i,L: integer;
begin
  CanClose := False;
  L := 1;
  for i := 2 to maxform do // fängt mit 2 an weil Form1 ja nicht abgefragt werden soll.
  begin
    if (not TForm('Form'+inttostr(i)).Showing) then
      L := L + 1
  end;

  if (L = maxform) then
    Canclose := True;

  if (not CanClose) then
    MessageDlg('Bitte erst alle Fenster schließen bevor das Hauptfenster geschlossen wird!', mtError, [mbOK], 0);
end;
im OnCreate wird noch die aktuelle Anzahl der Forms gesetzt steht immo bei 8.

Das Problem ist das der nun auch das fenster schliesst wenn noch ne form offen ist, was ja damit normalerweile verhindert werden soll. Sieht jemand nen Fehler da drin den ich seh irgendwie keinen
is ja im endeffekt nix anderes als die obere version


An anderer Stelle hab ich folgenden Code:
Delphi-Quellcode:
  for i := 1 to maxform do
    TForm('Form'+inttostr(i)).Font := FontDialog1.Font;
nur bekomm ich da ne Zugriffsverletzung :/

"Zugriffsverletzung bei Adresse 004B2316 in Modul 'Project1.exe'. Lesen von Adresse 00000000"

Geändert von Capa (23. Feb 2011 um 21:18 Uhr)
  Mit Zitat antworten Zitat