Autor |
Beitrag |
SixpointedStarsoft
      
Beiträge: 22
Erhaltene Danke: 1
|
Verfasst: Sa 09.07.11 09:30
Hallo Zusammen
ich möchte meine minimized Window selber zeichnen oder darauf zeichnen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| WM_PAINT: begin if (IsIconic(FSkinedForm.Handle)) then begin PaintIconicSkinOfWindow; message.Result:= 0; useOld:= falsE; end; end; |
bei PaintIconicSkinOfWindow steht folgendes
Delphi-Quelltext 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:
| procedure PaintIconicSkinOfWindow; var DC: HDC; ps: TPaintStruct; Canvas: TCanvas; r: TRect;
begin try DC := BeginPaint(FSkinedForm.Handle, ps); Canvas := TCanvas.Create; Canvas.Handle := DC; r.Left := 0; r.Top := 0; r.Right := 40; r.Bottom := 10; Canvas.Brush.Color:= clREd; Canvas.Brush.Style:= graphics.bsSolid; Canvas.FillRect(r); finally Canvas.Free; EndPaint(FSkinedForm.Handle, ps); end; end; |
diese Version zeichnet gar nichts. Wenn ich es mit GetDCEx mache kommt eine Fehlermeldung: Leinwand/Bild erlaubt kein Zeichnen.
Hat jemand eine Idee wie es gehen könnte?
liebe Grüsse
Christoph
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 09.07.11 12:40
Minimiert = unsichtbar. Sprich das gezeichnete sieht eh keiner.
Oder meinst du das kleine Fenster, was man manchmal unten in der Taskleiste rumschwirren hat, was nur aus ner Titelleiste besteht?
_________________ 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.
|
|
SixpointedStarsoft 
      
Beiträge: 22
Erhaltene Danke: 1
|
Verfasst: Sa 09.07.11 12:44
Ja, genau das Fenster, das nur aus Titelleiste besteht.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 09.07.11 13:12
Dann brauchst Du nicht das Client DC des Fensters, sondern das NC-Handle. Dieses bekommst Du beim Verarbeiten der WM_NCPAINT-Nachricht als Parameter übergeben.
_________________ 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.
|
|
SixpointedStarsoft 
      
Beiträge: 22
Erhaltene Danke: 1
|
Verfasst: Sa 09.07.11 13:37
Leider gibt mir WM_NCPAINT kein Handle nur eine Region in die gezeichnet wird.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 09.07.11 13:47
_________________ 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.
|
|
SixpointedStarsoft 
      
Beiträge: 22
Erhaltene Danke: 1
|
Verfasst: Sa 09.07.11 13:59
Ja den Eintrag habe ich gelesen und den Code benutzt:
Delphi-Quelltext 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:
| TWMNCPaint = packed record Msg: Cardinal; RGN: HRGN; Unused: Longint; Result: Longint; end;
procedure PaintIconicSkinOfWindow(var Message: TWMNCPaint); var ADC,ACachedDC: HDC; AMemBmp: HBitmap; ACanvas: TCanvas; R: TRect; begin ADC:= GetDCEx(FSkinedForm.Handle,message.RGN ,DCX_WINDOW+DCX_INTERSECTRGN); ACanvas:= TCanvas.Create; ACachedDC := CreateCompatibleDC(ADC); ACanvas.Handle:= ACachedDC;
ACanvas.Draw(0,0,FFormSkinAndShape.ImageSkin.Graphic);
DeleteDC(ACachedDC);
ReleaseDC(FSkinedForm.Handle, ADC); ACanvas.Free; end; |
Leider gibt mir die Message keine HWND mit.
|
|
SixpointedStarsoft 
      
Beiträge: 22
Erhaltene Danke: 1
|
Verfasst: Sa 09.07.11 14:00
Mit dem obigen Code passiert nichts.
|
|
SixpointedStarsoft 
      
Beiträge: 22
Erhaltene Danke: 1
|
Verfasst: Sa 09.07.11 18:11
|
|
|