"Bjarne Torhus" <btorhus@worldonline.dk> skrev i en meddelelse
> Problemet er at i det øjeblik dialogboksen fjernes fra hukommelsen
> (free), indeholder variablen i unit 2 ikke længere strengen fra edit
> controllen.
Kopier editboksens tekstfelt over i result på din funktion, f.eks sådan her
function getStringViaModalForm:string;
var F:TDinStringInputForm;
begin
try
F:=TDinStringInputForm.create(nil);
F.showmodal;
if F.modalresult=mrOk then result:=F.edit1.text;
finally
F.free;
end;
end;
> Jeg har kun delphi personal versionen og har derfor ikke mulighed for
> at se i koden til InputQuery functionen.
Den ser således ud, hvis du vil gøre noget lignende - det ovenståeende er
dog lige så godt, og du kan jo customisere formen, have et billede på den
eller lignende...
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 Form do
try
Canvas.Font := Font;
DialogUnits := GetAveCharSize(Canvas);
BorderStyle := bsDialog;
Caption := ACaption;
ClientWidth := MulDiv(180, DialogUnits.X, 4);
Position := poScreenCenter;
Prompt := TLabel.Create(Form);
with Prompt do
begin
Parent := Form;
Caption := APrompt;
Left := MulDiv(8, DialogUnits.X, 4);
Top := MulDiv(8, DialogUnits.Y, 8);
Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
WordWrap := True;
end;
Edit := TEdit.Create(Form);
with Edit do
begin
Parent := Form;
Left := Prompt.Left;
Top := Prompt.Top + Prompt.Height + 5;
Width := MulDiv(164, DialogUnits.X, 4);
MaxLength := 255;
Text := Value;
SelectAll;
end;
ButtonTop := Edit.Top + Edit.Height + 15;
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), Edit.Top + Edit.Height + 15,
ButtonWidth, ButtonHeight);
Form.ClientHeight := Top + Height + 13;
end;
if ShowModal = mrOk then
begin
Value := Edit.Text;
Result := True;
end;
finally
Form.Free;
end;
end;
|