Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Form.Create


ruewue - Mi 28.03.12 11:07
Titel: Form.Create
Hallo zusammen,

ich falle langsam vom Glauben ab oder seh den Wald vor lauter Bäumen nicht. Ich haben eine Anwendung die mehrere Formen aufruft. Alle nach dem gleichen Chema. Bei einer Form nun reagiert aber alles anders.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function ShowFormPrintMaterial(sEnvironment : WideString): Integer; stdcall;
var
  Printer : TfrmPrinting;

begin
  try
    Printer      := TfrmPrinting.Create(nil);
    Printer.gsEnvironment := sEnvironment;
    Printer.Show;
    
  except
    on E:Exception do begin
      MessageDlg(E.Message, mtWarning, [mbOk],0);
    end;
  end;
  Result := 0;
end;


Hier wird die Form gleich mit dem CREATE geöffnet. Ich bekomme also nicht meinen Parameter gesetzt.

Wo liegt nun mein Fehler? Habe ich in der Form was falsch gemacht? Da jeder Aufruf der anderen Formen genauso aus sieht und da der Parameter übergeben wird, verstehe ich dies nicht so recht.

Ich danke euch schon mal für eine Hinweis.

Gruß
Rüdiger

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Lemmy - Mi 28.03.12 11:18

Hi Rüdiger,

zuerst mal gehört das .Create() vor die Try..Except.

Und hast Du schon mal den Debugger bemüht? Da müsste doch schnell zu finden sein, weshalb das Form direkt nach dem Create angezeigt wird. Und selbst wenn die Aufrufe identisch sind, es gibt ne Menge an Einstellungen beim jeweiligen Form, die das Anzeigen steuern, d.h. ohne Code von frmPrinter kann dir niemand außer dir helfen ;-)

Grüße


Blup - Mi 28.03.12 11:37

user profile iconLemmy hat folgendes geschrieben Zum zitierten Posting springen:
zuerst mal gehört das .Create() vor die Try..Except.

Das ist kein Recourcen-Schutzblock (der fehlt allerdings auch) und ok so.

Ich würde das als Hotfix versuchen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  TMyfrmPrinting = class(TfrmPrinting)
    constructor Create(AOwner: TComponent; const AEnvironment: string);
  end;

constructor TMyfrmPrinting.Create(AOwner: TComponent; const AEnvironment: string);
begin
  gsEnvironment := AEnvironment;
  inherited;
end;


vagtler - Mi 28.03.12 12:04

user profile iconBlup hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
constructor TMyfrmPrinting.Create(AOwner: TComponent; const AEnvironment: string);
begin
  gsEnvironment := AEnvironment;
  inherited;
end;

[Kleinkariert]Ohne die Angabe der Signatur des aufzurufenden Konstruktors im inherited dürfte das noch nicht einmal kompilieren... :mrgreen:[/Kleinkariert]


Delphi-Quelltext
1:
2:
3:
4:
5:
constructor TMyfrmPrinting.Create(AOwner: TComponent; const AEnvironment: string);
begin
  gsEnvironment := AEnvironment;
  inherited Create(AOwner);
end;


Lemmy - Mi 28.03.12 12:17

user profile iconBlup hat folgendes geschrieben Zum zitierten Posting springen:

Das ist kein Recourcen-Schutzblock (der fehlt allerdings auch) und ok so.

Hast Recht, das habe ich übersehen...

user profile iconBlup hat folgendes geschrieben Zum zitierten Posting springen:

Ich würde das als Hotfix versuchen:


vielleicht bin ich schon zu alt - in Zeiten wo überall "Beta" drauf steht ist das vielleicht auch üblich. Aber bei so einem Fehler nicht nachzuschauen WARUM das so ist und statt dessen etwas Farbe über die Stelle zu pinseln halte ich für sträflich....


Grüße


ruewue - Mi 28.03.12 12:41

Danke Lemmy,

stimmt, gehört davor. HAbe den Rest jetzt auch gelöst. Läuft wie alle anderen.


Ganz herzlichen Dank an alle!


vagtler - Mi 28.03.12 13:09

user profile iconruewue hat folgendes geschrieben Zum zitierten Posting springen:
[...] stimmt, gehört davor. [...]

Nö. Zumindest nicht so. Aber das wurde ja schon gesagt.

Zitat:
[...] HAbe den Rest jetzt auch gelöst. Läuft wie alle anderen. [...]

Und was war es jetzt?