Autor Beitrag
DnC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: Mi 07.03.07 17:10 
Gleich vorneweg, damit nichts unklar ist: ich wollte mal probieren, Schnee zu zeichnen und das ohne Formular zu machen...
also hab ich ein ganz normales Projekt gemacht, hab mir das Ganze zusammengeschrieben (mehr oder minder gut)

Wenn ich aber auf den Bildschirm zeichne, ist das vom vorherigen Schritt noch drauf (oh Wunder! :D)... also hab ich den Bildschirm mit :

ReDrawWindow(0,nil,0,RDW_INVALIDATE or RDW_ERASENOW or RDW_ALLCHILDREN);

neu gezeichnet...

Das funktioniert auch (einigermaßen), aber zu langsam... Deshalb wollte ich mir beim Starten den Bildschirm holen und vor dem Malen erstmal alles damit übermalen.

Als ich dann ein Bitmap erzeugen wollte, kam das:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
uses   SysUtils,  Forms,  Graphics,  Windows,  Types,  Dialogs;

var rmb:TBitmap;

{...}

begin

{...}

rmb:=TBitmap.Create;

{...}

end.


[Error] Schnee.dpr(23): Object or class type required

was mit leider völlig schleierhaft ist, denn ich hab Graphics als Unit ja eingebunden...

Ich denk mal, ich hab irgendeinen extrem dummen Fehler gemacht, aber... kein Plan

Des weiteren: kann ich ReDrawWindow effektiver nutzen?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 07.03.07 17:15 
Ist ein bekanntes Problem, da die VCL und die Header vom Betriebssystem beide teilweise gleiche Typen implementieren.

Faustregel: Die Reihenfolge der Uses sollte immer folgende sein:
ausblenden Delphi-Quelltext
1:
Windows, Messages, SysUtils, Classes, Graphics, Controls, ...					


Im Prinzip also genau so, wie es Dir Delphi auch schreibt, wenn Du ein neues Formular anlegst.

P.S.: Vertauscht man Windows.pas und Graphics.pas erhält der Typ Windows.TBitmap eine höhere Priorität als Graphics.TBitmap. Da Windows.TBitmap aber ein Record ist, und das Feld Create nicht besitzt, führt dies zu einem Fehler ... Der Typ mit der höchsten Priorität steht immer zuletzt in der Uses ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
DnC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: Mi 07.03.07 17:21 
aaaah! genial. Danke!

obwohl die Reihenfolge irgendwie komisch ist, das wichtige zuletzt...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 07.03.07 17:26 
user profile iconDnC hat folgendes geschrieben:
aaaah! genial. Danke!

obwohl die Reihenfolge irgendwie komisch ist, das wichtige zuletzt...


Das kommt auf Grund der Behandlung der Gültigkeitsbereiche zustande ...
Jede Unit, die Du einbindest, erzeugt EINEN eigenen Gültigkeitsbereich, in dem weitere Dinge eingebunden werden. Dieser Gültigkeitsbereichsstapel wird nun von innen nach außen durchsucht ... Daher trifft man zuerst auf die Bezeichner, die in den Units definiert werden, die zuletzt eingebunden werden ... Dieses Verhalten KANN man übergehen, indem man den Unit-Namen exakt angibt, für die Unit, aus der ein Bezeichner referenziert wird ... Eben wie in meiner Erklärng gezeigt mit Graphics.TBitmap.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.