Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi erst 2.Fenster sichtbar machen, und dann aktion ausführen? (https://www.delphipraxis.net/20518-erst-2-fenster-sichtbar-machen-und-dann-aktion-ausfuehren.html)

Thorben86 19. Apr 2004 13:53


erst 2.Fenster sichtbar machen, und dann aktion ausführen?
 
Hi, ich hab das problem, dass ich aus nem hauptfenster nen 2. Fenster aufrufen will. Das Fenster lasse ich schon beim starten erzeugen, jedoch unsichtbar und nicht enabled.

Das Fenster wird mit
Delphi-Quellcode:
f_strasse.enabled:=false;
f_credits.show;
aufgerufen. Mein Problem ist nun, das ich etwas auslösen lassen will, was erst passieren soll, wenn das fenster geladen ist. Darum hab ich das in den OnActivate Teil reingeschoben, nur weis ich nit, wie ich dem klarmache, das das jetzt aktiviert ist, da der die umstellung auf enabled anscheinend nicht als aktivierung sieht(siehe code unten).

Wenn ich jedoch auf nen button klick(leer), führt der dass aus, wie kann ich dem das anders vermitteln?

Außerdem würd ich gern wissen, wie ich den code unten so abändern könnt, dass ich den timer rauslassen kann, und der trotzdem erst die form sichtbar macht, und dann das unten beschriebene ausführt.

Delphi-Quellcode:
procedure Tf_credits.FormShow(Sender: TObject);
begin
.
.
.
{f_credits.Enabled:=true;
f_credits.Visible:=true;
wenn ich das anstatt dem timer nehme, klappt es theoretisch auch´, nur führt der die aktion erst aus(soll die farbe von nen label faden, was man auch sieht), so dass man das faden sieht, und die Leiste oben, der rest aber erst sichtbar wird, wnn er fertig ist.)

timer2.Enabled:=true;
end;


procedure Tf_credits.Timer2Timer(Sender: TObject);
begin
f_credits.Enabled:=true;
f_credits.Visible:=true;
timer2.Enabled:=false;
end;
:wiejetzt: :gruebel: :wiejetzt: :gruebel: :wiejetzt: :gruebel: :wiejetzt: :gruebel: :wiejetzt:

€dit: Sry für die merkwürdige ausdrucksweise :warn:

Funky-Sepp 19. Apr 2004 13:58

Re: erst 2.Fenster sichtbar machen, und dann aktion ausführe
 
Hi Thorben86

Ich habe das Problem immer so gelöst.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    fPainted : Boolean;
    { Private-Deklarationen }
  public
    procedure Paint; override;
    procedure AfterShow;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.AfterShow;
begin

end;

procedure TForm1.Paint;
begin
  inherited Paint;
  if not fPainted then begin
    fPainted := True;
    AfterShow;
  end;
end;

shmia 19. Apr 2004 14:08

Re: erst 2.Fenster sichtbar machen, und dann aktion ausführe
 
Du musst deinem Formular selbst eine benutzerdefinierte Message schicken:
Delphi-Quellcode:
  const
     UM_INIT = WM_USER + 100;

  TForm1 = class(TForm)
     protected
        procedure UM_INIT(var msg: TMessage); message UM_INIT;
  end;
Im Event OnShow schickst du deinem Formular selbst eine Message:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
   // zuerst eigen Dinge erledigen
   ....
 
   // schicke Message an eigenes Formular
   PostMessage(Self.Handle, UM_PSS_INIT, 0, 0);
end;
Sobald das Formular angezeigt wurde, wird die Message empfangen und verarbeitet:
Delphi-Quellcode:
procedure TForm1.UM_INIT(var msg: TMessage);
begin
   // hier deinen Programmcode einfügen
   // evtl. prüfen, ob die Arbeit schon getan wurde
   if init_done then
      Exit;
   ...
end;

Nicolai1234 19. Apr 2004 14:14

Re: erst 2.Fenster sichtbar machen, und dann aktion ausführe
 
füge doch hier
Code:
f_strasse.enabled:=false;
f_credits.show;
noch
Code:
f_credits.activate;
hinzu!

Thorben86 19. Apr 2004 14:14

Re: erst 2.Fenster sichtbar machen, und dann aktion ausführe
 
Das mit der message kann ich leider nicht machen, weil meine info lehrerin nen fetten tick hat, alles was wir noch nicht im untericht besprochen haben, z.B repeat-until(nach nem 3/4 jahr delphi) dürfen wir nicht benutzen, auch wenn wir es uns selber beigebracht haben, und diese sachen sind "BÖSE" :wall: . Und ich glaub wenn ich der damit ankomme, reißt die mir den kopf ab, weil se keine ahnung hat, was das sein soll :wiejetzt: :stupid: (die weis nicht mal wo die netzwerkumgebung/Ordnerfreigabe ist)

Thorben86 19. Apr 2004 14:21

Re: erst 2.Fenster sichtbar machen, und dann aktion ausführe
 
Das mit dem activate klappt, wenn ichs innen Timer setze, hab zwar eben nach sowas in der liste gesucht, habs aber anscheinend übersehen :wall: . Aber kennt denn keiner noch ne möglichkeit ohne den Timer, was meine Info-Lehrerin nicht umbringen würde(s.o.)

:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 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