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

Problem sa resursima komponente

[es] :: Pascal / Delphi / Kylix :: Problem sa resursima komponente

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

goblin
Milan Aleksic
Gtech Belgrade, Sofware Engineer II
Beograd

Član broj: 4055
Poruke: 85
*.ptt.yu

Jabber: milanaleksic@gmail.com
Sajt: www.milanaleksic.net


Profil

icon Problem sa resursima komponente05.07.2002. u 17:59 - pre 234 meseci
Imam komponentu unutar cijih resursa zelim da ubacim odredjene podatke (npr. duzi txt).

Uspeo sam da ubacim taj tekst u resurs aplikacije i da ga uspesno ucitam koristeci TResourceStream klasu, ali ako ubacim isti fajl u resurs komponente ne mogu da pristupim tim podacima, ni iz same komponente, a ni iz aplikacije. Dakle, na koji nacin da postignem sledece: ubacim (bilo koji tip podataka) u resurs moje komponente i da budem siguran da ce komponenta uvek moci da pozove taj svoj resurs, nezavisno od aplikacije u kojoj je implementiram ????

Thanx unapred...
Don't try to impress me... I'm good !
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 801
*.beg.sezampro.yu



+62 Profil

icon Re: Problem sa resursima komponente08.07.2002. u 09:32 - pre 234 meseci
Napravi svoju komponentu koja ce imati published property AnyText:string. Zatim mozes da:
1) U konstruktoru napunis taj string podacima. To znaci da gde god ti stavio taj komponent (na neki form, u designtime-u), tvoj tekst je tu (u .dfm fajlu) a samim tim je ulinkovan i u .exe fajlu;
2) Mozes da menjas taj tekst i u runtime-u, ako ti zatreba. Da, published property da bi se video u ObjectInspectoru mora imati read/write access.
Nije mi jasno sto se ljudi toliko muce sa resource-ima u Delphi-ju. Bar je u njemu to reseno na najbolji moguci nacin.

 
Odgovor na temu

goblin
Milan Aleksic
Gtech Belgrade, Sofware Engineer II
Beograd

Član broj: 4055
Poruke: 85
*.ptt.yu

Jabber: milanaleksic@gmail.com
Sajt: www.milanaleksic.net


Profil

icon Re: Problem sa resursima komponente08.07.2002. u 20:13 - pre 234 meseci
Citat:
Rapaic Rajko:
Napravi svoju komponentu koja ce imati published property ...


Pa najlakse bi bilo samo iskoristiti const string nego published property, ali nisam pitao to, vec kako da sam iskoristim resurse komponente... to nema veze sa samom klasom, vec da izbegnem guzvu u .pas source fajlu komponente. Ok za tekst, ali sta ako hocu da ubacim neku sliku ili fajl u komponentu? To mi je potrebno... svako bi se setio onog sa published property-jem... meni treba globalno resenje !

P.S. Cuva u .dcu fajlu, a ne u .dfm-u - tu se cuva kompajlirana forma ...
Don't try to impress me... I'm good !
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 801
*.beg.sezampro.yu



+62 Profil

icon Re: Problem sa resursima komponente08.07.2002. u 21:56 - pre 234 meseci
Citat:
goblin:
Citat:
Rapaic Rajko:
Napravi svoju komponentu koja ce imati published property ...


Ok za tekst, ali sta ako hocu da ubacim neku sliku ili fajl u komponentu? To mi je potrebno... svako bi se setio onog sa published property-jem... meni treba globalno resenje !

P.S. Cuva u .dcu fajlu, a ne u .dfm-u - tu se cuva kompajlirana forma ...


Cuj, PUBLISHED PROPERTY je sve u Delphi-ju. Veruj mi na rec. Hoces da cuvas sliku? No problem, napravis property MyPicture:TPicture. Zasto da otkrivas toplu vodu kad su tipovi iz Borlanda vec instalirali protocni bojler?
Ako mi ne verujes, trazi primer u kodu (za sta god hoces) i dobices ga. Skoro pet godina radim u Delphi-ju (iskljucivo kao component writer) i valjda vec znam sta pricam.
 
Odgovor na temu

sesa
Braslav Sesartic
Uzice

Član broj: 4872
Poruke: 27
*.ptt.yu



Profil

icon Re: Problem sa resursima komponente08.08.2002. u 09:38 - pre 233 meseci
Uvek postoje tipovi podataka koji nisu obradjeni od strane Borlanda ili
ne mogu da se pravilno interpretiraju u object instpectoru tj.
ne mogu da budu "published".
U tom slucaju moramo da u svojoj komponenti implementiramo:
procedure DefineProperties(Filer: TFiler); override;
tj. jos dve procedure (Twriter i Treader)

Primer imamo u dbgrids.pas fajlu tj. TCustomGrid komponenti koja
preko ovih metoda cuva TColumns u DFM fajlu.

Primera za upotrebu ovih metoda ima mnogo:
snimanje i direktan rad za WAV-ovima
snimanje regiona (Tregions)
...ostali nestandni tipovi podataka

BTW Skoro sedam godina radim u Delphi-ju valjda vec znam sta pricam. :)


 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 801
*.beg.sezampro.yu



+62 Profil

icon Re: Problem sa resursima komponente12.08.2002. u 09:04 - pre 233 meseci
Znaci, pravio si i neke property editore mozda!?

Rajko
 
Odgovor na temu

sesa
Braslav Sesartic
Uzice

Član broj: 4872
Poruke: 27
*.ptt.yu



Profil

icon Re: Problem sa resursima komponente12.08.2002. u 10:59 - pre 233 meseci
pravio sam (i jos pravim) sto-sta.
 
Odgovor na temu

Voodoo
Novi Beograd

Član broj: 3508
Poruke: 488
*.yubc.net



+1 Profil

icon Re: Problem sa resursima komponente18.08.2002. u 18:39 - pre 233 meseci
E znas da pravis komponente, pomagaj:

Vec dugo vremena pokusavam da napravim TMemo ili TRichEdit-izvedenu komponentu sa syntax-highlightingom. Koristio sam find i replace algoritme koji pristojno rade, ali samo sa malim tekstovima. Kako da ovo izvedem a da radi brzo/

Posto znam da je Delphi IDE pisan u Object Pascalu, koju komponentu su oni koristili za editor i ima li je na internetu za download?
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 801
*.beg.sezampro.yu



+62 Profil

icon Re: Problem sa resursima komponente19.08.2002. u 01:19 - pre 233 meseci
Mislim da se za Delphi editor koristi TRichEdit. Skoro sam pravio (i jos ga pravim) svoj format RichText-a, pa sam pogledao kako to radi Borlandov TRichText (koji je samo enkapsulacija Windows-ovog RichText-a, znaci ne postoji jasan kod). Pa kako sam onda provalio kako on radi? Prosto, analizirao sam format zapisa u .rtf fajl. Dakle:

1) Na pocetku fajla (nekakav heder) se zapisu svi fontovi koji postoje u tom fajlu (Name, Style, CharSet), zatim se zapisu sve velicine fontova koje postoje u tom fajlu (integer brojevi) i na kraju (heder-a) se zapisu sve boje fontova iz tog fajla.
2) Sada sledi tekst grupisan paragrafima. Paragraf pocinje sa, prakticno, tri integer-a: indeks fonta, indeks velicine i indeks boje. Zatim sledi sam tekst iz paragrafa i oznaka kraja paragrafa; zatim sledeci paragraf, pa sve nanovo itd.
3) I da, tu su jos po potrebi samo karakteri za newline (ili endline, svejedno).

Sve u svemu, ovaj format je pogodan za malo do umereno "saren" text. Medjutim, ako je text stvarno "nakindjuren", paragrafi se mnoze k'o skakavci, i samim tim velicina fajla rapidno raste.
Ja sam razvio drugaciji format. Postoji heder u kome se zapisuju samo fontovi (ali sa SVIM propertijima; znaci i velicina i boja). Zatim slede textitem-i koji se sastoje od dva bajta. Prvi je sam kod zadatog slova, a drugi je index fonta iz heder-a. Na taj nacin za svako slovo mi treba po dva bajta. Jasno da sam time ogranicen na samo 256 fontova (jedan bajt za index fonta), ali u praksi to sasvim dobro radi.

Dakle, mislim da bi tebi za highligting sasvim odgovarao klasican TRichText, samo prouci kako se radi sa njegovim paragrafima.

Rajko
 
Odgovor na temu

sesa
Braslav Sesartic
Uzice

Član broj: 4872
Poruke: 27
*.ptt.yu



Profil

icon Re: Problem sa resursima komponente20.08.2002. u 09:56 - pre 233 meseci
Ivane... Nije najjsavrsenije, al pokusaj. Vidi moze li se sta i sa OnKeyPress i KeyDown eventima

procedure TForm1.RichEdit1Change(Sender: TObject);
Const
KeyWord = 'CREATE';
Var OldColor : Tcolor;
begin
if UpperCase(copy(RichEdit1.text,RichEdit1.SelStart - length(keyword), length(keyword))) = Keyword then
begin
OldColor := RichEdit1.SelAttributes.Color ;
RichEdit1.SelStart := RichEdit1.SelStart - length(keyword) - 1;
RichEdit1.SelLength := Length(KeyWord);
RichEdit1.SelAttributes.Color := clRed;
RichEdit1.SelStart := RichEdit1.SelStart + length(keyword) + 1;
RichEdit1.SelLength := 0;
RichEdit1.SelAttributes.Color := OldColor;
end;
end;

Da bi sprecio "flickering" probaj da uglavis negde i
PostMessage( richedit1.handle, WM_SETREDRAW, 1, 0 ); // mozda posle ClRed
 
Odgovor na temu

goblin
Milan Aleksic
Gtech Belgrade, Sofware Engineer II
Beograd

Član broj: 4055
Poruke: 85
*.ptt.yu

Jabber: milanaleksic@gmail.com
Sajt: www.milanaleksic.net


Profil

icon Re: Problem sa resursima komponente25.08.2002. u 14:45 - pre 233 meseci
Hvala puno... vidi se da nisam bas dovoljno azurno pretrazivao source code koji su Borland-ovci tako velikodusno dali uz Delphi. Videh ja bar desetak puta TWriter, TReader i TFiler klase, ali me nije bas "toliko" zanimalo da provaljujem sta se unutra radi... Skapirao sam mehanizam DefineProperty(ies) i sad znam da se podaci cuvaju u dfm-u a ne u dcu-u (Rajko, izvini :), a i to da je mehanizam sam po sebi jednostavan... mada mi je za ideju koju sam imao ipak nije resenje upotreba gorenavedenih metoda

Samo da razjasnim zasta mi je u stvari i trebao resurs komponente: napravio sam emulator baze podataka (sopstveni tip, bez Variant tipova ili upotrebe bilo kog DB engine-a) koji sasvim pristojno radi i koji kao nacin definisanja hijerarhije podataka koristi "definiciju" (npr:"C*(byS+S+woT+T+N+R)+3*(byS+S)"). E, sada, posto je ovo nesto sasvim drugacije od koriscenih stvari bio je neophodan kraci tekst kao uputstvo (da bude element u komponenti, ne kao .txt fajl koji bi isao uz komponentu posto je potreban i prilikom kreiranja baze, a glupo je uz program davati .hlp fajl samo za definiciju). Ideja je bila da se pritiskom na dugme "Help" dinamicki kreira forma sa TMemo-om u sredini i da se onda iscita tekst iz resource-a. Ovo radi kada se menja .res fajl nekog programa i zatim podatak cita direktno iz tog programa; medjutim, kada se ubaci tekst u .res izvornog koda forme koja ide uz neku komponentu i iz koje (misli se na formu) se poziva taj tekst, resource sa tim ID-om ne postoji pa se tekst ne ucitava. Kao resenje sam jednostavno dodao jos jednu formu u paket komponente sa memo-om u koji sam ubacio tekst u design-time-u pa sada sve radi ok. Zasto sam uopste komplikovao stvar ranije nije mi bas jasno...

Uzgred, treba mi uporedjivanje brzine te moje emulirane baze podataka sa nekom stvarnom (ako posedujete podatke o brzini neke realne baze podataka-access, db, paradox).

Struktura: jedan field (string duzine 128KB) x 100 instanci. (ukupna velicina 12,5MB)
PC: P3-933, XP, 256MB RAM, Quantum 30GB 7200rpm

Sledece procedure idu jedna za drugom:
Kreiranje baznog stringa: 0:0051 (s:ms)
Unosenje podataka u bazu: 0:3571
Snimanje baze: 0:3380
Brisanje podataka u bazi: 0:0046
Ucitavanje baze: 0:3515
Ukupno: 1s:0886ms


P.S. uzgred, koristio sam QueryPerformanceCounter pa su mi zato precizna merenja...
P.P.S. izvinjavam se ako sam delovao malo grub u prethodnim porukama (prijemni za faks, pa sam bio malo nervozan itd. :)
P.P.S. na kraju, samo da kazem da sam i ja jurio syntax highlighting, i da sam ga resio na isti nacin kao u prethodnoj poruci, ali da je najveci problem flickering koji se javlja kada se neki deo teksta selektuje, pa promene svojstva..., ali evo resenja: Inno setup ima kompajler sa pristojnim syntax highlightingom. www.jrsoftware.org preko Spy++a sam saznao da koristi kontrolu "TSynEdit" koju sam nasao na sajtu http://synedit.sourceforge.net/ (kad vec spominjemo protocni bojler... :)
Don't try to impress me... I'm good !
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Problem sa resursima komponente

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

Postavi temu Odgovori

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