Autor Beitrag
TimonWorld
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 397



BeitragVerfasst: So 03.07.05 13:33 
Hallo!

Ich habe im FAQ (Suche in: Delphi-Library FLIMMERFREI+CANVAS) einige Alternativen zu Canvas gefunden.

Unteranderem diese hier:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
    dc,dctmp:HDC;
    bitmap:HBITMAP;
begin
     dc:=GetDC(windowhandle);
     bitmap:=CreateCompatibleBitmap(dc,windowwidth,windowheight);
     dctmp:=CreateCompatibleDC(dc);
     SelectObject(dctmp,bitmap);
     //-->Alles ZEICHNEN
     zeichnen(dctmp);
     //<--Alles ZEICHNEN
     bitblt(dc,0,0,windowwidth,windowheight,dctmp,0,0,srccopy);
     DeleteDC(dctmp);
     DeleteObject(bitmap);
     ReleaseDC(windowhandle,dc);
end;


Also, windowwidth und -height habe ich einfach durch ClientWidth, ClientHight getauscht, aber eine Fehlermeldung kommt trotzdem noch: Underfinierter Bezeichner: 'zeichnen' Wie kann ich denn bitteschön auf ein HDC bzw. HBITMAP zeichen?
Ist diese Methode auch geeignet, um Animationen etc. darzustellen?
Und kann man mit dieser Funktion auch auf Bitmaps zu zeichnen (nicht nur das Formular)?

PS.: Es ist zu beachten, dass ich Delphi 3 benutze :wink:

Gruß,
Timon.
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: Mo 04.07.05 07:28 
Werte vom Typ HDC und und HBITMAP sind sog. GDI-Objekte, d.h. sind Handles für Windows-Speicherstellen, an denen die GDI Informationen über deine Zeichenfläche Speichert.

Um nun auf solch eine Zeichenfläche zu Zeichnen gibt es zwei Möglichkeiten:

1. (verwerflich für API-Programmierer) DC an ein TCanvas.Handle zuweisen und die Funktionen dieses Canvas benutzten. Ist einfach, geht einfach, ist einfach lahm.

2. (bevorzugt) Nutzung der GDI-API-Funktionen direkt. Diese werden in der Windows.pas deklariert und heißen (meist) gleich den Canvas-Funktionen. Mit Windows.Rectange(DC, Rect) (Achtung: Explizite Unit-Referenz notwendig) kannst Du z.B. ein Rechteck zeichnen. Weitere Funktionen findest Du in der Win32 API Reference (win32s.hlp) dokumentiert (Vorwarnung: C-Style; in Delphi sind die Funktionen aber bereits richtig deklariert).

HTH.

_________________
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.