Проблем
7 отговора
199 прегледа
Проблем
Здравейте,
Пиша един компонент сега(по-точно преправям един делфийски, а пиша на c++ под c++ Builder) и се нуждая от метод, в който компонента да покаже един модален диалог. Направих си формата под билдера, написах и класа й на паскал в unit-а, намерих как да добавя .dmf файла на формата - {$R име.DFM} и успявам да компилирам компонента без проблеми вече (под c++builder). Но проблема е , че когато инициализирам формата (с Create (Application.MainForm) )в някой метод на компонента ( независимо дали в неговия Create или в друг) ми дава грешка - access violation at .... address in module ... read of address 00000000. Как да се справя с това? Не смятам, че проблема е от това , че не съм с Делфи, ами нещо което изпускам. Не съм чел книги за Делфи, нито за правене на компоненти. Проблемът може да се обобщи до това как да се направи компонент с форма в себе си (принадлежаща на него).
Предварително ви благодаря!
Пиша един компонент сега(по-точно преправям един делфийски, а пиша на c++ под c++ Builder) и се нуждая от метод, в който компонента да покаже един модален диалог. Направих си формата под билдера, написах и класа й на паскал в unit-а, намерих как да добавя .dmf файла на формата - {$R име.DFM} и успявам да компилирам компонента без проблеми вече (под c++builder). Но проблема е , че когато инициализирам формата (с Create (Application.MainForm) )в някой метод на компонента ( независимо дали в неговия Create или в друг) ми дава грешка - access violation at .... address in module ... read of address 00000000. Как да се справя с това? Не смятам, че проблема е от това , че не съм с Делфи, ами нещо което изпускам. Не съм чел книги за Делфи, нито за правене на компоненти. Проблемът може да се обобщи до това как да се направи компонент с форма в себе си (принадлежаща на него).
Предварително ви благодаря!
Re: Проблем
Otnosno CBuilder-a ne moga da sam ti ot polza
Daj powe4e info za componenta - kakwo parawi i kak to4no go prawi
Zna4i - nesto osnowno - izobraziawaneto na ekrana na formi ne e thread safe proces - towa e edno - ako componenta ti raboti w otdelen thread - niama da stane
Drugo - Create - a ne e podhodiast wabste za sazdawane na formi - t.e. - wiz dali waboste Application - <>NIL - t.e. Create-a moze da nastapwa predi inicializaciata na programata - wsi4ko e mnogo uslowno - zawisi kakwo iskash da postignesh - taka 4e malko info ili par4e ot source moze da pomogne.
Mozesh da testwash komponenta si bez da go dobawiash kato biblioteka w CBuildera - a kato go creatwash dinami4no - taka mozesh da trasirash i da ustanowish kade to5no garmi i za kakwo - wremenno si wklu4i path-a do surce-a na komponenta (ako ne e vidim w testowia proekt) za da mozesh da imash dostap do nego - nezawisimo 4e ti prekompilira bibliotekata postoianno. I waobste testwaneto na komponenti go prawi bez da gi zaka4ash w IDE- to - towa e naj sigurnia na4in.
---
Е т'ва е живот!
Daj powe4e info za componenta - kakwo parawi i kak to4no go prawi
Zna4i - nesto osnowno - izobraziawaneto na ekrana na formi ne e thread safe proces - towa e edno - ako componenta ti raboti w otdelen thread - niama da stane
Drugo - Create - a ne e podhodiast wabste za sazdawane na formi - t.e. - wiz dali waboste Application - <>NIL - t.e. Create-a moze da nastapwa predi inicializaciata na programata - wsi4ko e mnogo uslowno - zawisi kakwo iskash da postignesh - taka 4e malko info ili par4e ot source moze da pomogne.
Mozesh da testwash komponenta si bez da go dobawiash kato biblioteka w CBuildera - a kato go creatwash dinami4no - taka mozesh da trasirash i da ustanowish kade to5no garmi i za kakwo - wremenno si wklu4i path-a do surce-a na komponenta (ako ne e vidim w testowia proekt) za da mozesh da imash dostap do nego - nezawisimo 4e ti prekompilira bibliotekata postoianno. I waobste testwaneto na komponenti go prawi bez da gi zaka4ash w IDE- to - towa e naj sigurnia na4in.
---
Е т'ва е живот!
Re: Проблем
ето малко код ...
type
{$R openform.DFM}
TOpenForm = class (TForm)
//дори и гола форма не ще да тръгне
end;
TStringAlignGrid = class(TStringGrid)
.......
OpenForm:TOpenForm;
. .........
procedure OpenFile(FileName:String);
.........
end;
implementation
constructor TStringAlignGrid.Create (AOwner:TComponent);
begin
inherited Create(AOwner);
OpenForm.Create(AOwner);
end;
или пък я create-вам в някой метод,където вече е сигурно, че Аpplication не е NIL(поне се надявам :) ).
procedure TStringAlingGrid.OpenFile (FileName:String);
begin
OpenForm.Create(Application.MainForm);
end;
и така. тва е. Дано знаете какво да направя. Също бих искал да ми кажете някаква хубава книга, която мога да си намеря и тя да е за компоненти . може и за Делфи, дори и да е на английски. Хайде до скоро.
type
{$R openform.DFM}
TOpenForm = class (TForm)
//дори и гола форма не ще да тръгне
end;
TStringAlignGrid = class(TStringGrid)
.......
OpenForm:TOpenForm;
. .........
procedure OpenFile(FileName:String);
.........
end;
implementation
constructor TStringAlignGrid.Create (AOwner:TComponent);
begin
inherited Create(AOwner);
OpenForm.Create(AOwner);
end;
или пък я create-вам в някой метод,където вече е сигурно, че Аpplication не е NIL(поне се надявам :) ).
procedure TStringAlingGrid.OpenFile (FileName:String);
begin
OpenForm.Create(Application.MainForm);
end;
и така. тва е. Дано знаете какво да направя. Също бих искал да ми кажете някаква хубава книга, която мога да си намеря и тя да е за компоненти . може и за Делфи, дори и да е на английски. Хайде до скоро.
Re: Проблем
Не знам дали ще работи за компонента. Aз го ползвам за създаване на форми в програмите си и работи.
With TFormName.Create(Application) do
try
......
finally
Free;
end;
With TFormName.Create(Application) do
try
......
finally
Free;
end;
Re: Проблем
Mai trqbwa da e taka: OpenForm:=TOpenForm.Create(Owner); ,a ne OpenForm.Create(Owner);
[линк]
Towa e link kum statiq, malko e starichka ama to principite sa si sustite!
Wig i helpa na Delphi-to.
[линк]
Towa e link kum statiq, malko e starichka ama to principite sa si sustite!
Wig i helpa na Delphi-to.
Re: Проблем
Kam towa koeto kazaha drugite dobawiam samo edno - neobhodimo li e wsi4ko da e w edin file - niama smisal - po dobre si izwadi formata w otdelen file- niama da ti pre4i (predpolagam) - togawa niama da pishesh na raka resursite !
A wsastnost kade ti dawa AV -to pri Create ili pri izwikwane na samata forma ?
Kolkoto za kniga - specialno za sazdawane na komponenti ima edna (koiato az znam) ama e mnogo stara - Creating Delphi 3 Components ili nesto podobno - maj ne e mnogo goliama - moga da ti ia pratia po postata
Ina4e waw powe4eto "golemi" knigi ima dial za razrabotka na komponenti - towa e.
---
Е т'ва е живот!
A wsastnost kade ti dawa AV -to pri Create ili pri izwikwane na samata forma ?
Kolkoto za kniga - specialno za sazdawane na komponenti ima edna (koiato az znam) ama e mnogo stara - Creating Delphi 3 Components ili nesto podobno - maj ne e mnogo goliama - moga da ti ia pratia po postata
Ina4e waw powe4eto "golemi" knigi ima dial za razrabotka na komponenti - towa e.
---
Е т'ва е живот!
Re: Проблем
Ne vizdam logikata nesto napraveno na Delphi da go prehvyrljash na C++?!? Obratnoto mi se e sluchvalo i na men. A ako ste pravish modalen prozorec , ami napravi si go na C++, sto ti trjabva da razvaljash koda na Delphi?

kniga
Тази не е лоша:
Мартин Гардън
Delphi Създаване на компоненти
Martin Garden
Delphi in Components
Видях да язди през реки, те седем са на брой...
Мартин Гардън
Delphi Създаване на компоненти
Martin Garden
Delphi in Components
Видях да язди през реки, те седем са на брой...