AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt
Thema durchsuchen
Ansicht
Themen-Optionen

Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt

Ein Thema von Viktorii · begonnen am 10. Aug 2010 · letzter Beitrag vom 11. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2      
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

Was wird bei einem unsichtbaren Fenster nach OnCreate ausgeführt

  Alt 10. Aug 2010, 14:43
Delphi-Version: 2009
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
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#2

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

  Alt 10. Aug 2010, 14:54
Sende eine Windows-Message an dein Hauptformular ala WM_SECOND_FORM_SHOWMODAL.
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#3

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

  Alt 11. Aug 2010, 09:24
Könntest Du des etwas weiter ausführen?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

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

  Alt 11. Aug 2010, 12:16
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#5

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

  Alt 11. Aug 2010, 12:35
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 11. Aug 2010, 12:37
Die Instanz wird ja auch nirgends angelegt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 11. Aug 2010, 12:41
Was für eine AV?

die 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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#8

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

  Alt 11. Aug 2010, 13:37
Was für eine AV?

die 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.

Ü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 Wie genau meinst Du das?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 11. Aug 2010, 13:42
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 Form2.Show; ... setze stattdessen einfach nur .Visible der Form2 (im OI) auf True und fertig.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#10

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

  Alt 11. Aug 2010, 14:03
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:03 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