ورود

View Full Version : نحوه اجرای یک procedure



سیروس مقصودی
پنج شنبه 08 مهر 1400, 01:00 صبح
با سلام
من در برنامه ام procedureهایی نوشته ام و در حالت اجرا میخواهم نام یکی از procedureها را در داخل یک Edit بنویسم و وقتی که دکمه Run را میزنم آن procedure اجرا بشود . چگونه میتوانم این کار را انجام دهم .
با تشکر

یوسف زالی
پنج شنبه 08 مهر 1400, 23:38 عصر
سلام.
بهتره پروسیجر ها رو ببرید روی قسمت پابلیشد فرم، در این صورت می تونید با RTTI بهش دسترسی داشته باشید اون هم فقط با اسم.

سیروس مقصودی
جمعه 09 مهر 1400, 23:19 عصر
با تشکر
من در برنامه ام تعداد n تا procedure دارم با یک مشخصه که بصورت زیر میباشند
Procedure Run_Proc_0001_(Sender : TObject)
Procedure Run_Proc_0002_(Sender: TObject)
Procedure Run_Proc_0003_(Sender : TObject)
.
.
Procedure Run_Proc_????_(Sender: TObject)
من میخواهم که تمام این procedure ها در یک زمان خاصی به ترتیب اجرا شوند ولی تعدادآنها مشخص نیست من میخواهم اجرای Procedureها را در داخل یک حلقه For گذاشته و اجرا کنم . من چگونه میتوانم این کار را انجام دهم
با تشکر

یوسف زالی
شنبه 10 مهر 1400, 11:19 صبح
یک آرایه از پروسیجر ها درست کنید.
به همین راحتی

PArr = array of TNotifyEvent

سیروس مقصودی
دوشنبه 12 مهر 1400, 22:33 عصر
با سلام و با تشکر از دوست عزیز آقای یوسف زالی
نحوه انتصاب یک نام پروسیجر به یک متغییر از نوع TNotifyEvent چگونه هستش .
من یک آرایه ای مثلا با نام NameProc از نوع TNotifyEvent دارم میخواهم سه پرسیجر با عنوان Run_Proc_01 و Run_Proc_02 و Run_Proc_03 را به متغییر NameProc انتصاب دهم چگونه میتوانم این کار را انجام دهم .
با تشکر


var
NameProc : array[1..3] of TNotifyEvent ;
i_ : byte ;
begin
For i_ := 1 to 3 do
begin
NameProc[i_] := ??
?? و برای اجرا چگونه دستور را بایستی بنویسم
end ;
end ;

یوسف زالی
سه شنبه 13 مهر 1400, 00:43 صبح
unit Unit1;


interface


uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, TypInfo, Vcl.StdCtrls;


type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);


published
procedure P1(Sender: TObject);
procedure P2(Sender: TObject);
procedure P3(Sender: TObject);
procedure P4(Sender: TObject);
procedure P5(Sender: TObject);


public
PArr: array[1..5] of TNotifyEvent;
end;


var
Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
PArr[2](Self);
end;


procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
Routine: TMethod;
ObjMethod: TNotifyEvent;
begin
for i := 1 to 5 do
begin
Routine.Data := Pointer(Self);
Routine.Code := Self.MethodAddress('P' + IntToStr(i));
PArr[i] := TNotifyEvent(Routine);
end;
end;


procedure TForm1.P1(Sender: TObject);
begin
Caption := 'P1';
end;


procedure TForm1.P2(Sender: TObject);
begin
Caption := 'P2';
end;


procedure TForm1.P3(Sender: TObject);
begin
Caption := 'P3';
end;


procedure TForm1.P4(Sender: TObject);
begin
Caption := 'P4';
end;


procedure TForm1.P5(Sender: TObject);
begin
Caption := 'P5';
end;


end.