Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi z.B. roundrect und das nötige handle (https://www.delphipraxis.net/11721-z-b-roundrect-und-das-noetige-handle.html)

Haegar 12. Nov 2003 15:03


z.B. roundrect und das nötige handle
 
hi, ich hab aus spass einfach mal nen ladebalken simpuliert, sprich mit timer einfach ne varible hochzählen (quasi den fortschritt) und dann den balken inner paintbox malen lassen, funktioniert alles super, aber nur solange ich nen normales rechteck nehme (drect:=rect(x1,y1,x1+f,y2))!
wenn ich beispielsweise roundrect nehme dann möchte er ja noch zusätzlich ein handle übergeben haben.
da dachte ich mit dem paintbox-canvas-handle is das eröledigt, aber da kommt dann immer ne fehlermeldung.

Delphi-Quellcode:
procedure Tform1.ladebalken(f:integer);
var drect:Trect;
begin
 drect:=roundrect(pb.Canvas.Handle,50,50,50+f,70,10,10);
 pb.Canvas.StretchDraw(drect,bild.Picture.Bitmap);
end;
tja da kommt die fehlermeldung:
Incompatible types: TRect and LongBool

was stimmt denn da nicht?

gruss haegar

himitsu 12. Nov 2003 15:25

Re: z.B. roundrect und das nötige handle
 
Das kann auch nicht gehen.
"Canvas.StretchDraw(Rect, Bitmap);" - Rect gibt die Ecken für das Zeichnen und nicht die Form an.

Es ist aber möglich den Zeichnenbereich für alle Zeichenfunktionen einzuschrenken:
Delphi-Quellcode:
Procedure TForm1.ladebalken(f: Integer);

Var RHandle: HRgn;

Begin
  RHandle := CreateRoundRectRgn(50, 50, 50 + f, 70, 10, 10);
  SelectObject(pb.Canvas.Handle, RHandle);
  DeleteObject(RHandle);

  pb.Canvas.StretchDraw(Rect(50, 50, 50 + f, 70), bild.Picture.BitMap);
End;
Notfalls danach wieder den gesammten Bereich freigeben:
Delphi-Quellcode:
Procedure TForm1.ladebalken(f: Integer);

Var RHandle: HRgn;

Begin
  RHandle := CreateRoundRectRgn(50, 50, 50 + f, 70, 10, 10);
  SelectObject(pb.Canvas.Handle, RHandle);
  DeleteObject(RHandle);

  pb.Canvas.StretchDraw(Rect(50, 50, 50 + f, 70), bild.Picture.BitMap);

  RHandle := CreateRectRgn(0, 0, pb.Width, pb.Height);
  SelectObject(pb.Canvas.Handle, RHandle);
  DeleteObject(RHandle);

  ...

End;

Eine Demo von mir, für's Clipping, findest du dort Durchsichtiges Fenster (nicht Alpha Blend)

Haegar 12. Nov 2003 15:31

Re: z.B. roundrect und das nötige handle
 
jetzt seh ich gar nix mehr!!??
:gruebel:

hab den ersten teil so übernommen von dir.

[edit=Daniel B]Doppelpost gelöscht. Mfg, Daniel B[/edit]

himitsu 12. Nov 2003 15:38

Re: z.B. roundrect und das nötige handle
 
Bereich erstellen:
Delphi-Quellcode:
RHandle := CreateRoundRectRgn(50, 50, 50 + f, 70, 10, 10);
Kopie an Canvas übergeben:
Delphi-Quellcode:
SelectObject(pb.Canvas.Handle, RHandle);
Objekt wieder freigeben:
Delphi-Quellcode:
DeleteObject(RHandle);

Im 3. Post auf der Seite ist das Demo als Download (Durchsichtiges Fenster)

Haegar 12. Nov 2003 15:41

Re: z.B. roundrect und das nötige handle
 
ja ist ja schön und gut, aber ich seh nix. sieht nun wie folgt aus:

Delphi-Quellcode:
procedure Tform1.ladebalken(f:integer);
var RHandle:HRgn;
begin
  RHandle := CreateRoundRectRgn(50, 50, 50 + f, 70, 10, 10);
  SelectObject(pb.Canvas.Handle, RHandle);
  pb.Canvas.StretchDraw(Rect(50, 50, 50 + f, 70), bild.Picture.BitMap);
  DeleteObject(RHandle);
end;

himitsu 12. Nov 2003 15:54

Re: z.B. roundrect und das nötige handle
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei mir geht's.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz