PDA

View Full Version : با ایجاد اشیا در حالت run-time مشکل دارم



Developer Programmer
سه شنبه 20 اسفند 1387, 11:50 صبح
اصلا متوجه نمیشم، برنامه کامپایل میشه اما در هنگام اجرا پیغام میده که کلاس های تعریف شده رو پیدا نمیکنه :ناراحت:


interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, XPMan, StdCtrls,
Buttons;

type
TForm1 = class(TForm)
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
Private
public
DataSource: TDataSource;
DataSet: TADODataSet;
Connection: TADOConnection;
procedure btnSaveClick(Sender: TObject);
procedure btnRefuseClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
Grid: TDBGrid;
Navigator: TDBNavigator;
btnSave: TBitBtn;
btnRefuse: TBitBtn;
begin

Connection:= TADOConnection.Create(nil);
DataSource:= TDataSource.Create(nil);
DataSet:=TADODataSet.Create(nil);
btnSave:=TBitBtn.Create(nil);
btnRefuse:=TBitBtn.Create(nil);

With Connection do
begin
end;

DataSource.DataSet:=DataSet;

With DataSet do
begin
end;

Grid:= TDBGrid.Create(nil);
with Grid do
begin
Align:=alTop;
Width:=550;
Height:=361;
Options:= Options + [dgAlwaysShowEditor];
DataSource:=DataSource;
end;

Navigator:= TDBNavigator.Create(nil);
with Navigator do
begin
DataSource:=DataSource;
align:= alBottom;
width:=550;
height:=27;
end;

with btnSave do
begin
Caption:='OK';
Kind:=bkOK;
ModalResult:=mrOK;
Width:=99;
Height:=33;
left:=160;
top:=376;
OnClick:=btnSaveClick;
end;

with btnRefuse do
begin
Caption:='OK';
Kind:=bkCancel;
ModalResult:=mrCancel;
Width:=99;
Height:=33;
left:=280;
top:=376;
OnClick:=btnRefuseClick
end;
end;

procedure Tform1.btnSaveClick(Sender: TObject);
begin
end;
procedure Tform1.btnRefuseClick(Sender: TObject);
begin

end;


Class TDBGrid,TAdoConnection,TDataSet not found

shervin farzin
سه شنبه 20 اسفند 1387, 12:24 عصر
سلام
علت اينه كه وقتي برنامه از تابع FormCreate خارج ميشه فضاي دريافتي توسط متغييرهايي
كه در بخش Var از اين تابع اعلان شدن آزاد ميشه و طبيعيه كه در توابع ديگه به اونها
دسترسي نداشته باشيد ، چئن وجود ندارند . كاري كه بايد بكنيد اينه كه متغيرهاي بخش Var
از تابع FormCreate رو به بخش Public از فرمتون انتقال بديد .
از اين گذشته پيشنهاد ميكنم هم براي Object هاي جديد Name تعيين كني و هم Parent .
موفق باشيد .

vcldeveloper
سه شنبه 20 اسفند 1387, 19:04 عصر
در هنگام اجرا پیغام میده که کلاس های تعریف شده رو پیدا نمیکنه
علتش اینه که این کامپوننت ها را اول از طریق Designer به فرم منتقل کردی، بعد اومدی در کد به اون شکل اینها را ساختی! وقتی کامپوننتی از طریق Designer به فرم اضافه میشه، Designer بطور خودکار کد مربوط به رجیستر کردن کلاس کامپوننت را به پروژه اضافه میکنه. ولی وقتی کامپوننت را از visibility پیش فرض خارج میکنی، مجبوری خودت کلاس مربوط به اون کامپوننت را با استفاده از RegisterClass رجیستر کنی.
اگر فقط میخوای اون کامپوننت ها را بصورت Runtime استفاده کنی، و میخوای این خطا داده نشه، تعریف مربوط به اون کامپوننت ها را از فایل DFM حذف کن.

accpascal
سه شنبه 20 اسفند 1387, 20:04 عصر
بعد از تعاریف پنجره والد باید مشخص و تابع painto تعریف شود
امیدوارم این مثال یک کامپوننت bitbtn را ایجاد ونمایش دهد



btnSave:=TBitBtn.Create(nil);
with btnSave do
begin
Caption:='OK';
Width:=99;
Height:=33;
left:=160;
top:=376;
btnsave.ParentWindow:=form1.Handle;
btnsave.PaintTo(1,1,1);
end;

accpascal
سه شنبه 20 اسفند 1387, 20:54 عصر
من مثال خودم را چک کردم دستور آخر(paintto) را نیاز ندارد