Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Handel-Zeichnen (https://www.delphipraxis.net/1736-handel-zeichnen.html)

theomega 20. Dez 2002 10:45


Handel-Zeichnen
 
Hallo
warum geht dieser Code nicht?
Code:
procedure TForm1.Button1Click(Sender: TObject);
var hd:HDC;
Brush: HBRUSH;
Pen: HPEN;
hd2:HDC;
begin
Brush := CreateSolidBrush(RGB(255,0,0));
SelectObject(hd, Brush);
Pen := CreatePen(PS_SOLID, 3, RGB(75,0,255));
SelectObject(hd, Pen);
Rectangle(hd, 10, 10, 375, 100);


hd2 := getdc(0);
BitBlt(hd2,20,20,50,50,hd,0,0,SRCCOPY );
end;
es sollte eingetlich in der linken oberen ecke ein Rechteck erscheinen. Das ganze ist als Beispiel gedacht, deshalb auch die Aktion mit dem BitBlt!

Danke

TO

Christian Seehase 20. Dez 2002 11:11

Moin The Omega,

die Variable hd wird nicht initialisiert, und ist somit kein DC Handle, also geht das SelectObject wohl auch daneben.

theomega 20. Dez 2002 11:14

Ja, genau da liegt mein Problem: ICh will das Objekt nur temporär haben, also nicht sichbar. Dann hilft mir "getdc" auch nicht weiter!

d3g 20. Dez 2002 12:09

Hi theomega,

was du dafür brauchst, sind CreateDC() und DeleteDC().

MfG,
d3g

theomega 20. Dez 2002 13:01

was ist den dann daran falsch?
Code:
procedure TForm1.Button1Click(Sender: TObject);
var hd:HDC;
Brush: HBRUSH;
Pen: HPEN;
hd2:HDC;
begin
hd := createdc('Display',nil,nil,nil);
Brush := CreateSolidBrush(RGB(255,0,0));
SelectObject(hd, Brush);
Pen := CreatePen(PS_SOLID, 3, RGB(75,0,255));
SelectObject(hd, Pen);
ellipse(hd,0,0,50,50);

hd2 := getdc(form1.Handle);
BitBlt(hd2,200,200,50,50,hd,0,0,SRCCOPY );

DeleteDC(hd);
end;
warum entsteht aber ein zweiter Kreis in der rechten oberen Ecke meines Bildschirms? Eignetlich müßte ja bloß einer auf meinem Form sein!

Luckie 20. Dez 2002 13:16

Nö. Mit 'Display' holst du dir das Handle vom Desktop. Soll der Kreis nur auf deiner Form landen, mußt du dir mit GetDC und dem Fenster-Handle den DC holen und mit ReleaseDC wieder freigeben.

theomega 20. Dez 2002 14:36

Ich brauche aber eine temporäres Object, also eins, das nicht angeziegt wird!

TReg 19. Feb 2006 15:29

Re: Handel-Zeichnen
 
CreateCompatibleDC wäre Temporär.....

Flocke 20. Feb 2006 07:52

Re: Handel-Zeichnen
 
Außerdem solltest du die Geister, die du rufst, auch wieder gehen lassen:

CreateSolidBrush -> DeleteObject
CreatePen -> DeleteObject
GetDC -> ReleaseDC


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