Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Property u user kontroli

[es] :: Pascal / Delphi / Kylix :: Property u user kontroli

[ Pregleda: 1911 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Property u user kontroli11.09.2008. u 23:46 - pre 190 meseci
E ovako: kreirah svoju kontrolu - po mogučnostima prošireni DBNavigator, a kao nasljednik Panela.
Na njega smještam gumbe koji su nasljednici TBitBtn klase.

Sve to radi dobro i izgleda ok, ali:

definirao sam:

published
...
property BtnFirst: mBtn read FirstBtn write FirstBtn;
...
end;

U object inspektoru nakon toga vidim gumb, mogu mu mijenjati property-e što je vidljivo u design modu (npr caption), ali u run modu se to ne vidi.

Sad ću postaviti pitanje kao i kolega LSDCracker u "Bazama": može li mi tko detaljno objasniti ili napisati dio koda koji pohranjuje podatke tako da ostanu sačuvani i nakon pokretanja programa.
To bi mi prilično pojednostavnilo posao jer sada pišem property-e za sve što moram kontrolirati na gumbima (caption, visible, enabled, width itd.)
 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.rcub.bg.ac.yu.



+40 Profil

icon Re: Property u user kontroli12.09.2008. u 11:35 - pre 190 meseci
Uradi
Code:

FirstBtn.SetSubComponent(True);

u konstruktoru glavne komponente (TPanel, ako sam te shvatio dobro) posto instanciras FirstBtn, da bi obezbedio serijalizaciju podkomponente zajedno za panelom. Isto to moras uraditi i za sve druge podkomponente za koje zelis da im se property-ji cuvaju.

Uzgredna napomena: Licno preferiram TFrame kad treba napraviti novu "komponentu" koja se sastoji od puno raznorodnih pojedinacnih komponenti... Mozda mozes da probas i to. Samo predlog :)
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Property u user kontroli12.09.2008. u 11:37 - pre 190 meseci
Uspio sam nači na netu kako to napraviti, tj. djelomično. Uspojevam pohraniti pojedini property od kontrole koju želim sačuvati, ali ne i kako sačuvati cijelu kontrolu, tj. sve njene porpety-e.

Dakle: treba sačuvati property-e kontrole koja je nasljednik TButton-a s još nekoliko dodanih propert-y. Napravio sam za caption i to radi.


procedure mTToolBar.DefineProperties(Filer: TFiler);
begin
inherited;
Filer.DefineProperty('mbtn', ReadMBtn, WriteMBtn, True);
end;

upis property-a;

procedure mTToolBar.WriteMBtn(Writer: TWriter);
begin
Writer.WriteListBegin;
Writer.WriteComponent(btnFirst);
Writer.WriteListEnd;
end;


čitanje property-a

procedure mTToolBar.ReadMBtn(Reader: TReader);
begin
Reader.ReadListBegin;
btnFirst.Caption := Reader.ReadString;
Reader.ReadListEnd;
end;

Kako to napraviti za cijelu kontrolu btnFirst? Da li mogu nekako upisati sve property, a da ne radim upis jednog po jednog (imam 12 gumbiča, svaki po x property-a = previše za pisanje)

Pokupašao sam sa btnFirst := Reader.ReadComponent(TComponent(mBtn)); ali ne prolazi :(

Ovo mi je prilično hitno, samo to još moram završiti da mogu pustiti kontrolu u pogon.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Property u user kontroli12.09.2008. u 11:38 - pre 190 meseci
Orc, pisao sam post pa nisam vidio odgovor, idem probati...
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Property u user kontroli12.09.2008. u 11:45 - pre 190 meseci
Probano - ne čuva podatke.
za kreiranje btnFirst (kao i ostale gumbe) koristim posebne procedure koje pozivam iz Create procedure svoje kontrole ili po potrebi jer se gumbi mogu i brisati.

Probao sam:
procedure mTToolBar.BtnFirstCreate;
begin
btnFirst := mBtn.Create(self);
btnFirst.OnClick := ButtonFirstClick;
btnFirst.Width := fDBBtnWidth;
btnFirst.SetSubComponent(true);
end;

probao sam i ovo:

constructor mTToolBar.Create(AOwner: TComponent);
begin
inherited;
self.SetSubComponent(true);
...

ista stvar, ne čuva vrijdnosti...
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Property u user kontroli12.09.2008. u 11:55 - pre 190 meseci
Izgleda da sam nešto pogriješio... pokušao sam ponovo s

btnFirst.SetSubComponent(true);

u BntFirstCreate proceduri.

i prošlo je. Pokvari mi raspored kontrola, ali to se da riješiti...

Ne mogu vjerovati da je tako jednostavno, a ja izgubio dva dana....

Hvala na pomoći
 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.rcub.bg.ac.yu.



+40 Profil

icon Re: Property u user kontroli12.09.2008. u 12:07 - pre 190 meseci
Nema na cemu :)

