PO raz kolejny JA ! :))))

0

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

0

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)

0

Wiem to Ojciec, spx, dzieki za helpa, tylko, jest taki porblem ze:

  1. Nie moge uzyc w bibliotece dll parametru Self
  2. Jesli przekazuje jako parametr Forme na ktorej chce rysowac i ustalam dla niej wartosci w taki wsposob

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

0

POMOCY !!!!!!!!!!!!!!!!!!!!!!!!

Rozwiazanie tego problemu bardzo ulatwiloby mi pisanie pewnego programu {browar}

Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

0

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)

0

W razie gdyby ci nie dzialalo to moge ci podeslac kompletny kod programu i dll.
--Pozdrawiam
Ojciec (Delphi 5 Enterprise)

0

Ojciec napisał:
Trzeba bylo od razu ze to w dll :-) hmm... hmm... :- .
&gtZmodyfikowalem twoja procedure w ten sposob:
&gt
&gtprocedure PokazEtykiety(Main: TForm) ;
&gtvar
&gt I : Integer ;
&gtbegin
&gt for I:=1 to 5 do
&gt begin
&gt Etykiety[I] := Tlabel.Create(Main);
&gt with Etykiety[I] do
&gt begin
&gt with Font do
&gt begin
&gt Size := 10 ;
&gt name := 'Verdana' ;
&gt end ;
&gt Caption:='Label';
&gt Left:=10;
&gt Top:=I
20;
&gt Parent:=Main;
&gt end ;
&gt end;
&gtend ;
&gt
&gtI u mnie dziala. Dziwi mnie to ze nawet bez moich
&gtwstawek, dll u mnie bez problemu sie kompilowal.
&gtBlad o ktorym pisales pojawil sie tylko raz i to jak
&gtnapisalem wlasny konstruktor.
&gtMoze blad tkwi w niewlasciwym wywoluwaniu przez ciebie
&gtdll w programie, lub w innych liniach kodu tej procedury
&gt(nie podales jej calej).
&gt hmm...
&gt

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

0

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 &lt 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

0

Oczywiscie: Etykiety[I] := TLabel.Create(FrmMAin);

I oczywiscie Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

0

Dziala Ojciec (jeszcze dopracuje) {brawo} {brawo} {brawo} . Bardzo Ci dziekuje {browar}

Pozdrawiam :) {hello} --LSD - Discover The New Way Of Thinking

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0