Autor |
Beitrag |
Shadow
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 25.06.02 21:10
Hey was geht?
Folgende Frage: Wie kann ich ohne dir Forms.pas in ein Fenster malen?
Ihr wisst schon was ich meine: Nur mit HWND und so...
Dank im Vorraus
Shadow
|
|
Torsten
Beiträge: 160
|
Verfasst: Di 25.06.02 23:15
Moinsen!
Ich habe ein Buch von Andreas Kosch mit folgendem Code.
Selber habe ich das Programm auch schon gebastelt, doch ich gebe Dir mal den Originalcode. Samt Kommentare und Co.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91:
| { **************************************************************** Source File Name : Generic.dpr Typ : Formular-unit Autor : Andreas Kosch Erstellt am : 14.05.96 Compiler : Delphi 3.0 Betriebssystem : Windows 95 Beschreibung : Generisches Win32-API-Programm (hat Borland bei Delphi 97 anscheinend vergessen) Hart - aber klein. GENERIC.EXE belegt nur 28 kByte auf der Festplatte - und das ohne Package-DLLs !!! Revisionen : 31.03.97 Ivory 07.06.97 Delphi 3.0 C/S **************************************************************** }
program Generic;
{$R GENRES.RES}
uses SysUtils, Windows, Messages;
const szClassName = 'DelGen'; // Name der Fensterklasse szTitle = 'Das Grundgerüst'; // Fenstertitel
(* WindowProc ist die Fensterprozedur des generischen Fensters. Es wird nur eine einzige Windows-Botschaft ausgewertet, um das Programm über das Systemmenü schließen zu können. *)
function WindowProc(Window: HWnd; Message : UINT; wParam: WPARAM; LParam: LPARAM): Longint; stdcall; begin Result := 0; case Message of wm_Destroy: begin PostQuitMessage(0); // Programm beenden Exit; end; end; Result := DefWindowProc(Window, Message, WParam, LParam); end;
(* Die Procedure WinMain registriert die Fensterklasse und erzeugt ein sichtbares Hauptfenster für das Programm. *)
procedure WinMain; var aWindow : HWnd; WindowClass : TWndClassEx; Message : TMsg; begin // InitApplication WindowClass.cbSize := SizeOf(TWndClassEx); WindowClass.Style := CS_HRedraw OR CS_VRedraw; WindowClass.hInstance := HInstance; WindowClass.lpfnWndProc := @WindowProc; WindowClass.cbClsExtra := 0; WindowClass.cbWndExtra := 0; WindowClass.hIcon := LoadIcon(hInstance, PChar('BIG')); WindowClass.hIconSm := LoadImage(hInstance, PChar('SMALL'), IMAGE_ICON, 16, 16, 0); WindowClass.hCursor := LoadCursor(0, idc_Arrow); WindowClass.hbrBackground := COLOR_WINDOW + 1; WindowClass.lpszMenuName := nil; WindowClass.lpszClassName := szClassName; // Rückgabewert 0 -> Fehlschlag if RegisterClassEx(WindowClass) = 0 then Halt(1); // InitInstance aWindow := CreateWindow(szClassName, szTitle, WS_OverlappedWindow, CW_UseDefault, 0, CW_UseDefault, 0, 0, 0, HInstance, nil); // aWindow = 0 -> Fehlschlag if aWindow = 0 then Halt(2); // Aha - das Fensterhandle ist gültig -> zeigt dich ! ShowWindow(aWindow, SW_SHOW); UpdateWindow(aWindow); // Message-Loop wartet auf das Programmende while GetMessage(Message, 0, 0, 0) do begin TranslateMessage(Message); DispatchMessage(Message); end; Halt(Message.wParam); end;
begin WinMain; // Ein sehr kurzes Hauptprogramm end. |
Grüße
Torsten
|
|
Torsten
Beiträge: 160
|
Verfasst: Di 25.06.02 23:18
Ach ja, die Zeile
{$R GENRES.RES}
kannst Du auskommentieren. In der Datei befinden sich lediglich zwei Icons. Werden nicht wirklich benötigt
Grüße
Torsten
|
|
Shadow
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 26.06.02 10:06
Titel: NEEEEIN
Das kann ich doch alles. Ich meine Wie kann ich Canvas und Bitblt und soweiter benutzen? Zumbeispiel einen Kreis in diese Form malen???
|
|
Torsten
Beiträge: 160
|
Verfasst: Mi 26.06.02 10:18
Moinsen!
Sorry, da habe ich Dich wohl falsch verstanden.
Da muss ich mich selber erst einmal erkundigen.
Grüße
Torsten
|
|
mortus
Beiträge: 27
|
Verfasst: Mi 26.06.02 12:10
Tach
du musst dir das handle des device context holen:
Quelltext 1: 2: 3: 4: 5: 6: 7:
| var dc:HDC; begin dc:=GetDC(handle); ellipse(dc,10,10,100,100); //bsp: bitblt(dc,0,0,windowwidth,windowheight,dctmp,0,0,srccopy); ReleaseDC(handle,dc); end; |
|
|
Shadow
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 26.06.02 19:20
Titel: Danke
Yo Danke Man.
Hätte ich doch Selber drauf kommen müssen,
Aber wie ändere ich jetzt die Stift farbe und so??
|
|
mortus
Beiträge: 27
|
Verfasst: Do 27.06.02 14:04
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var pen:HPEN; brush:HBRUSH; begin pen:=CreatePen(PS_SOLID,1,$FF0000); brush:=CreateSolidBrush($0000FF); SelectObject(dc,brush); {oder zb SetBKMode(dc,TRANSPARENT) wenn der kreis nicht gefuellt werden soll} SelectObject(dc,pen); Ellipse(dc,10,10,100,100); DeleteObject(pen); DeleteObject(brush); end; |
man sollte auch die handle der alten pens, brushes speichern.
schau dir dazu am besten mal die hilfe (Platform SDK) an.
|
|
|