Pytanie brzmi nastepujaco: w jaki sposob na glownej gormie stworzyc dynamiczne komponenty (np array of TLabel) i nadac im wlasciwosci dla Font. Serdecznie dziekuje za wszystkie sugestie :)
Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking
Pytanie brzmi nastepujaco: w jaki sposob na glownej gormie stworzyc dynamiczne komponenty (np array of TLabel) i nadac im wlasciwosci dla Font. Serdecznie dziekuje za wszystkie sugestie :)
Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking
ta procka tworzy przykladowo 20 labeli:
var
i:integer;
Tab : array [1..20] of TLabel;
begin
for i:=1 to 20 do
begin
Tab[I]:=Tlabel.Create(self);
Tab[I].Parent:=Self;
Tab[I].Font.Color:=clYellow;
Tab[I].Left:=10;
Tab[I].Top:=i*20;
Tab[I].caption:='Label';
end;
end;
mam nadzieje ze wszystko jasne. zawsze mozna tez zdefiniowac constructor i tam ustalac kolkor i inne parametry tworzonego obiektu.--Pozdrawiam
Ojciec (Delphi 5 Enterprise)
Wiem to Ojciec, spx, dzieki za helpa, tylko, jest taki porblem ze:
type
TEtykiety := array[1..20] of TLabel ;
*cos tam
var
Etykiety : TEtykiety ;
*cos tam
procedure PokazEtykiety(Main: TForm) ;
var
I : Integer ;
begin
*/jakies instrukcje
Etykiety[I] := Tlabel.Create(Main) *bo self nie dziala
with Etykiety[I] do
begin
*jakies instrukcje
with Font do
begin
Size := 10 ;
Name := 'Verdana' ;
*itd..
end ;
end ;
end ;
to pokazuje sie blad mniej wiecej taki (nie pamietam teraz)
a) Cannot assign TFont to a TFont
b) Cannot assign TFont to a ^TFont
Zupelnie nie wiem co robic, byc moze nie da sie procedura z biblioteki dll tworzyc dynamicznie komponentow na glownej formie ??? A moze sie da. Jestem w kropce, prosze o pomoc :)
Dzieki Ojciec za helpa ! {browar}
Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking
POMOCY !!!!!!!!!!!!!!!!!!!!!!!!
Rozwiazanie tego problemu bardzo ulatwiloby mi pisanie pewnego programu {browar}
Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking
Trzeba bylo od razu ze to w dll :-) hmm... hmm... :-* .
Zmodyfikowalem twoja procedure w ten sposob:
procedure PokazEtykiety(Main: TForm) ;
var
I : Integer ;
begin
for I:=1 to 5 do
begin
Etykiety[I] := Tlabel.Create(Main);
with Etykiety[I] do
begin
with Font do
begin
Size := 10 ;
name := 'Verdana' ;
end ;
Caption:='Label';
Left:=10;
Top:=I*20;
Parent:=Main;
end ;
end;
end ;
I u mnie dziala. Dziwi mnie to ze nawet bez moich
wstawek, dll u mnie bez problemu sie kompilowal.
Blad o ktorym pisales pojawil sie tylko raz i to jak
napisalem wlasny konstruktor.
Moze blad tkwi w niewlasciwym wywoluwaniu przez ciebie
dll w programie, lub w innych liniach kodu tej procedury
(nie podales jej calej).
hmm...
--Pozdrawiam
Ojciec (Delphi 5 Enterprise)
W razie gdyby ci nie dzialalo to moge ci podeslac kompletny kod programu i dll.
--Pozdrawiam
Ojciec (Delphi 5 Enterprise)
Ojciec napisał:
Trzeba bylo od razu ze to w dll :-) hmm... hmm... :-* .
>Zmodyfikowalem twoja procedure w ten sposob:
>
>procedure PokazEtykiety(Main: TForm) ;
>var
> I : Integer ;
>begin
> for I:=1 to 5 do
> begin
> Etykiety[I] := Tlabel.Create(Main);
> with Etykiety[I] do
> begin
> with Font do
> begin
> Size := 10 ;
> name := 'Verdana' ;
> end ;
> Caption:='Label';
> Left:=10;
> Top:=I*20;
> Parent:=Main;
> end ;
> end;
>end ;
>
>I u mnie dziala. Dziwi mnie to ze nawet bez moich
>wstawek, dll u mnie bez problemu sie kompilowal.
>Blad o ktorym pisales pojawil sie tylko raz i to jak
>napisalem wlasny konstruktor.
>Moze blad tkwi w niewlasciwym wywoluwaniu przez ciebie
>dll w programie, lub w innych liniach kodu tej procedury
>(nie podales jej calej).
> hmm...
>
SOrka Ojciec, zapomnialem o czyms jeszcze :)
*wszystko w kodzie biblioteki dll
type
TEtykiety = array[1..20] of TLabel ;
PTEtykiety = ^TEtykiety
procedure PokazEtykiety(Main: TForm; Etykiety: TEtykiety)
*podobno tablica jest wskaznikiem do jej pierwszego elementu, ale w pascalu to nie dziala, wyprubowalem to na innym przykladzie
begin
*instrukcje jak wczesniej
end ;
albo:
procedure PokazEtykiety(Main: TForm; Etykiety: PTEtykiety)
*taka procedura chyba bylaby lepsza, bo mozna operowac na Etykiety[I]
begin
//instrukcje jak wczesniej
end ;
W naspepnym poscie wrzuce cala procedure :0
Dzieki za helpa {browar}
Pozdrawiam :) {hello} --LSD - Discover The New Way Of Thinking
Ojciec napisał:
W razie gdyby ci nie dzialalo to moge ci podeslac kompletny kod programu i dll.
Ok, bede wdzieczny jak mi podeslesz to, co napisales, a oto moja procedura :) :
procedure TFrmMain.PokazEtykiety(FrmMain: TForm; Etykiety: TEtykiety) ;
var
Lewo, Gora, I : Integer ;
begin
I := 1 ;
Gora := 40 ;
Lewo := 30 ;
while I < 81 do
begin
Etykiety[I] := TLabel.Create(Self);
with Etykiety[I] do
begin
Parent := FrmMain ;
AutoSize := False ;
with Font do
begin
Size := 10 ;
Name := 'Verdana' ;
Style := [fsBold] ;
Color := clRed ;
end ;
Top := Gora ;
Left := Lewo ;
Width := 25 ;
Height := 20 ;
Caption := IntToStr(I) ;
end ;
Lewo := Lewo + 30 ;
if I mod 10 = 0 then
begin
Gora := Gora + 40 ;
Lewo := 30 ;
end ;
Inc(I) ;
end ;
end ;
--LSD - Discover The New Way Of Thinking
Oczywiscie: Etykiety[I] := TLabel.Create(FrmMAin);
I oczywiscie Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking
Dziala Ojciec (jeszcze dopracuje) {brawo} {brawo} {brawo} . Bardzo Ci dziekuje {browar}
Pozdrawiam :) {hello} --LSD - Discover The New Way Of Thinking
Hmmmmmm jeszcze jedno, probuje teraz usunac powstale etykiety tak:
Etykiety[I].Free ;
Etykiety[I] := nil ;
I wyskakuje AccesViolation
Poradzisz cos na to Ojciec ? :) :)
Z gory dzieki :)
Pozdrawiam {hello}
--LSD - Discover The New Way Of Thinking
Ok Ojciec, zrobilem juz sobie wszystko :) Wielkie wielkie wielkie dzieki za pomoc, pomogles mi bardzo zrozumiec co robie zle {browar} {browar} {brawo} {brawo} {brawo}
Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking
Nie ma sprawy. To kodu chyba nie musze wysylac?
{browar} --Pozdrawiam
Ojciec (Delphi 5 Enterprise)
Ojciec napisał:
Nie ma sprawy. To kodu chyba nie musze wysylac?
> {browar}
Nie-e, dzieki wielkie, juz zrobilem :) Ale jak chcesz to mozesz mi podeslac, chetnie zobacze twoje rozwiazanie :) {browar}
Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking