Entwickler-Ecke
Windows API - Delphi 2005 und CreateEllipticRgn
@strider - So 20.12.09 11:04
Titel: Delphi 2005 und CreateEllipticRgn
Hallo,
ich bin vor kurzem von Delphi 7 auf Delphi 2005 Pro unter Windows 7 umgestiegen (ich habe zwar auch Delphi 2009 aber noch keine Lust, alles auf Unicode umzustellen). Alles klappt wunderbar, nur CreateEllipticRgn bleibt ohne Effekt (d. h. rechteckig).
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TDlgSplash.FormCreate(Sender: TObject);
var NewRegion: Hrgn;
begin NewRegion := CreateEllipticRgn(1, 1, 500, 500); SetWindowRgn(Handle, NewRegion, True); end; |
:?: :?: :?:
P. S.: Beim alten Kompilat des Programms ist alles 'rund'.
Moderiert von
Christian S.: Quote- durch Delphi-Tags ersetzt
BenBE - So 20.12.09 13:11
Kannst Du mal schauen, was Handle für einen Wert hat? Dann mal die Deklarationen der beteiligten Funktionen vergleichen?
@strider - So 20.12.09 15:06
Hallo,
mir ist nicht klar, worauf Du hinaus willst. Welche beteiligten Funktionen meinst Du?
Newregion ist auf jeden Fall <> dem Ergebnis von SetWindowregion, beide sind > 0.
BenBE - So 20.12.09 16:42
Ich meine insbesondere, ob das Handle für SetWindowRegion gültig ist.
Bzgl. den Deklarationen meine ich, ob alle API-Funktionen, die du nutzt, noch die gleiche Deklaration haben, oder ob sich da was geändert hat in den Borland-Headern.
Gibt GetLastError irgendeinen Fehler an?
@strider - So 20.12.09 16:57
Das Handle von SetWindowRgn ist gültig (> 0), GetLastError liefert 0, d. h. keinen Fehler.
Da ich die alte Version von Delphi nicht mehr habe, kann ich nicht nachsehen, ob sich die Deklaration geändert hat (kann ich mir aber eigentlich auch nicht vorstellen).
BenBE - So 20.12.09 17:08
Hmmm, schau mal bitte, ob sich etwas ändert, wenn du den Source in FormActivate ausführen lässt. Bzw. OnPaint.
Die VCL gibt auch gern mal Fenster-Handle wieder frei, wenn sie der Meinung ist, die werden grad nicht gebraucht. Das ist insbesondere beim Initialisieren manchmal recht nervig.
@strider - So 20.12.09 20:35
| Zitat: |
wenn du den Source in FormActivate ausführen lässt
|
Hallo BenBE,
das war der entscheidende Hinweis - in FormActivate klappt es.
Aber warum es in Vorversionen bei FormCreate fubktioniert hat und jetzt in Delphi 2005 nicht mehr ....
Danke für Deine Hilfe!
BenBE - So 20.12.09 20:42
Borland Inprise CodeGear Embarcadero frickelt schon seit Jahren an der VCL rum. Und grad wenn man bestimmte Dinge mit dem Fenster-Handle anstellen will fliegt man regelmäßig auf die Fresse ^^
Es gibt noch eine alternative Möglichkeit, was man tun kann, die darin besteht, dass man die Routinen zum Erzeugen des Fensters (IIRC CreateWindowParams usw.) überschreibt. Das geht dann aber nicht mehr so ohne Weiteres in der IDE ...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!