MDI Prob. unter D5

Diskutiere MDI Prob. unter D5 im Developer Network Forum im Bereich Hardware & Software Forum; Salute, ich habe eine Anwendung im MDI Mode geschrieben. Problem ist: Manche Formen öffnen sich sporadisch nur im wsNormal und nicht im...
  • MDI Prob. unter D5 Beitrag #1
WEBSTER

WEBSTER

Bekanntes Mitglied
Dabei seit
25.11.1999
Beiträge
1.502
Reaktionspunkte
0
Ort
COLOGNE
Salute,

ich habe eine Anwendung im MDI Mode geschrieben. Problem ist:
Manche Formen öffnen sich sporadisch nur im wsNormal und nicht im wsMaximized Mode. Ich vermute, daß diese Formen nicht genügend freien Speicher haben. Die MainForm hat ein MainMenu1, von der aus die Foemen aufgerufen werden und zwar so:

Code:
  ////////////////////////////////////////////////////////////////////////////
  // Alle Fenster werden geschlossen

  CloseAllForms;

  /////////////////////////////////////////////////////////////////////////////
  // Das Patienten ändern Fenster wird aufgerufen

  if aendern_form = nil then
  begin
    aendern_form := Taendern_form.Create(self);
  end;

  aendern_form.Show;


Die CloseAllForms sieht so aus (GLOBAL)

Code:
////////////////////////////////////////////////////////////////////////////
// Alle Fenster werden geschlossen

procedure Tmain_Form.CloseAllForms;
begin
  try
    hinzufuegen_Form.Close;
    hinzufuegen_Form.Release;
    hinzufuegen_Form := nil;
  except
  end;

  try
    loeschen_Form.Close;
    loeschen_Form.Release;
    loeschen_Form := nil;
  except
  end;

  try
    aendern_Form.Close;
    aendern_Form.Release;
    aendern_Form := nil;
  except
  end;

  try
    tour_config_Form.Close;
    tour_config_Form.Release;
    tour_config_Form := nil;
  except
  end;

  try
    tour_hinzufuegen_Form.Close;
    tour_hinzufuegen_Form.Release;
    tour_hinzufuegen_Form := nil;
  except
  end;

  try
    touren_ansehen_Form.Close;
    touren_ansehen_Form.Release;
    touren_ansehen_Form := nil;
  except
  end;

  try
    Leistungskatalog_bearbeiten_Form.Close;
    Leistungskatalog_bearbeiten_Form.Release;
    Leistungskatalog_bearbeiten_Form := nil;
  except
  end;

  try
    uebersicht_drucken_Form.Close;
    uebersicht_drucken_Form.Release;
    uebersicht_drucken_Form := nil;
  except
  end;

  try
    sichern_optionen_Form.Close;
    sichern_optionen_Form.Release;
    sichern_optionen_Form := nil;
  except
  end;

  try
    touren_sichern_Form.Close;
    touren_sichern_Form.Release;
    touren_sichern_Form := nil;
  except
  end;

  try
    db_sichern_Form.Close;
    db_sichern_Form.Release;
    db_sichern_Form := nil;
  except
  end;

  try
    detailplan_drucken_Form.Close;
    detailplan_drucken_Form.Release;
    detailplan_drucken_Form := nil;
  except
  end;

end;

Alle Formen haben die Methode bei OnClose -> Action:= CaFree;

Vielleicht habe habe ich da ja auch einen allg. DENKFEHLER.

Die Eigenschafen der Formen lauten:

FormStyle -> fsMDIChild
BorderStyle -> bsSizeable
BoderIcons -> alle auf False
WindowState -> wsMaximized
Position -> poDesktopCenter

Bitte um Hilfe.......

THX
WEBSTER
 
  • MDI Prob. unter D5 Beitrag #2
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Oh, ein paar Grundsatzsachen solltest Du ändern: :D
Code:
function CloseAll: Boolean;
var
  I	: Integer;
begin
  Result	:= True;
  for I := MDIChildCount - 1 downto 0 do begin
    // Can Close?
    Result := MDIChildren[I].CloseQuery;
    if not Result then
      Exit;
    MDIChildren[I].Close;
  end;
end; // CloseAll

function FindChild (AOwner: TForm; FormClass: TFormClass): TForm;
var
  I	: Integer;
begin
  Result := nil;
  for I := 0 to AOwner.MDIChildCount - 1 do
    if (AOwner.MDIChildren[I] is FormClass) then begin
      Result := AOwner.MDIChildren[I];
      Exit;
    end;
end; // FindChild

function MakeChild (AOwner: TForm; FormClass: TFormClass): TForm;
begin
  CursorHourglass;
  Result	 := FindChild (AOwner, FormClass);
  if (Result = nil) then
    Result := FormClass.Create (AOwner);
  if (Result.WindowState = wsMinimized) then
    ShowWindow (Result.Handle, SW_RESTORE)
  else begin
    Result.Show;
    Result.BringToFront;
  end;
end; // MakeChild
CloseAll schließt alle Fenster, egal wieviele Du hast und unabhängig davon, wie sie heißen. Ein neues Fenster wird so kreiert, immer nur eins (deswegen FindChild):
Code:
fmTestForm := TfmTestForm (MakeChild (Self, TfmTestForm));
BorderIcons: System, Minimize, Maximize (wichtig, damit Maximize funktioniert)
BorderStyle: Sizeable
FormStyle: MDIChild
Position: Default (eh egal, da maximized)
WindowState: Maximized

-> Im Prinzip alles auf Standard lassen, außer FormStyle und WindowState.

O Love
 
Thema:

MDI Prob. unter D5

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben