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

MDI aplikacija i TreeView

[es] :: Pascal / Delphi / Kylix :: MDI aplikacija i TreeView

[ Pregleda: 2250 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zofr

Član broj: 126534
Poruke: 119
*.dynamic.sbb.rs.



+1 Profil

icon MDI aplikacija i TreeView13.09.2009. u 21:33 - pre 178 meseci
Pravim MDI aplikaciju koja ce raditi sa vise tekstova. Svaka MDI formaima ima ADVMemo sa parserom. Zelim da formiram stablo gde ce svaki cvor biti povezan sa jednim tekstom MDI forme. Dakle, tekstovi treba da budu hijerarhiski povezani, a za to bi mi sluzilo stablo. Kako da povezem jedan cvor i jednu MDI formu. Kako mi osim teksta trebaju jos neki podaci o MDI tekstu (pozicijakursora i t. d.) to bi trebalo da dodelim nekoj varijabli, a da svojstvo cvora data ukazuje na tu varijablu. Ideja mi se cini prilicno labava.

To je zato sto ne poznajem dovoljno kako se sve moze koristiti svojstvo data.

Inace cilj da formiram skup tekstova koji se objedinjuju stablom i kojima se manipulise preko stabla.

Ima li iko kakvu ideju, bio bih vrlo zahvalan.

Pozdrav.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: MDI aplikacija i TreeView15.09.2009. u 13:02 - pre 178 meseci
> Zelim da formiram stablo gde ce svaki cvor biti povezan sa jednim tekstom MDI forme. Dakle, tekstovi treba da budu hijerarhiski
> povezani, a za to bi mi sluzilo stablo. Kako da povezem jedan cvor i jednu MDI formu.

Da li govoriš o treeview kontroli ili o nekom algoritmu? Ako je kontrola, možeš koristiti TTreeView, određeni njegov node možeš povezati sa tekstom npr. preko naziva (text noda je naziv fajla).
 
Odgovor na temu

zofr

Član broj: 126534
Poruke: 119
*.dynamic.sbb.rs.



+1 Profil

icon Re: MDI aplikacija i TreeView15.09.2009. u 19:39 - pre 177 meseci
Da koristim TTreeView.

Da bi bilo jasnije bicu malo detaljniji. Pridruzio sam se jednom kolegi koji pise kompajler za jedan mikrokontroler, uradio je oko 70% posla. Ja sam mu dao deju za novi korisnicki interfejs, i dogovorili smo se da ga ja uradim.

Ideja je u sledecem:

1. Klikom na novi projekat otvori se prozor za ime projekra, upise se i klikne na OK. Tada se otvara MDI forma sa tekstom koji je sablon za main unit. Istovremeno se pravi koren stabla sa imenom projekta (main unit), sto je na 0 nivou stabla.

2. Na isti nacin se otvaraju i novi unit-i samo se oni u stablu pojavljuju na 1 nivou.

3. Nove procedure i funkcije se pojavljuju u stablu na 2 nivou, i moze se desiti da u razlicitim unit-ima ima procedura i funkcija sa istim imenom.

Znaci: jedna MDI forma ima main unit i deklaracije u njoj, ali bez procedura i funkcija, i ima main iskazni blok. Isto to imaju i ostalu unit-i. Za svaku proceduru ili funkciju postoji jedna MDI forma. Kom unit-u pripada procedura ili funkcija zavisi od njenog mesta u stabli.

Tako se u jednom trenutku ima MDI forma (jedna ili vise) procedure ili funkcije na kojoj radite ili neki unit u kojem definisete neke deklaracije. Ceo projekat ne objedinjava izvorni tekst vec stablo. Ovo dozvoljava neke vrlo zgodne olaksice kompajleru.

Za vezu MDI forme (teksta i jos nekih podataka o tekstu) mislio sam da koristim svojstvo DATA koje ima TTreeView i koje je pointer tipa. Medjutim ovo svojstvo ne moze da se stavi u proceduru new(), niti mu se mogu dodeliti podaci putem
.data^ := NekaVrednost. Cini mi se da znam kako cu ovo da prevazidjem ali mi je prilicno komplikovano i razocaran sam jer sam od svojstva DATA ocekivao mnogo, sada ne znam za sta bi se ono moglo iskoristiti.

Hvala na odgovoru, i ako ovo dopunsko objasnjenje baca novo svetlo i neko ima ideju rado bih da iskoristim ovo svojstvo TTreeView DATA nego da komplikujem.

Pozdrav.

 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: MDI aplikacija i TreeView15.09.2009. u 21:27 - pre 177 meseci
> Za vezu MDI forme (teksta i jos nekih podataka o tekstu) mislio sam da koristim svojstvo DATA koje ima TTreeView i koje je pointer tipa.
> Medjutim ovo svojstvo ne moze da se stavi u proceduru new(), niti mu se mogu dodeliti podaci putem
> .data^ := NekaVrednost. Cini mi se da znam kako cu ovo da prevazidjem ali mi je prilicno komplikovano i razocaran sam jer sam od svojstva
> DATA ocekivao mnogo, sada ne znam za sta bi se ono moglo iskoristiti.

Verovatno misliš na TTreeNode.Data, kako je to pointer to može biti bukvalno bilo šta, sama MDI forma, klasa, neki record, string, integer...
Nisam shvatio šta ti je konkretno problem sa njim, da li nemaš ideju kako da predstaviš potrebnu strukturu za sve objekte (unite, metode), recimo record je dobar kandidat.

 
Odgovor na temu

zofr

Član broj: 126534
Poruke: 119
*.dynamic.sbb.rs.



+1 Profil

icon Re: MDI aplikacija i TreeView15.09.2009. u 21:47 - pre 177 meseci
Da svojstvo DATA je pointer i mogu ga postaviti da ukazuje na MDI formu, ali kada zatvorim tu MDI formu, ona se unistava, i ne mogu je ponovo dobiti iz stabla pomocu svojstva DATA.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: MDI aplikacija i TreeView15.09.2009. u 22:06 - pre 177 meseci
> Da svojstvo DATA je pointer i mogu ga postaviti da ukazuje na MDI formu, ali kada zatvorim tu MDI formu, ona se unistava, i ne mogu je ponovo
> dobiti iz stabla pomocu svojstva DATA.

Onda ne možeš čuvati referencu na MDI formu, čuvaj referencu na ono pomoću čega možeš napraviti formu (kao kada je prvi put praviš).
 
Odgovor na temu

zofr

Član broj: 126534
Poruke: 119
*.dynamic.sbb.rs.



+1 Profil

icon Re: MDI aplikacija i TreeView15.09.2009. u 22:47 - pre 177 meseci
Nazalost toga sam se i plasio. Napravicu dinamicki niz od elemenata koji sadrze sve sto mi treba i njegove elemente cu povezati sa cvorovima.

Ne mogu ni da napravim nesto kao:

pomDat : ^tpomDat gde pomDat^ sadrzi potrebne podatke, jer moze

.DATA := pomDat ali ne moze

.DATA^ := pomDat^

ipak hvala.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: MDI aplikacija i TreeView16.09.2009. u 01:14 - pre 177 meseci
> Ne mogu ni da napravim nesto kao:
> pomDat : ^tpomDat gde pomDat^ sadrzi potrebne podatke, jer moze
> .DATA := pomDat ali ne moze
> .DATA^ := pomDat^

Nisam te ovde razumeo, npr:

Code:

PPrgData = ^TPrgData;
TPrgData = record
  FileName: string;
  Size: Integer;
end;

var
  PrgData: PPrgData;
begin
  New(PrgData);
  PrgData.FileName := 'C:\test.txt';
  PrgData.Size := 100;
  Node.Data := PrgData;

  // Kasnije kada ti zatreba sačuvano
  PrgData := Node.Data;
  Caption := PrgData.FileName;  
end;

 
Odgovor na temu

zofr

Član broj: 126534
Poruke: 119
*.dynamic.sbb.rs.



+1 Profil

icon Re: MDI aplikacija i TreeView16.09.2009. u 22:50 - pre 177 meseci
To je OK dok otvaram prvu MDI formi. Ali za drugu ne smem da koistim istu varijablu pointer tipa PrgData. Ustvari nisam probao sta ce biti ako:

new(PrgData);
Node.Data := PrgData;

pa ponovo za drugu:

new(PrgData); //sledi postavljanje PrgData^
Node.Data := PrgData;

i t. d.

Ako je ovo moguce (mada mi je nelogicno), a moracu da probam, onda oslobadjanje memorije mora da ide sa:

PrgData := Node.Data;
dispose(PrgData);
Node.Data := nil;

pa opet za drugi cvor:

PrgData := Node.Data;
dispose(PrgData);
Node.Data := nil;

Ako je ovo moguce onda je moj problem jednostavno resen. Sta ti mislis?

Pozdrav.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: MDI aplikacija i TreeView17.09.2009. u 00:53 - pre 177 meseci
> To je OK dok otvaram prvu MDI formi. Ali za drugu ne smem da koistim istu varijablu pointer tipa PrgData. Ustvari nisam probao sta ce biti ako:
> Ako je ovo moguce (mada mi je nelogicno), a moracu da probam, onda oslobadjanje memorije mora da ide sa:
> Ako je ovo moguce onda je moj problem jednostavno resen. Sta ti mislis?

Da, moguće je, svaki poziv New procedure alocira jedinstven objekat. Pročitaj sledeći članak, pomoći će ti da bolje razumeš pointere.
http://rvelthuis.de/articles/articles-pointers.html




 
Odgovor na temu

zofr

Član broj: 126534
Poruke: 119
*.dynamic.sbb.rs.



+1 Profil

icon Re: MDI aplikacija i TreeView17.09.2009. u 22:41 - pre 177 meseci
Probao sam. Stvarno je moguce da parametar procedure new() ne mora da ima nil vrednost. Ja sam mislio da mora, a do sada nikada nisam imao potrebu da rezervisem prostor za dinamicku varijablu kojoj je vec dodeljen prostor, cinilo mi se nelogicno. Hvala ti sto si me naterao da razbijem tu predrasudu.

Imas li ideju kako da iz programa prebacujem fokus sa jedne MDI forme na drugu?

Bas preterujem ali sam danas svasta probao i ne ide.

Hvala ti na svemu do sada.

Pozdrav.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: MDI aplikacija i TreeView18.09.2009. u 12:51 - pre 177 meseci
> Imas li ideju kako da iz programa prebacujem fokus sa jedne MDI forme na drugu?

Možda SetFocus, BringToFront, SetActive, slanje WM_MDIACTIVATE.
 
Odgovor na temu

zofr

Član broj: 126534
Poruke: 119
*.dynamic.sbb.rs.



+1 Profil

icon Re: MDI aplikacija i TreeView20.09.2009. u 22:31 - pre 177 meseci
Sad dodjoh kuci, pa evo...

Odmah sam probao SetFocus, jos pre nego sto sam postavio pitanje, ali nije uspelo. Samo je proradio kursor na zaljenoj MDI formi, ali sama MDI forma nije selektovana. Mislim da je problem mozda u tome sto zelim da fokusiram MDI formu na klik dogadjaj od stabla. Mozda treba na otpustanje tastera misa?

Pozdrav.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: MDI aplikacija i TreeView

[ Pregleda: 2250 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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