PDA

View Full Version : ساختن Runtime اشیا



Bahmany
یک شنبه 13 آذر 1384, 17:05 عصر
با سلام

چگونه میتوان در دلفی اشیاء را ساخت مثلا
TLable.Create و سپس به onclick ش رویدادی نصب داد ؟؟؟

با تشکر :گیج:

m-khorsandi
دوشنبه 14 آذر 1384, 07:40 صبح
procedure TForm1.Button1Click(Sender: TObject);
begin
With TLabel.Create(Self) Do
Begin
Name := 'Label_1';
Caption := 'Test';
Top := 100;
Left := 100;
Parent := Self;
OnClick := RunLabOnClick;
End;
end;

Procedure TForm1.RunLabOnClick(Sender: TObject);
begin
(Sender As TLabel).Caption := 'Click...';
end;

Bahmany
دوشنبه 14 آذر 1384, 13:01 عصر
خدا خیریت بده حتما امتحان می کنم

Hamid_PaK
سه شنبه 15 آذر 1384, 06:13 صبح
دوست عزیز البته اگه یک متغییر داشته باشید برای دسترسی بعدی به شی کارتون ساده تر می شه ...
کد آقای خورسندی صحیح است فقط یک متغییر بهش اضافه کنید ( با اجازه آقای خورسندی ) ...


var
lbl1:TLabel;
begin
lbl1 := TLabel.Create(Self);
With lbl1 Do
Begin
Name := 'Label_1';
Caption := 'Test';
Top := 100;
Left := 100;
Parent := Self;
OnClick := RunLabOnClick;
End;


یا حق !!!

m-khorsandi
سه شنبه 15 آذر 1384, 07:27 صبح
TLabel(FindComponent('Label_1')).Caption

دسترسی به کامپوننت بدون استفاده از متغیر.

با استفاده از متغیر شما تعداد ثابتی از Label ها رو میتونید ایجاد کنید.

دنیای دلفی
سه شنبه 25 بهمن 1384, 00:32 صبح
من دارم یک DLL می نویسم چطور می توان بدون نوشتن TForm1 محتوای یک رویداد را اجرا کرد
Procedure TForm1.RunLabOnClick(Sender: TObject);

دنیای دلفی
سه شنبه 25 بهمن 1384, 11:11 صبح
با سلام مجدد ابتدا به صورت کامل توضیح بدهم .
من دارم یک Dll می نویسم به کد زیر :




library Dynamic;
uses
Classes,Windows, Messages, SysUtils, Variants, Graphics, Controls, Forms;
var
CropImage:TForm;
CheckBox5:TCheckBox;
procedure ChangeSize(Sender: TObject);
begin
if CheckBox5.Checked then
CropImage.Height:=626
else
CropImage.Height:=365;
end;
Procedure Crop;stdcall;
begin
CropImage:=TForm.Create(nil);
CropImage.Left:=254;
CropImage.Top:=85;
CropImage.Height:=624;
CropImage.Width:=576;
CropImage.BiDiMode:=bdRightToLeft;
CropImage.BorderIcons:=[biSystemMenu];

CheckBox5:=TCheckBox.Create(nil);
CheckBox5.Parent:=CropImage;
CheckBox5.Top:=302;
CheckBox5.Height:=19;
CheckBox5.Width:=73;
CheckBox5.OnClick:=ChangeSize;

CropImage.Show;

end;

exports
Crop;
begin
end.

دنیای دلفی
سه شنبه 25 بهمن 1384, 11:16 صبح
حالا مشکل این است که برای انتصاب OnClick:=Changesize با خطا مواجه می شوم

Naficy
سه شنبه 25 بهمن 1384, 13:02 عصر
یک کلاس تعریف کنید و ChangeSize را داخل آن (به صورت متد) بنویسید.

دنیای دلفی
سه شنبه 25 بهمن 1384, 13:38 عصر
اگر زحمتی نیست یک مثال بزنید

دنیای دلفی
چهارشنبه 26 بهمن 1384, 20:56 عصر
با سلام
اگر یکی از دوستان لطف کنه کار ما رو راه بیندازه

mzjahromi
چهارشنبه 26 بهمن 1384, 21:16 عصر
روشی که جناب نفیسی گفتن فکر کنم اینه.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TClass1 = class
Procedure ClickButton(Sender:Tobject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;Class1:TClass1;

implementation

{$R *.dfm}

Procedure TClass1.ClickButton(Sender:Tobject);
Begin//
ShowMessage('ok');
End;
procedure TForm1.FormClick(Sender: TObject);
begin
Button1.OnClick:=Class1.ClickButton;
end;

end.

ولی باز همون میشه

Hamid_PaK
چهارشنبه 26 بهمن 1384, 21:37 عصر
دوست عزیز مثال توی یک اپلیکیشن جدید دلفی هست ... !!!



Type
TMiForm = class(TForm)
procedure ChangeSize;
end;

procedure TMiForm.ChangeSize;
begin
// Do somthing here ...
end;



یا حق !!!

دنیای دلفی
پنج شنبه 27 بهمن 1384, 12:19 عصر
library Arash;
uses
Classes,
Windows,
Messages,
SysUtils,
Variants,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls;

Type
TCropImage = class(TForm)
CheckBox5:TCheckBox;
procedure ChangeSize(Sender: TObject);
Procedure Crop;stdcall;

end;


var
CropImage:TCropImage;


procedure TCropImage.ChangeSize(Sender: TObject);
begin
if CheckBox5.Checked then
CropImage.Height:=626
else
CropImage.Height:=365;
end;


Procedure TCropImage.Crop;stdcall;
begin
CropImage:=TCropImage.Create(nil);
With CropImage do
begin
Left:=254;
Top:=85;
Height:=624;
Width:=576;
BiDiMode:=bdRightToLeft;
BorderIcons:=[biSystemMenu];
BorderStyle:=bsSingle;
KeyPreview:=True;
end;


CheckBox5:=TCheckBox.Create(nil);
with CheckBox5 do
begin
Parent:=CropImage;
Caption:='Set';
Cursor:=crHandPoint;
Font.Name:='Tahoma';
Font.Size:=8;
Left:=8;
Top:=302;
Height:=19;
Width:=73;
Checked:=False;
OnClick:=ChangeSize;
end;

CropImage.ShowModal;

end;


exports
Crop;
begin
end.



نمی دونم چرا در exports در پروسیجر Crop خطا می گیرد

Hamid_PaK
پنج شنبه 27 بهمن 1384, 13:22 عصر
تست نکردم ولی کامپایل شد ...


library Project1;

uses
Classes, Windows, Messages, SysUtils, Variants, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TCropImage = class(TForm)
CheckBox5:TCheckBox;
procedure ChangeSize1(Sender: TObject);
end;

var
CropImage: TCropImage;

procedure TCropImage.ChangeSize1(Sender: TObject);
begin
if CheckBox5.Checked then
CropImage.Height:=626
else
CropImage.Height:=365;
end;

Procedure Crop; stdcall;
begin
CropImage := TCropImage.Create(nil);
with CropImage do
begin
Height := 624;
Width := 576;
Left := (Screen.Width-Width) div 2;
Top := (Screen.Height-Height) div 2;
BiDiMode:=bdRightToLeft;
BorderIcons:=[biSystemMenu];
BorderStyle:=bsSingle;
KeyPreview:=True;

CheckBox5 := TCheckBox.Create(nil);
InsertControl(CheckBox5);
with CheckBox5 do
begin
Caption:='Set';
Cursor:=crHandPoint;
Font.Name:='Tahoma';
Font.Size:=8;
Left:=8;
Top:=302;
Height:=19;
Width:=73;
Checked:=False;
OnClick:=ChangeSize1;
end;

ShowModal;
end;
end;

exports
Crop;

end.


یا حق !!!

Hamid_PaK
پنج شنبه 27 بهمن 1384, 14:09 عصر
تست کردم ولی خطای ریسرس فرم رو گرفت ...
این رو یک نگاهی بیاندازید امیدوارم دیگه مشکل بطور کل حل بشه ...

یا حق !!!

دنیای دلفی
پنج شنبه 27 بهمن 1384, 15:17 عصر
ممنون بسیار عالی بود
دستت درد نکنه
برو توسایت شخصی من یک کامپوننت را انتخاب کن برات رایگان می فرستم جناب آقای حمید

Hamid_PaK
پنج شنبه 27 بهمن 1384, 22:11 عصر
قابلی نداشت ... خوشحالم که مفید واقع شد ...
دست شما هم درد نکنه نیاز شد حتما بهتون خبر می دهم ...

یا حق !!!