Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt (https://www.delphipraxis.net/153625-wird-bei-einem-unsichtbaren-fenster-nach-oncreate-ausgefuehrt.html)

Viktorii 10. Aug 2010 14:43

Delphi-Version: 2009

Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
Moin.

Ich habe eine Applikation mit einem unsichtbaren Hauptfenster. Es ist in der Regel nur ein TrayIcon zusehen, da das Hauptfenster nur zu Debugzwecken eingeblendet werden kann/soll.

Nun werden beim Start der Software einige Sachen abgeprüft. Dies habe ich in OnCreate meines Hauptfensters erledigt. Nun kann es aber sein, dass ich je nach Ergebnis der Prüfungen ein anderes Fenster (modal) anzeigen muss.

Dies geht in OnCreate aber nicht. Ich erhalte dort eine Zugriffsverletzung. Und das Problem ist, dass OnActivate und OnShow meines Hauptenster nicht ausgeführt werden, weil mein Hauptenster ja unsichtbar ist.

Wo kann ich meine Prüfungen und die Anzeige des anderen Fensters nun realisieren?

Vielen Dank

Win32.API 10. Aug 2010 14:54

AW: Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
Sende eine Windows-Message an dein Hauptformular ala WM_SECOND_FORM_SHOWMODAL.

Viktorii 11. Aug 2010 09:24

AW: Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
Könntest Du des etwas weiter ausführen?

Bummi 11. Aug 2010 12:16

AW: Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
ich kann das Problem nicht nachvollziehen
folgendes funktioniert bei mir Problemlos
Delphi-Quellcode:
program Project3;

uses
  Forms,
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6};

{$R *.res}

begin
  Application.Initialize;
  Application.ShowMainForm:= false;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm5, Form5);
  Application.Run;
end.
Delphi-Quellcode:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ExtCtrls;

type
  TForm5 = class(TForm)
    Button1: TButton;
    TrayIcon1: TTrayIcon;
    PopupMenu1: TPopupMenu;
    jlj1: TMenuItem;
    procedure jlj1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form5: TForm5;

implementation
uses unit6;
{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);
begin
 hide;
end;

procedure TForm5.FormCreate(Sender: TObject);
begin
   With TForm6.Create(self) do Show;
end;

procedure TForm5.jlj1Click(Sender: TObject);
begin
     Show;
end;

end.

Viktorii 11. Aug 2010 12:35

AW: Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
Okay, so funktioniert es bei mir auch.

Ich brauche aber die Form als die Instanzvariable. Deswegen habe diese als globale Variable angelegt. Und da kommt die AV.

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit2;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  From2: TForm2;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  From2.Show;
end;

DeddyH 11. Aug 2010 12:37

AW: Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
Die Instanz wird ja auch nirgends angelegt.

himitsu 11. Aug 2010 12:41

AW: Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
Was für eine AV?

die :glaskugel: rät mal und glaubt an was mit "zugriffsverletzung an Adresse $000000**"

Wie soll auch die Form2 von alleine in diese Variable kommen?
(Die VCL hat dafür eine eigene Variable in der Unit von Form2.

Übergib diese Instanz als Parameter, beim Erstellen und vergiß diese globalen Variablen gleich wieder (diese vordefinierten Globalen sind eh ein schlimmer Designfehler)

Viktorii 11. Aug 2010 13:37

AW: Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
Zitat:

Zitat von himitsu (Beitrag 1041151)
Was für eine AV?

die :glaskugel: rät mal und glaubt an was mit "zugriffsverletzung an Adresse $000000**"

Wie soll auch die Form2 von alleine in diese Variable kommen?
(Die VCL hat dafür eine eigene Variable in der Unit von Form2.

Ja, Du hast recht. Habe mir einen Breakpoint gesetzt und mal nachgeschaut. Meine selbst angelegte Variable ist Nil. Auch die globale Variable in der Unit2 ist zu diesem Zeitpunkt Nil.

Zitat:

Zitat von himitsu (Beitrag 1041151)
Übergib diese Instanz als Parameter, beim Erstellen und vergiß diese globalen Variablen gleich wieder (diese vordefinierten Globalen sind eh ein schlimmer Designfehler)

Leider stehe ich hier etwas auf dem Schlauch :oops: Wie genau meinst Du das?

himitsu 11. Aug 2010 13:42

AW: Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
Schau mal in deine Projektdatei/DPR.

Form2 wird erst nach Form1 erzeugt, also kann sie da noch nicht existieren.

Wenn man etwas mit einem Externen Objekt machen will, dann läßt man es sich am Besten (meistens im Constructor) als Parameter mitgeben, bzw. übergibt es selber (z.B. über einen eigenen Constructor) und verwendet es erst danach dieses Objekt.


Für deinen Fall von
Delphi-Quellcode:
Form2.Show;
... setze stattdessen einfach nur .Visible der Form2 (im OI) auf True und fertig.

Viktorii 11. Aug 2010 14:03

AW: Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
 
Wenn ich visible im OI auf true setzen, wird meine zweite Form ja immer angezeigt.

Was ich aber ja möchte, dass beim Start der Anwendung einige Dinge geprüft werden und abhängig davon das zweite Fenster anzeigt wird, oder auch nicht... Und das mache ich in OnCreate der ersten Form...

Oder habe ich da jetzt was falsch verstanden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr.
Seite 1 von 2  1 2      

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