Ne znam zasto ti ne snima raspored. Pokusaj da otvoris dfm fajl nekim tekst editorom, ili otvori formu pa stavi View As Text, i proveri sta je snimio od podataka. Mozda ce ti to pomoci.

Ja sam, recimo, napravio primer sa kontrolom koja nasledjuje TCustomPanel i ima jedan TButton. Relevantni deo dfm-a je
Code:

  object CustomPanel11: TCustomPanel1
    Left = 112
    Top = 160
    Width = 185
    Height = 41
    AButton.Left = 50
    AButton.Top = 0
    AButton.Width = 100
    AButton.Height = 25
    AButton.TabOrder = 0
  end

gde se vidi da je snimio i poziciju AButton-a, koju sam rucno pomerio na 50px udesno od ivice panela. Kada se aplikacija startuje, sve je rasporedjeno kako treba.

Ako te zanimaju napredne tehnike, pogledaj i ovo (sva tri dela): http://delphi.about.com/library/bluc/text/uc080701a.htm
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Property u user kontroli12.09.2008. u 12:10 - pre 190 meseci
Kad već davim....

radi ok, ali u object inspectoru, property kontrole piše:

+BtfFirst mt->

gdje je mt naziv moje kontrole.
Kako dobiti da piše tekst npr mt->BtnFirst ili samo BtnFirst?
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Property u user kontroli12.09.2008. u 12:13 - pre 190 meseci
Pozicioniranje nije problem budući da imam proceduru koja uređuje raspored gumba. Gumbi se mogu kreirati ili destoy-ati u run modu, a poravnati su left, tako da onaj koji prvi kreiram bude i prvi lijevo, a ja želim da bude raspored odeređen, pa ako kasnije kreiram bnt2, on mora biti između btn1 i btn2. To sam napravio i radi ok.
 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.rcub.bg.ac.yu.



+40 Profil

icon Re: Property u user kontroli12.09.2008. u 12:43 - pre 190 meseci
Citat:
franjo_tahi: Kad već davim....

radi ok, ali u object inspectoru, property kontrole piše:

+BtfFirst mt->

gdje je mt naziv moje kontrole.
Kako dobiti da piše tekst npr mt->BtnFirst ili samo BtnFirst?


Malo si me zbunio sa terminima.. Mozda mozes da stavis TLabeledEdit kontrolu na formu, koja ima podkontrolu tipa TBoundLabel (naslednika TCustomLabel) u sebi. Property se zove EditLabel.
Kod mene Object Inspector prikazuje
Code:
+EditLabel | LabeledEdit1.SubLabel
EditLabel je ime property-ja (definisano u TLabeledEdit), LabeledEdit1 je ime instance kontrole na formi (menja se iz Object Inspectora, property Name), a SubLabel je Name property podkontrole (labele), koje je definisano compile-time u konstruktoru:
Code:

constructor TBoundLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Name := 'SubLabel';  { do not localize }
  SetSubComponent(True);
  if Assigned(AOwner) then
    Caption := AOwner.Name;
end;

To je ono sto mogu da ti kazem oko "porekla" pojedinih delova teksta u Object Inspectoru. Mozda mozes da dobijes ono sto zelis jednostavnom promenom opcija prikaza, desni klik na Object Inspector pa Properties.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Property u user kontroli12.09.2008. u 13:04 - pre 190 meseci
Eto, ne mogu vjerovat... dovoljno je u proceduri dodati;

procedure BtnFirstCreate
...
btnFirst.Name := 'BtnFirst';



riješio sam probleme, kontrola dobro izgleda i dobro radi... (za sad)
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Property u user kontroli

[ Pregleda: 1911 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.