AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Form mehrmals aufrufen

Ein Thema von Tim Henford · begonnen am 11. Mär 2008 · letzter Beitrag vom 12. Mär 2008
Antwort Antwort
Seite 2 von 2     12   
Muetze1
(Gast)

n/a Beiträge
 
#11

Re: Eine Form mehrmals aufrufen

  Alt 12. Mär 2008, 11:08
Zitat von Tim Henford:
Also ich lasse die Forms jetzt folgendermaßen erstellen:
Delphi-Quellcode:
var
  formen : array [1..5] of TForm1;
  AnzForm : integer;

procedure THauptForm.StartBtnClick(Sender: TObject);
begin
      AnzForm:= AnzForm+1;

      formen[AnzForm]:= TUmbauten.Create(nil);
      formen[AnzForm].Left:= pos.X; formen[AnzForm].Top:= pos.Y;
      formen[AnzForm].Tag:= AnzForm;
      formen[AnzForm].Show;
end;
- Und wenn ich den StartBtn 6x drücke?
- Wieso definierst du ein Array mit TForm1 Elementen um dann TUmbauten zu zu weisen? Warum nicht gleiche ein Array mit TUmbauten?

Zitat von Tim Henford:
Form1 sieht dann so aus, die nächsten Fenster sollen sich alle neben das erste Reihen und wenn sich das erste bewegt sollen alle mitziehen:

Delphi-Quellcode:
...
  private
    procedure WMMove(var Message: TWMMove); MESSAGE WM_MOVE;
    procedure AlignForm;

....

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  AnzForm:= AnzForm-1;
end;

procedure TForm1.WMMove(var Message: TWMMove);
begin
  inherited;
  try // hier hängt er dann
    if Assigned(formen[Form1.Tag]) then begin
        AlignForm;
    end;
  except
  end;
end;

procedure TForm1.AlignForm;
begin
  formen[Form1.Tag].Left := formen[formen[Form1.Tag]-1].Left + formen[formen[Form1.Tag]-1].Width;
  formen[Form1.Tag].Top := formen[formen[Form1.Tag]-1].Top;
end;
das zugreifen auf "Tag" funktioniert hier so nicht, hat da jemand eine Lösung
- Du prüfst mit assigned() auf <> nil in der WMMove Botschaftsbehandlung, aber setzt nirgendwo beim Schließen einer Form deren Eintrag auf nil.
- Du fragst den Tag ab - aber wo setzt du diesen denn? Tag ist standardmäßig 0 und von daher ist der Zugriff auf dein formen[] Array ungültig mit einem Index von 0. Das du noch fragst warum das nicht klappt, zeigt mir, dass du die Bereichs- und Überlaufprüfung nicht eingeschaltet hast in dem Projekt. Bitte hole dies sofort nach (Projektoptionen -> Compiler) und erstelle das Projekt komplett neu.
- Du benutzt excessiv Form1, somit stellt sich für mich die Frage, ob diese globale Variable überhaupt eine gültige Instanz hat.
- Warum fragst du in der WMMove Botschaftsbehandlung nicht ab, ob du dich überhaupt in der Form1 befindest, oder willst du alle Fenster als gesamtes Verschieben, egal welches gezogen wird? Wenn ja, dann musst du den Code überarbeiten.
- Du greifst bei AlignForm immer auf den Form1.Tag-ten Eintrag in dem formen[] Array zu. Aber ich dachte die Methode soll auch alle anderen Formulare nachziehen - wo geschieht dies? So kommt es mir so vor, als wenn du in der AlignForm alle Zugriffe auf "formen[Form1.Tag]" mit "Self" ersetzen könntest.

/EDIT: roter Kasten?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz