Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekte erzeugen in "normaler" Unit (https://www.delphipraxis.net/103862-objekte-erzeugen-normaler-unit.html)

taaktaak 22. Nov 2007 21:46


Objekte erzeugen in "normaler" Unit
 
Moin, Moin Zusammen.

Nach einigen Ratschlägen aus diesem Forum bin ich jetzt dabei eine sehr große Form-Unit "abzuspecken". Die Verkleinerung der Form-Unit erfolgt durch Auslagerung sinnvoller Codeblöcke in "normale" Units. Das ist zwar jetzt im Nachhinein recht umständlich, aber es funktioniert. Sogar die Übersicht wird deutlich besser. So weit so gut!

Nun aber zu einem (für mich) seltsamen Verhalten von Delphi.

In dieser "normalen" Unit kann ich ohne Probleme innerhalb einer Prozedur temporär mit Create eine Instanz einer Stringliste bilden, diese benutzen und abschließend wieder freigeben.

Wenn ich aber in dieser "normalen" Unit temporär eine Instanz einer BitMap bilden möchte, dann bekomme ich schon beim compilieren die Fehlermeldung: "Objekt oder Klassentyp" erforderlich! Die Delphi-Hilfe zu dieser Fehlermeldung sagt mir leider gar nix :cry:

Frage 1 : Warum funktioniert es mit der Stringliste, aber nicht mit der BitMap?
Frage 2 : Was muss ich tun, um eine BitMap zu erzeugen?

Gruß
Ralph

mkinzler 22. Nov 2007 21:49

Re: Objekte erzeugen in "normaler" Unit
 
Wie erzeugst du das BitMap?

taaktaak 22. Nov 2007 21:55

Re: Objekte erzeugen in "normaler" Unit
 
na, ganz normal mit

Delphi-Quellcode:
procedure tralala;
var BM : TBitMap;
begin
  BM:=TBitMap.Create; // und da wird schon gemeckert
  ..
  ..
end;
Gruß
Ralph

mkinzler 22. Nov 2007 21:57

Re: Objekte erzeugen in "normaler" Unit
 
Was für ein Fehler?

taaktaak 22. Nov 2007 21:58

Re: Objekte erzeugen in "normaler" Unit
 
Na, die oben genannte Compiler-Fehlermeldung "Objekt oder Klassentyp erforderlich"

GuenterS 22. Nov 2007 21:59

Re: Objekte erzeugen in "normaler" Unit
 
[Glaskugel]
unit Graphics eingebunden?
[/GlasKugel]

mkinzler 22. Nov 2007 22:01

Re: Objekte erzeugen in "normaler" Unit
 
Verlagere mal den Code in eine Klasse.

Hawkeye219 22. Nov 2007 22:02

Re: Objekte erzeugen in "normaler" Unit
 
Hallo taaktaak,

lies dir einmal diesen Thread durch.

Gruß Hawkeye

taaktaak 22. Nov 2007 22:06

Re: Objekte erzeugen in "normaler" Unit
 
Jooooooooooooo, das war der Fehler!
Graphics war VOR Windows eingebunden, also die falsche Reihenfolge!!!!!!!!
Vielen Dank an alle!
Schönen Abend noch :hello:
Gruß Ralph

Popov 22. Nov 2007 22:11

Re: Objekte erzeugen in "normaler" Unit
 
Versuche es mal so:

Delphi-Quellcode:
  BM := Graphics.TBitMap.Create;

taaktaak 22. Nov 2007 22:15

Re: Objekte erzeugen in "normaler" Unit
 
Hallo Popov,
schon alles "velmi dobre" die Units"Windows" und "Graphics" waren in der falschen Reihenfolge eingebunden - funktioniert jetzt! Danke!
Gruß
Ralph

// edit:

Habe deine Idee noch mal geprüft: Bei falscher Reihenfolge hilft das auch nicht. Es kommt dann die Compilerfehlermeldung "Inkompatible Typen: 'tagBITMAP'' und 'TBITMAP'". Ändere ich die Reihenfolge der Uniteinbindung (wie schon oben beschrieben) dann funktioniert deine Lösung natürlich auch!

Popov 22. Nov 2007 22:29

Re: Objekte erzeugen in "normaler" Unit
 
Hier ist die einfachste Möglichkeit die Unit Reihenfolge zu wechseln. Sollte es mal aber nicht möglich sein, kann man wie gezeigt auch den Namen der Unit davorschreiben. Und gelegentlich kommt es vor, daß es auch mal keine richtige Reihenfolge gibt. Passiert selten, passiert aber schon mal.

lizardking 22. Nov 2007 22:48

Re: Objekte erzeugen in "normaler" Unit
 
Zitat:

Zitat von taaktaak
Habe deine Idee noch mal geprüft: Bei falscher Reihenfolge hilft das auch nicht. Es kommt dann die Compilerfehlermeldung "Inkompatible Typen: 'tagBITMAP'' und 'TBITMAP'".

Es muss dann zusaetzlich auch die Deklaration geaendert werden, also:

Code:
var
  BM: Graphics.TBitMap;

taaktaak 23. Nov 2007 13:18

Re: Objekte erzeugen in "normaler" Unit
 
Moin, Moin!
Um die Sache zum Abschluß zu bringen: Lizardking und Popov haben natürlich absolut Recht. Mir war in dem Moment wo ich den PC ausgeschaltet habe eben dieses auch schon in den Sinn gekommen - selbstverständlich muss dann auch in der Variablendeklaration auf Graphics verwiesen werden.
:oops: War wohl schon zu spät gestern Abend!
Gruß Ralph


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz