Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism Fehler bei OpenDialog - Delphi 8 (https://www.delphipraxis.net/27805-fehler-bei-opendialog-delphi-8-a.html)

Steffen73 15. Aug 2004 23:34


Fehler bei OpenDialog - Delphi 8
 
Hallo,

ich arbeite seit einer Woche mit Delphi 8. Nun bin ich auf ein Problem mit der OpenDialog-Komponente gestoßen, dass ich einfach nicht lösen kann:

Wenn ich "opendialog1.execute" aufrufe, erhalte ich immer die Fehlermeldung: "Invalid threading model (STAThreadAttribute is required)". - Kann mir jemand sagen, was das heißt und wie ich den Fehler beheben kann?

Ich habe die diversen Eigenschaften von "opendialog1" schon mit Werten belegt und diese auch wieder gelöscht - der Fehler bleibt, der Dialog geht nicht auf...

Danke vorab
Steffen :wall:

nailor 16. Aug 2004 00:22

Re: Fehler bei OpenDialog - Delphi 8
 
hast du zufällig die unnütz scheinende, unscheinbare zeile aus dem code gelöscht, die so was ähnliches wie "STAThreadAttribute" besagt?

Phoenix 16. Aug 2004 06:12

Re: Fehler bei OpenDialog - Delphi 8
 
1.) Ich glaube, Du bist im falschen Forum. Delphi.NET wäre hier glaube ich passender :zwinker:

2.) Ich kann das nicht nachvollziehen.

Versuchst Du möglicherweise, in einer WinForms Anwendung auf die VCL Controls zuzugreifen? Wenn Du eine WinForms Anwendung hast, würde ich direkt den .NET eigenen FileSaveDialog nehmen, und nicht dem Umweg über die VCL machen.

Robert_G 16. Aug 2004 08:38

Re: Fehler bei OpenDialog - Delphi 8
 
Du solltest unbedingt den hier:
Delphi-Quellcode:
[STAThread]
vor den Aufruf deiner anwendung (also im Project file) stehen haben. ;)
Ohne diese kleine Zeile wirst du fast kein COM Objekt öffnen können. (Der OpenFileDialog ist IMHO nichts weiter als eine Kapselung eines COM Objektes ;) )

Zitat:

Zitat von Phoenix
2.) Ich kann das nicht nachvollziehen.

Probiere es aus, auch du wirst die Meldung zu Gesicht bekommen. :mrgreen:

Phoenix 16. Aug 2004 08:40

Re: Fehler bei OpenDialog - Delphi 8
 
Zitat:

Zitat von Robert_G
Zitat:

Zitat von Phoenix
2.) Ich kann das nicht nachvollziehen.

Probiere es aus, auch du wirst die Meldung zu Gesicht bekommen. :mrgreen:

Eben nicht. ;-) Ich habe sowohl eine VCL als auch eine WinForms Anwendung als Testprojekte erzeugt und dort jeweils den passenden Dialog draufgezogen und auf ButtonClick geöffnet. Bei mir ging das Einwandfrei und ohne murren und knurren.

MasterC 16. Aug 2004 08:52

Re: Fehler bei OpenDialog - Delphi 8
 
Öhm ich kenne mich mit Delphi 8 nicht aus, aber bei den andere Delphi Versionen ist das vergessen der If Abfrage beim Open/ Save Dialog ein beliebter Fehler. :)

Der Fehler sollte nicht schon bei Execute kommen, sondern erst wenn man den Dialog wieder schließt. Kannst du ja trotzdem mal versuchen:

Delphi-Quellcode:
If OpenDialog1.Execute then Memo1.Lines.LoadFromFile(OpenDialog1.FileName

OregonGhost 16. Aug 2004 09:03

Re: Fehler bei OpenDialog - Delphi 8
 
Robert_G hat natürlich recht. Die Meldung "Invalid threading model (STAThreadAttribute is required)" besagt eindeutig, dass [STAThread] nicht gesetzt ist. Entweder weil diese Zeile gelöscht wurde, oder weil sie in [MTAThread] umgeändert wurde. Falls sie aus Versehen gelöscht wurde, erstelle doch ein neues Projekt, um die Stelle zu finden, wo es normalerweise steht. In C#-Anwendungen beispielsweise steht es immer vor der Main-Funktion (aber in Delphi gibt's ja keine Main-Funktion, und ich kenne mich mit D8 sowieso nicht aus).

@Phoenix: Hast du die Zeile [STAThread] mal in [MTAThread] umgewandelt? Die Meldung hat auch nichts mit Delphi zu tun, die kommt mit jeder .net-Anwendung, wenn ein COM-Aufruf [STAThread] fordert, aber man [MTAThread] hat.

Steffen73 16. Aug 2004 10:39

Re: Fehler bei OpenDialog - Delphi 8
 
Hey Leute,

vielen Dank!!! :hello: Das "[STAThread]" war die Lösung! Das Ganze habe ich so eingebaut:

--

uses
Forms,
MainFormUnit in 'MainFormUnit.pas' {MainForm},
Steffen8 in '..\..\DelphiUnits\Steffen8.pas',
RCPUnit in 'RCPUnit.pas';

{$R *.res}

[STAThread]

begin
Application.Initialize;
Application.Title := 'RCP';
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

--

Und es klappt! - Übrigens hatte ich die Zeile "[STAThread]" nicht gelöscht, die wird bei mir einfach nicht beim Erstellen einer neuen Anwendung eingetragen.

Viele Grüße
Steffen :spin2:


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