문제에 부딪혀 이렇게 문의 드립니다...
님들 도움 부탁드리고, 문제를 간단히 설명 드리면...
보통 동적으로 폼을 생성할때...
eMemo := TMemo.Create(self);
eMemo.Parent := Form1;
~~~~~~~~~~~~~~~ 어쩌구 저쩌구 ~~~~~~~~~~
하잖아요...그런데 전 eMemo를 Form이 아닌 PaintBox에 붙이고 싶거든요?
혹시 방법이 없는지요...
이거 못하면 저 클납니다..
부탁드립니다.
간단한 소스 올립니다.
보구 방법이 있음 부탁드립니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
PaintBox1: TPaintBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure TestClick(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
eMemo : TMemo;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(eMemo) then
begin
eMemo := TMemo.Create(self);
eMemo.Parent := Form1;
eMemo.Align := alNone;
eMemo.Width :=100;
eMemo.Height :=100;
eMemo.Top :=200;
eMemo.Left :=200;
eMemo.Ctl3D := False;
eMemo.Font.Size := 10;
eMemo.Font.Style := [];
eMemo.BorderStyle := bsNone;
eMemo.SetFocus;
// eMemo.BorderStyle := bsNone;
// eMemo.ReadOnly := True;
// eMemo.Enabled := False;
// CreateCaret( Form1.eMemo.Handle);
ShowCaret(Form1.eMemo.handle);
eMemo.OnMouseDown := TestClick;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Assigned(eMemo) then
begin
eMemo.Free;
eMemo :=nil;
end;
end;
procedure TForm1.TestClick(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Assigned(eMemo) then
begin
eMemo.BorderStyle :=bsSingle;
end;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Assigned(eMemo) then
begin
eMemo.BorderStyle :=bsNone;
HideCaret(Form1.eMemo.handle);
end;
end;
end.
객체의 hierarchy를 보면 알수있습니다.
이문제는 간단히 Panel를 이용 그속에 PaintBox를 넣어 align을 alCloent로 해서 한나처럼사용한뒤 eMemo.Parent := Panel1;로 하면 어떻까요?
//////////////////////////////////////////////////////////////////////////
초짜... wrote:
> 문제에 부딪혀 이렇게 문의 드립니다...
> 님들 도움 부탁드리고, 문제를 간단히 설명 드리면...
> 보통 동적으로 폼을 생성할때...
> eMemo := TMemo.Create(self);
> eMemo.Parent := Form1;
> ~~~~~~~~~~~~~~~ 어쩌구 저쩌구 ~~~~~~~~~~
> 하잖아요...그런데 전 eMemo를 Form이 아닌 PaintBox에 붙이고 싶거든요?
> 혹시 방법이 없는지요...
> 이거 못하면 저 클납니다..
> 부탁드립니다.
>
> 간단한 소스 올립니다.
> 보구 방법이 있음 부탁드립니다.
>
> unit Unit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> ExtCtrls, StdCtrls;
>
> type
> TForm1 = class(TForm)
> Button1: TButton;
> Button2: TButton;
> PaintBox1: TPaintBox;
> procedure Button1Click(Sender: TObject);
> procedure Button2Click(Sender: TObject);
> procedure TestClick(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> private
> { Private declarations }
> public
> { Public declarations }
> eMemo : TMemo;
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> if not Assigned(eMemo) then
> begin
> eMemo := TMemo.Create(self);
> eMemo.Parent := Form1;
> eMemo.Align := alNone;
> eMemo.Width :=100;
> eMemo.Height :=100;
> eMemo.Top :=200;
> eMemo.Left :=200;
> eMemo.Ctl3D := False;
> eMemo.Font.Size := 10;
> eMemo.Font.Style := [];
> eMemo.BorderStyle := bsNone;
> eMemo.SetFocus;
> // eMemo.BorderStyle := bsNone;
> // eMemo.ReadOnly := True;
> // eMemo.Enabled := False;
>
> // CreateCaret( Form1.eMemo.Handle);
> ShowCaret(Form1.eMemo.handle);
> eMemo.OnMouseDown := TestClick;
>
>
>
> end;
> end;
>
> procedure TForm1.Button2Click(Sender: TObject);
> begin
> if Assigned(eMemo) then
> begin
> eMemo.Free;
> eMemo :=nil;
> end;
> end;
>
> procedure TForm1.TestClick(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> begin
> if Assigned(eMemo) then
> begin
> eMemo.BorderStyle :=bsSingle;
> end;
> end;
>
> procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> begin
> if Assigned(eMemo) then
> begin
> eMemo.BorderStyle :=bsNone;
> HideCaret(Form1.eMemo.handle);
> end;
> end;
>
> end.