AGB  ·  Datenschutz  ·  Impressum  







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

Delphi XE7 ignoriert Form AfterCreate

Ein Thema von enricoffo · begonnen am 31. Jan 2018 · letzter Beitrag vom 31. Jan 2018
Antwort Antwort
enricoffo

Registriert seit: 24. Dez 2005
Ort: Keine Ergebnisse gefunden
38 Beiträge
 
Delphi 7 Professional
 
#1

Delphi XE7 ignoriert Form AfterCreate

  Alt 31. Jan 2018, 17:59
Hallo,

ich nutze diesen Tipp seit Delphi5:
http://www.swissdelphicenter.com/de/...de.php?id=1276

Nun sind wir auf Delphi XE7 umgestiegen und ich habe folgendes Problem: Delphi führt zwar noch AfterShow aus, aber AfterCreate wird nie ausgelöst...
Kann das jemand nachvollziehen oder ist das bekannt? Oder besser, warum ist das so?
Vielen Dank für Eure Hilfe.
Computer machen keine Fehler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Delphi XE7 ignoriert Form AfterCreate

  Alt 31. Jan 2018, 18:15
Die besser Frage ist: Was willst du damit erreichen? Vor allem beim AfterCreat erschließt sich mit nicht der Nutzen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi XE7 ignoriert Form AfterCreate

  Alt 31. Jan 2018, 19:28
Hier im Forum suchenOldCreateOrder / Bei Google suchenTForm OldCreateOrder

In den Jahren nach D5 wurde die Reihenfolge des OnCreate/OnDestroy geändert, im Verhältnis zu Laden/Freigeben der DFM/Komponenten.
Also im Prinzip wüsste ich nicht, wozu man jetzt noch ein AfterCreate braucht ... ich vermute das war damals ein Bugfix, damit OnCreate aka AfterCreate nach dem DFM-Laden kommt.
Wenn ihr die Form einfach upgegradet habt, dann solltet ihr noch das Property umstellen (False).


Vom Prinzip her sollte es aber noch funktionieren, ABER du wirst es nicht glauben.
PostMessage hat ein Result, dass man auswerden kann, ob die Message wirklich erfolgreich gesendet wurde.

PS: Wenn nochmal kurz das Windows-Handle freigegeben würde, dann werden auch alle Messages gelöscht.
Du könntest TForm.DestroyWindowHandle und TForm.CreateWindowHandle überschreiben und schauen ob sowas passiert.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (31. Jan 2018 um 19:30 Uhr)
  Mit Zitat antworten Zitat
OLDIE1950

Registriert seit: 2. Jan 2018
22 Beiträge
 
#4

AW: Delphi XE7 ignoriert Form AfterCreate

  Alt 31. Jan 2018, 20:46
Du hast wahrscheinlich vergessen, die Proceduren im Objektinspektor einzutragen.
Das *.dfm-File muss dann so aussehen:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 201
ClientWidth = 447
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
end

Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

const
  WM_AFTER_SHOW = WM_USER + 300; // custom message
  WM_AFTER_CREATE = WM_USER + 301; // custom message

type
  TForm1 = class(TForm)
    // OnShow event
    procedure FormShow(Sender: TObject);
    // OnCreate event
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure WmAfterShow(var Msg: TMessage); message WM_AFTER_SHOW;
    procedure WmAfterCreate(var Msg: TMessage); message WM_AFTER_CREATE;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WmAfterShow(var Msg: TMessage);
begin
  ShowMessage('WM_AFTER_SHOW received!');
end;

procedure TForm1.WmAfterCreate(var Msg: TMessage);
begin
  ShowMessage('WM_AFTER_CREATE received!');
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  // Post the custom message WM_AFTER_SHOW to our form
  PostMessage(Self.Handle, WM_AFTER_SHOW, 0, 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Post the custom message WM_AFTER_CREATE to our form
  PostMessage(Self.Handle, WM_AFTER_CREATE, 0, 0);
end;

end.

Geändert von OLDIE1950 (31. Jan 2018 um 21:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi XE7 ignoriert Form AfterCreate

  Alt 31. Jan 2018, 20:48
Dann schau mal nach AfterCreation.
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
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi XE7 ignoriert Form AfterCreate

  Alt 31. Jan 2018, 20:49
Das ist ja auch selbstgebaut, sie Link in #1


Aber OnShow ist doch schon immer ein "After" ?
Das wird aufgerufen, nachdem die Form angezeigt wurde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Delphi XE7 ignoriert Form AfterCreate

  Alt 31. Jan 2018, 21:23
Aber OnShow ist doch schon immer ein "After" ?
Nein. Es wird (direkt) vor dem ShowWindow() Aufruf aufgerufen. Visible ist zwar bereits True, aber IsWindowVisible liefert noch False und Showing ist ebenfalls noch False.

Anstatt dieses AfterCreate könnte man doch auch einfach die Methode AfterConstruction überschreiben und nach dem "inherited AfterConstruction;", dass das OnFormCreate auslöst, den Code schreiben.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Delphi XE7 ignoriert Form AfterCreate

  Alt 31. Jan 2018, 21:37
Thx, AfterConstruction hatte ich auch gemeint, aber AfterCreation geschrieben. Ich werde wirklich alt.
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
Antwort Antwort


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:22 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