请教(100分)

  • 主题发起人 主题发起人 lghui
  • 开始时间 开始时间
L

lghui

Unregistered / Unconfirmed
GUEST, unregistred user!
如何动态创建一个在设计期间没有建立的FORM?
 
如果FORM中没有控件,很简单。
var
Formx:TForm;
begin
Formx:=TForm.Create(Self);
formx.show;
end;
 
var
DemoForm: TForm;
begin
DemoForm:=TForm.Create();
DemoForm.Show;
end;
 
var
DemoForm: TForm;
begin
DemoForm := TForm.Create(self);
DemoForm.Show;
end;
 
小橄榄:
你好。
我以回答。
可否告之你的mail。
我的mail: liuyj@zhonghuan.com.cn
 
做有控件的 Form 也可以,Delphi 有标准的例子:Dialogs.pas, Line 1757
{ Input dialog }
function InputQuery(const ACaption, APrompt: string;
var Value: string): Boolean;
function InputBox(const ACaption, APrompt, ADefault: string): string;
 
BaKuBaKu:
你好
如果form上放一个Listbox,你如何做?
可否告之你的mail。
我的mail: liuyj@zhonghuan.com.cn
 
为什莫不给我分?
 
什么控件都可以啊,不知道 ListBox 有什么特别的地方。
本来不想贴代码的,怕贴子太长。
function InputQuery(const ACaption, APrompt: string;
var Value: string): Boolean;
var
Form: TForm;
Prompt: TLabel;
Edit: TEdit;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
Result := False;
Form := TForm.Create(Application);
with Formdo
try
Canvas.Font := Font;
DialogUnits := GetAveCharSize(Canvas);
BorderStyle := bsDialog;
Caption := ACaption;
ClientWidth := MulDiv(180, DialogUnits.X, 4);
ClientHeight := MulDiv(63, DialogUnits.Y, 8);
Position := poScreenCenter;
Prompt := TLabel.Create(Form);
with Promptdo
begin
Parent := Form;
AutoSize := True;
Left := MulDiv(8, DialogUnits.X, 4);
Top := MulDiv(8, DialogUnits.Y, 8);
Caption := APrompt;
end;
Edit := TEdit.Create(Form);
with Editdo
begin
Parent := Form;
Left := Prompt.Left;
Top := MulDiv(19, DialogUnits.Y, 8);
Width := MulDiv(164, DialogUnits.X, 4);
MaxLength := 255;
Text := Value;
SelectAll;
end;
ButtonTop := MulDiv(41, DialogUnits.Y, 8);
ButtonWidth := MulDiv(50, DialogUnits.X, 4);
ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
with TButton.Create(Form)do
begin
Parent := Form;
Caption := SMsgDlgOK;
ModalResult := mrOk;
Default := True;
SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
ButtonHeight);
end;
with TButton.Create(Form)do
begin
Parent := Form;
Caption := SMsgDlgCancel;
ModalResult := mrCancel;
Cancel := True;
SetBounds(MulDiv(92, DialogUnits.X, 4), ButtonTop, ButtonWidth,
ButtonHeight);
end;
if ShowModal = mrOk then
begin
Value := Edit.Text;
Result := True;
end;
finally
Form.Free;
end;
end;

function InputBox(const ACaption, APrompt, ADefault: string): string;
begin
Result := ADefault;
InputQuery(ACaption, APrompt, Result);
end;
 
可能是我无知。
你的方法不行。
你能否说的详细一些?
 
我的方法不行,是怎么不行了?
我提供这个例子,只是说明一个方法,动态创建控件,动态设置其属性,然后指定 Parent
属性以放到 Form 上面。如果拿过来就运行,当然不行了,因为里面调用了一些 Dialogs
单元的私有函数,比如: GetAveCharSize 。
也不知道你是怎样知道这个方法不行的。
 
BaKuBaKu:
你好.
我又一个实例。
procedure TForm1.Button1Click(Sender: TObject);
var formx:Tform;
ss:string;
label1:Tlabel;
begin
formx:=Tform.Create(Self);
label1:=Tlabel.Create(Self);
label1.Parent:=formx;
label1.top:=20;
label1.left:=40;
label1.caption:='aaa';
formx.show;
end;
我的方法也可实现。
你的方法我有些地方不懂。
大家交个朋友,我的mail: liuyj@zhonghuan.com.cn,我叫刘英杰。
小弟以后有不明白的地方要向你请教了,好吗?
能否告之你的mail和姓名.
谢谢你
刘英杰

 
不是我的方法,是 Delphi VCL 的例子。
和你的方法是一样的,怎么会不懂呢?
 
多人接受答案了。
 
接受答案了.
 
bakubaku,现在忙什么呢?我去年就用您的easygrid做过报表,后来您公开了源代码。
我想考武汉的研究生,您能不能给点建议?想报武大,如果考不上能不能调剂?
谢谢,我的mail puzzledj@163.com
 
后退
顶部