गोलाकार कोनों के साथ फ्रेम बनाने के लिए अपने प्रश्न का उत्तर देने के लिए आप इस तरह कुछ कोशिश कर सकते हैं, लेकिन परिणाम के साथ आप असंतुष्ट होंगे क्योंकि CreateRoundRectRgn
का उपयोग यहां कोई एंटीअलाइजिंग नहीं है।
type
TFrame1 = class(TFrame)
Edit1: TEdit;
Button1: TButton;
protected
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
end;
implementation
procedure TFrame1.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
var
Region: HRGN;
begin
inherited;
Region := CreateRoundRectRgn(0, 0, ClientWidth, ClientHeight, 30, 30);
SetWindowRgn(Handle, Region, True);
end;
अद्यतन:
के बाद से GDI किसी भी समारोह है कि चाप प्रतिपादन के लिए एंटीलायज़िंग़ का समर्थन करेगा नहीं है, मैं यहाँ पोस्ट किया है एक दौर आयत आकार (सिर्फ एक शुद्ध भरा का एक उदाहरण गोल आयताकार) जो जीडीआई + का उपयोग करता है (इसके लिए आपको जीडीआई + रैपर from here
की आवश्यकता होगी)।
निम्नलिखित गुण इसके उपयोग के लिए महत्वपूर्ण हैं:
- रंग - आकार भरण रंग है
- त्रिज्या (कलम रंग, ढाल आदि का बढ़ाया जा सकता है) - (पिक्सेल में) त्रिज्या है गोलाकार कोनों
- AlphaValue आकर्षित करने के लिए प्रयोग किया जाता है चक्र के - :-)
गाया दौर आयत (सिर्फ मनोरंजन के लिए की अस्पष्टता मूल्य है
unit RoundShape;
interface
uses
SysUtils, Classes, Controls, Graphics, GdiPlus;
type
TCustomRoundShape = class(TGraphicControl)
private
FRadius: Integer;
FAlphaValue: Integer;
procedure SetRadius(Value: Integer);
procedure SetAlphaValue(Value: Integer);
protected
procedure Paint; override;
property Radius: Integer read FRadius write SetRadius default 10;
property AlphaValue: Integer read FAlphaValue write SetAlphaValue default 255;
public
constructor Create(AOwner: TComponent); override;
end;
TRoundShape = class(TCustomRoundShape)
public
property Canvas;
published
property Align;
property AlphaValue;
property Anchors;
property Color;
property Constraints;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property Radius;
property ShowHint;
property Visible;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnMouseActivate;
property OnMouseDown;
property OnMouseEnter;
property OnMouseLeave;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
end;
procedure Register;
implementation
{ TCustomRoundShape }
constructor TCustomRoundShape.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Width := 213;
Height := 104;
FRadius := 10;
FAlphaValue := 255;
end;
procedure TCustomRoundShape.SetRadius(Value: Integer);
begin
if FRadius <> Value then
begin
FRadius := Value;
Invalidate;
end;
end;
procedure TCustomRoundShape.SetAlphaValue(Value: Integer);
begin
if FAlphaValue <> Value then
begin
FAlphaValue := Value;
Invalidate;
end;
end;
procedure TCustomRoundShape.Paint;
var
GPPen: TGPPen;
GPColor: TGPColor;
GPGraphics: IGPGraphics;
GPSolidBrush: IGPSolidBrush;
GPGraphicsPath: IGPGraphicsPath;
begin
GPGraphicsPath := TGPGraphicsPath.Create;
GPGraphicsPath.Reset;
GPGraphicsPath.AddArc(0, 0, FRadius, FRadius, 180, 90);
GPGraphicsPath.AddArc(ClientWidth - FRadius - 1, 0, FRadius, FRadius, 270, 90);
GPGraphicsPath.AddArc(ClientWidth - FRadius - 1, ClientHeight - FRadius - 1,
FRadius, FRadius, 0, 90);
GPGraphicsPath.AddArc(0, ClientHeight - FRadius - 1, FRadius, FRadius, 90, 90);
GPGraphicsPath.CloseFigure;
GPColor.InitializeFromColorRef(ColorToRGB(Color));
GPColor.Alpha := FAlphaValue;
GPPen := TGPPen.Create(GPColor);
GPSolidBrush := TGPSolidBrush.Create(GPColor);
GPGraphics := TGPGraphics.Create(Canvas.Handle);
GPGraphics.SmoothingMode := SmoothingModeAntiAlias;
GPGraphics.FillPath(GPSolidBrush, GPGraphicsPath);
GPGraphics.DrawPath(GPPen, GPGraphicsPath);
end;
procedure Register;
begin
RegisterComponents('Stack Overflow', [TRoundShape]);
end;
end.
और परिणाम (SmoothingModeAntiAlias
समरेखण मोड के साथ लागू):
एक यह एक बड़ा भूमि के ऊपर है इस तरह के छोटे बात के लिए GDI उपयोग करने के लिए + कह सकते हैं लेकिन शुद्ध GDI antialiasing क्या परिणाम बनाता है बिना प्रस्तुत करना बदसूरत लग रहा है।
यदि मैं यह ठीक से काम करने, मैं अपने ही नियंत्रण है कि मैं एक पैकेज के रूप में स्थापित करते हैं, कि बाहरी शामिल करना चाहते हैं चाहता था और यहाँ एक ही दौर आयत शुद्ध GDI का उपयोग करके गाया का उदाहरण है आंतरिक नियंत्रण, और वह सभी कोड शामिल है जिसे मैं इसे सभी काम करना चाहता हूं। 'TFrame' सही मूल वर्ग नहीं है। मैं एक सादा 'TCustomControl' का उपयोग करता हूं। फ़्रेम संकलन समय के बजाय डिज़ाइन-टाइम पर दृश्य नियंत्रण की संरचना के लिए हैं। लेकिन अपने स्वयं के कस्टम नियंत्रण को संकलित करना अधिक विश्वसनीय और लचीला समाधान है। –
मैंने ठीक से ऐसा किया है, 'TLMDShapeControl' के बजाय निर्मित TShape का उपयोग करके और यह ठीक काम करता है। लेकिन अंत में, मैंने इन शैलियों को त्याग दिया, क्योंकि मेरे ग्राहक इन गैर देशी शैलियों से नफरत करते हैं और चाहते थे कि वे चले जाएं। –
हां, 'टीशिप' को गोल कोने किया जा सकता है, लेकिन आउटपुट बहुत छोटी है। मेरे पास एक चालक दल नहीं है, इसलिए मैं वह हूं जो आवश्यकताओं की जांच करता है, परियोजना, कोड और सिस्टम के डिजाइन और मेरी परियोजनाओं का डेटाबेस बनाता है और मुझे इनमें से किसी एक में विशेषज्ञ बनने की संभावना नहीं थी चीजें ... अभी तक! :-) – PSyLoCKe