• 11 odgovora
  • 4.741 pregleda
Dinamicki kreirane komponente! 24.05.2004. u 13:25 · pre 272 meseci #1
Dinamicki sam kreirala komponente MaskEdit
me := TMaskEdit.Create(Self);
me.Name := 'MaskEdit' + IntToStr(n);
me.Text := '';
i takvih komponenata na formi imam vise; Posle kreiranja, menjam vrednost svojstva text, i hocu takve vrednost da upisem u bazu podataka. Kako to da uradim? Svaka vrednost iz MasEdit komponente je jedan slog u bazi.

Dajte mi bar ideju!
Re: Dinamicki kreirane komponente! 24.05.2004. u 19:50 · pre 272 meseci #2
Pa generalno ideja treba da prati koncept pristupa podacima kroz npr. BDE ili DBExpress. Znaci ides kroz DataSet i citas i po potrebi menjas slogove. Ako sam shvatio dobro ti si za svaki slog tabele napravila jedan maskedit. Znaci moras da imas nacin kako da povezes maskedit komponente sa odgovarajucim poljima u tabeli, kao neki ID. Ali ovo vec lici na DBGrid tako da je pitanje zasto ne koristis vec gotovu komponentu.
Re: Dinamicki kreirane komponente! 24.05.2004. u 20:45 · pre 272 meseci #3
Morlic lepo kaze. A samo mi se cini da kada se kreira komponenta mora da ima vlasnika a najbolje je da to bude forma na kojoj stoje.

Znaci TMaskedEdit.Create(FormOwner)
Re: Dinamicki kreirane komponente! 25.05.2004. u 01:19 · pre 272 meseci #4
čini mi se da će ovdje biti da treba postaviti

MaskEdit.Parent=parentControl

takođe treba da postaviš vrijednosti top,left,height,width
osobina kontrole...
Re: Dinamicki kreirane komponente! 25.05.2004. u 12:59 · pre 272 meseci #5
Kao sto sam i napisala ranije da sam dinamicki kreirala komponente MaskEdit
me := TMaskEdit.Create(Self);
me.Name := 'MaskEdit' + IntToStr(n);
me.Text := '';
Komponenta ima i vlasnika, postavku MaskEdit.Parent i takodepostavku vrednosti top,left,height,width osobina kontrole...
i takvih komponenata na formi imam vise; Posle kreiranja, menjam vrednost svojstva text, i hocu takve vrednost da upisem u bazu podataka. Kako to da uradim, odnosno nacin kako da pozovem odredjenu MaskEdit komponentu i ucitam vrednost koju sam upisala i upisem u bazu podataka. Svaka vrednost iz MasEdit komponente treba da je jedan slog u bazi.
Re: Dinamicki kreirane komponente! 25.05.2004. u 15:58 · pre 272 meseci #6
nisam siguran da sam te shvatio?!! Pitaš kako da
pozoveš neku komponentu. Pa preko imena. Možda ti je
najbolje da te komponente staviš u niz pa da prođeš kroz
niz i uzimaš Text value svake komponente i stavljaš u bazu.
Re: Dinamicki kreirane komponente! 26.05.2004. u 10:43 · pre 272 meseci #7
Uredu, ja cu kreirati niz koji ce imati n clanova. Kako da se sad obratim osobini tekst komponente cije je ime u nizu, jer mi ta vrednost treba za unos u bazu.
Dakle, osnovni problem mi je sto je ime komponente promenljiva, ja ne znam kako da im se kao takvim obracam.
Re: Dinamicki kreirane komponente! 26.05.2004. u 11:17 · pre 272 meseci #8
var a : string;

...
a:=maskedit.text
...

tako pristupas vrednosti text-a koju menjas u toku programa...
Ako ne znas koliko ih imasw stavi neki brojac...
:O)
Sto se tice upisa u bazu, zavisi od baze koju koristis. Npr za mysql lepo skines zeoslib, povezes se na bazu, stavis na formu updateSQL (ili tako nesto, sad nisam kuci, a nisam radio skoro sa bazama) i query koji ce ti to uneti u bazu...
Postoji i mnogo elegantnije resenje kao sto je DBEdit, oko koga ne moras da se mucis...

PS Mozda sam gresio u imenima komponenti, ali trazila si ideju... :)
Re: Dinamicki kreirane komponente! 27.05.2004. u 21:34 · pre 272 meseci #9
Probaj na sledeći naćin. Postavi neki TButton (npr. Button 1) i onda napiši sledeći kod
za njegov OnClick event(pogledaj help ako nije baš sve OK sa sintaksom, pišem napamet):

Procedure Button1.Click(Sender: TObject);
var
i: integer;
begin
for i:=0 to ComponentCount-1 do
begin
If Component is TEdit // pretpostavka da si unosila tekst u TEdit polja
then
begin
With Dataset1 to // priprema dataseta i unos texta
begin
insert;
Fields[0].AsString:=(Component as TEdit).Text;
post;
end; // with
end; // if
end; // for
end; // onclick procedure

Re: Dinamicki kreirane komponente! 27.05.2004. u 22:18 · pre 272 meseci #10
A sto jednostavno ne kreiras DBEdit polja?! Onda im samo dodelis datasource property?
Re: Dinamicki kreirane komponente! 28.05.2004. u 00:56 · pre 272 meseci #11
i:integer;
for i:=1 to niz.size() do
begin
MaskEdit m=(niz as maskedit);
m.text....
// i ovdje sada ostale radnje...

end;


otprilike bi ovako izgledalo ali moras da prilagodis.
Milslim da je i ovo jasno...
Re: Dinamicki kreirane komponente! 04.06.2004. u 12:39 · pre 272 meseci #12
Auh, bas svasta...
Dakle, ako imas ime komponente, treba da pozoves ovako nesto:
Code:

var 
  MyMaskEdit: TMaskEdit;
  anyname: string;
begin
  anyname := 'nekitamoname';
  MyMaskEdit := Form1.FindComponent(anyname) as TMaskEdit;
  MyMaskEdit.Text := ....;
end;


Pogledaj u help-u detalje metode FindComponent(). Da bi ovo radilo, svi tvoji komponenti moraju biti kreirani sa owner-om postavljenim na Form1 (upravo kao u tvom primeru).
Pozdrav

Rajko
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme