新しい種類の境界線(丸みを帯びた角)を使用して、TEdit、TDBEdit、TComboBoxなどのカスタムコンポーネントのセットを作成しようとしています。次のコードを作成しました。
unit RoundRectControls;
interface
uses
SysUtils, Classes, Controls, StdCtrls, Windows, Messages, Forms;
type
TRoundRectEdit = class(TEdit)
private
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
property BorderStyle default bsNone;
property Ctl3D default False;
{ Published declarations }
end;
procedure Register;
procedure DrawRoundedRect(Control: TWinControl);
implementation
constructor TRoundRectEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
DrawRoundedRect(Self);
end;
procedure Register;
begin
RegisterComponents('Eduardo', [TRoundRectEdit]);
end;
procedure DrawRoundedRect(Control: TWinControl);
var
r: TRect;
Rgn: HRGN;
begin
with Control do
begin
r := ClientRect;
rgn := CreateRoundRectRgn(r.Left, r.Top, r.Right, r.Bottom, 30, 30) ;
Perform(EM_GETRECT, 0, lParam(@r)) ;
InflateRect(r, - 4, - 4) ;
Perform(EM_SETRECTNP, 0, lParam(@r)) ;
SetWindowRgn(Handle, rgn, True) ;
Invalidate;
end;
end;
end.
しかし、コンポーネントをフォームに入れようとした後、次のメッセージが表示されました。
だから、どうすればそれを修正できますか?私はコンポーネントを構築するのが初めてで、Web上で優れたチュートリアルが必要です。DrawRoundedRect
コンストラクターの外でそれを作成する必要があると何かが教えてくれます...しかし、どこで?
編集1-2012-07-2714:50
Sertac Akyuzの回答は素晴らしく、問題を解決しましたが、結果はちょっと醜いものでした。何が間違っているのかわかりません。EditBoxのテキストが左上に近すぎます。誰かが私がそれを修正する方法を知っていますか?