Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Rahmen zeichnen (https://www.delphipraxis.net/76414-rahmen-zeichnen.html)

Chris P 4. Sep 2006 08:50


Rahmen zeichnen
 
Hi Leute,

gibt es eine nonVCL-Möglichkeit, mit FrameRect oder Rectangle eine Rahmen in einem DC zu zeichnen,
ohne das der Hintergrund überzeichnet wird. Es soll also nur ein Rahmen gezeichnet werden, ohne das das
Rechteck gefüllt wird. Gibt es so was wie einen transparenten Brush?

oki 4. Sep 2006 09:40

Re: Rahmen zeichnen
 
Hi,

zur Not Lineto.

Gruß oki

dataspider 4. Sep 2006 09:47

Re: Rahmen zeichnen
 
Hi,

es sollte mit CreateSolidBrush funktionieren.

[EDIT]
Ich glaube, das war Quatsch. Aber FrameRect füllt doch das Rechteck gar nicht, oder bin ich jetzt durcheinander?
[/EDIT]

Frank

Luckie 4. Sep 2006 09:57

Re: Rahmen zeichnen
 
Delphi-Quellcode:
Rectangle(dc, 5, 5, 50, 50);
Ein nicht gefülltes Rechteck.

Amateurprofi 4. Sep 2006 10:34

Re: Rahmen zeichnen
 
Zitat:

Zitat von Luckie
Delphi-Quellcode:
Rectangle(dc, 5, 5, 50, 50);
Ein nicht gefülltes Rechteck.

Nein, Lucky, so geht es nicht.

Zitat:

The Rectangle function draws a rectangle. The rectangle is outlined by using the current pen and filled by using the current brush.
Aber FrameRect macht genau das, was gewünscht ist.

Zitat:

The FrameRect function draws a border around the specified rectangle by using the specified brush. The width and height of the border are always one logical unit.

int FrameRect(
HDC hDC, // handle to DC
CONST RECT *lprc, // rectangle
HBRUSH hbr // handle to brush
);
Parameters
hDC
[in] Handle to the device context in which the border is drawn.
lprc
[in] Pointer to a RECT structure that contains the logical coordinates of the upper-left and lower-right corners of the rectangle.
hbr
[in] Handle to the brush used to draw the border.

Luckie 4. Sep 2006 10:46

Re: Rahmen zeichnen
 
Eben und wenn es den aktuellen Pinsel benutzt, dann ist es nicht gefüllt, denn dann hast du nur einen Rahmen auf dem Fenster mit der Fensterfarbe drumrum und der Fensterfarbe innen drinne.

Amateurprofi 4. Sep 2006 13:11

Re: Rahmen zeichnen
 
Zitat:

Zitat von Luckie
Eben und wenn es den aktuellen Pinsel benutzt, dann ist es nicht gefüllt, denn dann hast du nur einen Rahmen auf dem Fenster mit der Fensterfarbe drumrum und der Fensterfarbe innen drinne.

Ja Lucky. selbstverständlich muß man 'nen entsprechenden Brush benutzen.
Für Chris P scheint es wichtig zu sein, daß der bestehende Hintergrund (der ja nicht nur einfach die Hintergrundfarbe sein muß sondern z.B. auch ein Bild sein kann) nicht überzeichnet wird.
Und deswegen ist Rectangle ungeeignet, dagegen FrameRect geeignet.

Zitat:

gibt es eine nonVCL-Möglichkeit, mit FrameRect oder Rectangle eine Rahmen in einem DC zu zeichnen,
ohne das der Hintergrund überzeichnet wird
. Es soll also nur ein Rahmen gezeichnet werden, ohne das das
Rechteck gefüllt wird.

Chris P 4. Sep 2006 13:24

Re: Rahmen zeichnen
 
@Amateurprofi: Genau das meinte ich.

Wie kann man nun die Dicke des Rahmens bestimmen? Mit CreatePen wäre das ja kein Problem.
Wie macht man das bei einem Brush?

himitsu 4. Sep 2006 13:29

Re: Rahmen zeichnen
 
Notfalls gingen ja noch 4 Rectangle's, welcher du mit dem entsprechendem Brush füllst

Chris P 4. Sep 2006 13:34

Re: Rahmen zeichnen
 
Das ginge auch, aber gibt es da keine elegantere Methode die Rahmendicke zu ändern?

Amateurprofi 7. Sep 2006 14:34

Re: Rahmen zeichnen
 
Zitat:

Zitat von Chris P
@Amateurprofi: Genau das meinte ich.

Wie kann man nun die Dicke des Rahmens bestimmen? Mit CreatePen wäre das ja kein Problem.
Wie macht man das bei einem Brush?

Soweit ich weiß gibt es nonVCL keine vorgefertigte Prozedur um Rahmen mit anderen Stärken als 1 zu zeichnen.
Aber schau Dir doch mal in der Unit ExtCtrls die Prozedur Frame3D an und schreibe die, entsprechend Deinen Wünschen, um, so daß Du sie nonVLC verwenden kannst.

Delphi-Quellcode:
procedure Frame3D(Canvas: TCanvas; var Rect: TRect; TopColor, BottomColor: TColor;
Mit Frame3D kannst Du Rahmen beliebiger Stärke zeichnen und obendrein noch für linke/obere und rechte/untere Kante unterschiedliche Farben verwenden, was den 3d-Effekt gibt. Schön an dieser Prozedur ist auch, daß das als var übergebene Rechteck von der Prozedur verändert wird und nach Aufruf von Frame3D das Rechteck innerhalb des Rahmens beschreibt.

Chris P 7. Sep 2006 15:07

Re: Rahmen zeichnen
 
Ja sieht doch schon mal ganz gut aus!

Werde mich mal damit beschäftigen und es zu nonVCL abändern!

Danke für die Hilfe ... :thumb:


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