View Full Version : Forms are foncusing :(
stein3
04-07-2007, 01:34 PM
I made a form, I opened up the form into scar to be curious and all I could get was:
object frmDesign: TfrmDesign
Left = 312
Top = 120
Width = 242
Height = 258
Caption = 'frmDesign'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
ShowHint = True
Visible = True
OnActivate = FormActivate
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 5
Top = 60
Width = 67
Height = 16
Caption = 'Message 1'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Label2: TLabel
Left = 5
Top = 89
Width = 67
Height = 16
Caption = 'Message 2'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Label3: TLabel
Left = 5
Top = 122
Width = 67
Height = 16
Caption = 'Message 3'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Label4: TLabel
Left = 5
Top = 149
Width = 67
Height = 16
Align = alCustom
Caption = 'Message 4'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Label5: TLabel
Left = 4
Top = 23
Width = 132
Height = 16
Caption = 'Number of Messages:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object startbut: TButton
Left = 83
Top = 184
Width = 75
Height = 25
Hint = 'starts script'
Caption = 'Start'
ParentShowHint = False
ShowHint = True
TabOrder = 8
end
object message1edit: TEdit
Left = 80
Top = 57
Width = 121
Height = 21
Hint = 'enter message'
ParentShowHint = False
ShowHint = True
TabOrder = 9
Text = 'message1edit'
end
object message2edit: TEdit
Left = 80
Top = 87
Width = 121
Height = 21
Hint = 'enter message'
ParentShowHint = False
ShowHint = True
TabOrder = 10
Text = 'message2edit'
end
object message3edit: TEdit
Left = 80
Top = 117
Width = 121
Height = 21
Hint = 'enter message'
ParentShowHint = False
ShowHint = True
TabOrder = 11
Text = 'message3edit'
end
object message4edit: TEdit
Left = 80
Top = 147
Width = 121
Height = 21
TabOrder = 12
Text = 'message4edit'
end
object Edit5: TEdit
Left = 141
Top = 21
Width = 35
Height = 21
Hint = '#'
ParentShowHint = False
ShowHint = True
TabOrder = 13
Text = 'Edit5'
end
end
How do I take that and put it as a form into my script?
Pentti
04-07-2007, 02:32 PM
Open up Scar. Tools--> Load DFM form. And look at the debug screen.
This is taken from SCAR manual (Hit F1 in scar)
Using forms.
Just follow this step by step tutorial and you will get the idea. Preconditions: you should know something about SCAR scripting.
1. Create new script and press SCAR menu Script > Form Editor
2. Drop a button on form somewhere.
3. Save the form and close form editor
4. Press SCAR menu Script > Load DFM form
5. You will get bunch of things in debug box. Copy variable declarations before begin.
6. Create new procedure before main begin
procedure InitForm;
begin
end;
7. Copy the rest form debug box into this procedure starting with frmDesign := CreateForm;
8. Declare new procedure
procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;
9. Put call to SafeInitForm in main script
10. Run the script.
11. Ok, let's make it a bit more useful. Declare two procedures:
procedure ShowFormModal;
begin
frmDesign.ShowModal;
end;
procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;
12. Put call to SafeShowFormModal in main script so it looks like this:
begin
SafeInitForm;
SafeShowFormModal;
end.
13. Remove form visibility. Find line frmDesign.Visible := True; and change True to False.
14. Run script. As you see form is modal and SCAR will freeze while form is open.
15. Let's make button do something. Declare procedure before InitForm declaration:
procedure buttonclick(sender: TObject);
begin
Writeln('Button pressed!');
frmDesign.Caption:= frmDesign.Caption + '.';
end;
16. Add line after Button1 := TButton.Create(frmDesign):
Button1.OnClick:= @buttonclick;
17. Run the script. Now when you press the button, it will Writeln and change window title.
18. If you want window to close when button is pressed, add line inside procedure buttonclick:
frmDesign.ModalResult:= mrOk;
Here is my final code:
program New;
var
frmDesign : TForm;
Button1 : TButton;
procedure buttonclick(sender: TObject);
begin
Writeln('Button pressed!');
frmDesign.Caption:= frmDesign.Caption + '.';
frmDesign.ModalResult:= mrOk;
end;
procedure InitForm;
begin
frmDesign := CreateForm;
frmDesign.Left := 259;
frmDesign.Top := 132;
frmDesign.Width := 354;
frmDesign.Height := 254;
frmDesign.Caption := 'frmDesign';
frmDesign.Color := clBtnFace;
frmDesign.Font.Color := clWindowText;
frmDesign.Font.Height := -11;
frmDesign.Font.Name := 'MS Sans Serif';
frmDesign.Font.Style := [];
frmDesign.Visible := False;
frmDesign.PixelsPerInch := 96;
Button1 := TButton.Create(frmDesign);
Button1.OnClick:= @buttonclick;
Button1.Parent := frmDesign;
Button1.Left := 69;
Button1.Top := 61;
Button1.Width := 75;
Button1.Height := 25;
Button1.Caption := 'Button1';
Button1.TabOrder := 8;
end;
procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;
procedure ShowFormModal;
begin
frmDesign.ShowModal;
end;
procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;
begin
SafeInitForm;
SafeShowFormModal;
end.
stein3
04-07-2007, 03:11 PM
thanks. I had to take an alignment line out of the script for it to compile, then once it did the window: frmdesign popped up and froze scar. I dunno whether to wait or end the process :(
Widget
04-09-2007, 07:12 PM
You have to open it in a threadsafe way. This is also from the tutorial, with your form merged into it:
Lol, I accidentally fixed some bugs in there too. Hope this helps
var
frmDesign : TForm;
Label1 : TLabel;
Label2 : TLabel;
Label3 : TLabel;
Label4 : TLabel;
Label5 : TLabel;
startbut : TButton;
message1edit : TEdit;
message2edit : TEdit;
message3edit : TEdit;
message4edit : TEdit;
Edit5 : TEdit;
procedure InitForm;
begin
frmDesign := CreateForm;
frmDesign.Left := 312;
frmDesign.Top := 120;
frmDesign.Width := 242;
frmDesign.Height := 258;
frmDesign.Caption := 'frmDesign';
frmDesign.Color := clBtnFace;
frmDesign.Font.Color := clWindowText;
frmDesign.Font.Height := -11;
frmDesign.Font.Name := 'MS Sans Serif';
frmDesign.Font.Style := [];
frmDesign.ShowHint := True;
frmDesign.Visible := False;
frmDesign.PixelsPerInch := 96;
Label1 := TLabel.Create(frmDesign);
Label1.Parent := frmDesign;
Label1.Left := 5;
Label1.Top := 60;
Label1.Width := 67;
Label1.Height := 16;
Label1.Caption := 'Message 1';
Label1.Font.Color := clWindowText;
Label1.Font.Height := -13;
Label1.Font.Name := 'MS Sans Serif';
Label1.Font.Style := [];
Label1.ParentFont := False;
Label2 := TLabel.Create(frmDesign);
Label2.Parent := frmDesign;
Label2.Left := 5;
Label2.Top := 89;
Label2.Width := 67;
Label2.Height := 16;
Label2.Caption := 'Message 2';
Label2.Font.Color := clWindowText;
Label2.Font.Height := -13;
Label2.Font.Name := 'MS Sans Serif';
Label2.Font.Style := [];
Label2.ParentFont := False;
Label3 := TLabel.Create(frmDesign);
Label3.Parent := frmDesign;
Label3.Left := 5;
Label3.Top := 122;
Label3.Width := 67;
Label3.Height := 16;
Label3.Caption := 'Message 3';
Label3.Font.Color := clWindowText;
Label3.Font.Height := -13;
Label3.Font.Name := 'MS Sans Serif';
Label3.Font.Style := [];
Label3.ParentFont := False;
Label4 := TLabel.Create(frmDesign);
Label4.Parent := frmDesign;
Label4.Left := 5;
Label4.Top := 149;
Label4.Width := 67;
Label4.Height := 16;
Label4.Caption := 'Message 4';
Label4.Font.Color := clWindowText;
Label4.Font.Height := -13;
Label4.Font.Name := 'MS Sans Serif';
Label4.Font.Style := [];
Label4.ParentFont := False;
Label5 := TLabel.Create(frmDesign);
Label5.Parent := frmDesign;
Label5.Left := 4;
Label5.Top := 23;
Label5.Width := 132;
Label5.Height := 16;
Label5.Caption := 'Number of Messages:';
Label5.Font.Color := clWindowText;
Label5.Font.Height := -13;
Label5.Font.Name := 'MS Sans Serif';
Label5.Font.Style := [];
Label5.ParentFont := False;
startbut := TButton.Create(frmDesign);
startbut.Parent := frmDesign;
startbut.Left := 83;
startbut.Top := 184;
startbut.Width := 75;
startbut.Height := 25;
startbut.Hint := 'starts script';
startbut.Caption := 'Start';
startbut.ParentShowHint := False;
startbut.ShowHint := True;
startbut.TabOrder := 8;
message1edit := TEdit.Create(frmDesign);
message1edit.Parent := frmDesign;
message1edit.Left := 80;
message1edit.Top := 57;
message1edit.Width := 121;
message1edit.Height := 21;
message1edit.Hint := 'enter message';
message1edit.ParentShowHint := False;
message1edit.ShowHint := True;
message1edit.TabOrder := 9;
message1edit.Text := 'message1edit';
message2edit := TEdit.Create(frmDesign);
message2edit.Parent := frmDesign;
message2edit.Left := 80;
message2edit.Top := 87;
message2edit.Width := 121;
message2edit.Height := 21;
message2edit.Hint := 'enter message';
message2edit.ParentShowHint := False;
message2edit.ShowHint := True;
message2edit.TabOrder := 10;
message2edit.Text := 'message2edit';
message3edit := TEdit.Create(frmDesign);
message3edit.Parent := frmDesign;
message3edit.Left := 80;
message3edit.Top := 117;
message3edit.Width := 121;
message3edit.Height := 21;
message3edit.Hint := 'enter message';
message3edit.ParentShowHint := False;
message3edit.ShowHint := True;
message3edit.TabOrder := 11;
message3edit.Text := 'message3edit';
message4edit := TEdit.Create(frmDesign);
message4edit.Parent := frmDesign;
message4edit.Left := 80;
message4edit.Top := 147;
message4edit.Width := 121;
message4edit.Height := 21;
message4edit.TabOrder := 12;
message4edit.Text := 'message4edit';
Edit5 := TEdit.Create(frmDesign);
Edit5.Parent := frmDesign;
Edit5.Left := 141;
Edit5.Top := 21;
Edit5.Width := 35;
Edit5.Height := 21;
Edit5.Hint := '#';
Edit5.ParentShowHint := False;
Edit5.ShowHint := True;
Edit5.TabOrder := 13;
Edit5.Text := 'Edit5';
end;
procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;
procedure ShowFormModal;
begin
frmDesign.ShowModal;
end;
procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;
begin
SafeInitForm;
SafeShowFormModal;
end.
stein3
04-09-2007, 09:57 PM
ok i got the form working but...
1. I need to make the script wait until I press Start (in form)
2. I need the Edit boxes (message 1, 2, 3, 4) to change the variable for message 1, 2, 3, 4 so that thats what it actually says...
HELP
Pentti
04-10-2007, 12:38 PM
var
frmDesign : TForm;
Label1 : TLabel;
Label2 : TLabel;
Label3 : TLabel;
Label4 : TLabel;
Label5 : TLabel;
startbut : TButton;
message1edit : TEdit;
message2edit : TEdit;
message3edit : TEdit;
message4edit : TEdit;
Edit5 : TEdit;
procedure StartScript(Sender:TObject);
begin
frmDesign.ModalResult:=MROK;
Writeln('1: '+message1edit.TEXT)
Writeln('2: '+message2edit.TEXT)
Writeln('3: '+message3edit.TEXT)
Writeln('4: '+message4edit.TEXT)
end;
procedure InitForm;
begin
frmDesign := CreateForm;
frmDesign.Left := 312;
frmDesign.Top := 120;
frmDesign.Width := 242;
frmDesign.Height := 258;
frmDesign.Caption := 'frmDesign';
frmDesign.Color := clBtnFace;
frmDesign.Font.Color := clWindowText;
frmDesign.Font.Height := -11;
frmDesign.Font.Name := 'MS Sans Serif';
frmDesign.Font.Style := [];
frmDesign.ShowHint := True;
frmDesign.Visible := False;
frmDesign.PixelsPerInch := 96;
Label1 := TLabel.Create(frmDesign);
Label1.Parent := frmDesign;
Label1.Left := 5;
Label1.Top := 60;
Label1.Width := 67;
Label1.Height := 16;
Label1.Caption := 'Message 1';
Label1.Font.Color := clWindowText;
Label1.Font.Height := -13;
Label1.Font.Name := 'MS Sans Serif';
Label1.Font.Style := [];
Label1.ParentFont := False;
Label2 := TLabel.Create(frmDesign);
Label2.Parent := frmDesign;
Label2.Left := 5;
Label2.Top := 89;
Label2.Width := 67;
Label2.Height := 16;
Label2.Caption := 'Message 2';
Label2.Font.Color := clWindowText;
Label2.Font.Height := -13;
Label2.Font.Name := 'MS Sans Serif';
Label2.Font.Style := [];
Label2.ParentFont := False;
Label3 := TLabel.Create(frmDesign);
Label3.Parent := frmDesign;
Label3.Left := 5;
Label3.Top := 122;
Label3.Width := 67;
Label3.Height := 16;
Label3.Caption := 'Message 3';
Label3.Font.Color := clWindowText;
Label3.Font.Height := -13;
Label3.Font.Name := 'MS Sans Serif';
Label3.Font.Style := [];
Label3.ParentFont := False;
Label4 := TLabel.Create(frmDesign);
Label4.Parent := frmDesign;
Label4.Left := 5;
Label4.Top := 149;
Label4.Width := 67;
Label4.Height := 16;
Label4.Caption := 'Message 4';
Label4.Font.Color := clWindowText;
Label4.Font.Height := -13;
Label4.Font.Name := 'MS Sans Serif';
Label4.Font.Style := [];
Label4.ParentFont := False;
Label5 := TLabel.Create(frmDesign);
Label5.Parent := frmDesign;
Label5.Left := 4;
Label5.Top := 23;
Label5.Width := 132;
Label5.Height := 16;
Label5.Caption := 'Number of Messages:';
Label5.Font.Color := clWindowText;
Label5.Font.Height := -13;
Label5.Font.Name := 'MS Sans Serif';
Label5.Font.Style := [];
Label5.ParentFont := False;
startbut := TButton.Create(frmDesign);
startbut.Parent := frmDesign;
startbut.Left := 83;
startbut.Top := 184;
startbut.Width := 75;
startbut.Height := 25;
startbut.Hint := 'starts script';
startbut.Caption := 'Start';
startbut.ParentShowHint := False;
startbut.ShowHint := True;
startbut.TabOrder := 8;
startbut.OnClick:=@StartScript;
message1edit := TEdit.Create(frmDesign);
message1edit.Parent := frmDesign;
message1edit.Left := 80;
message1edit.Top := 57;
message1edit.Width := 121;
message1edit.Height := 21;
message1edit.Hint := 'enter message';
message1edit.ParentShowHint := False;
message1edit.ShowHint := True;
message1edit.TabOrder := 9;
message1edit.Text := 'message1edit';
message2edit := TEdit.Create(frmDesign);
message2edit.Parent := frmDesign;
message2edit.Left := 80;
message2edit.Top := 87;
message2edit.Width := 121;
message2edit.Height := 21;
message2edit.Hint := 'enter message';
message2edit.ParentShowHint := False;
message2edit.ShowHint := True;
message2edit.TabOrder := 10;
message2edit.Text := 'message2edit';
message3edit := TEdit.Create(frmDesign);
message3edit.Parent := frmDesign;
message3edit.Left := 80;
message3edit.Top := 117;
message3edit.Width := 121;
message3edit.Height := 21;
message3edit.Hint := 'enter message';
message3edit.ParentShowHint := False;
message3edit.ShowHint := True;
message3edit.TabOrder := 11;
message3edit.Text := 'message3edit';
message4edit := TEdit.Create(frmDesign);
message4edit.Parent := frmDesign;
message4edit.Left := 80;
message4edit.Top := 147;
message4edit.Width := 121;
message4edit.Height := 21;
message4edit.TabOrder := 12;
message4edit.Text := 'message4edit';
Edit5 := TEdit.Create(frmDesign);
Edit5.Parent := frmDesign;
Edit5.Left := 141;
Edit5.Top := 21;
Edit5.Width := 35;
Edit5.Height := 21;
Edit5.Hint := '#';
Edit5.ParentShowHint := False;
Edit5.ShowHint := True;
Edit5.TabOrder := 13;
Edit5.Text := 'Edit5';
end;
procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;
procedure ShowFormModal;
begin
frmDesign.ShowModal;
end;
procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;
begin
SafeInitForm;
SafeShowFormModal;
end.
See what I did for button in line 111 and see procedure in line 15.
Powered by vBulletin® Version 4.2.1 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.