[ Vladica Savić @ 22.05.2007. 20:33 ] @
Pozdrav ljudi, kako mogu da dobijem putanju do slike koju koristi Image???
Za pronalazenje putanje za moj exe mogu da koristim npr. Extractfilepath(application.ExeName); ali naisao sam na jedan deo za nesto sto radim, gde treba da pronadjem odakle neki Image vuce sliku koju prikazuje... Kako da to uradim?
Pozdrav, svima koliko vas ima od mene posle duzeg vremena
[ Nemanja Avramović @ 22.05.2007. 21:18 ] @
Mislim da Image ne pamti putanju slike već kad učitaš sliku sama slika (binarni fajl) se učita u memoriju računara tako da mu fajl sa hard diska više ne treba, a ako sliku dodaš u designtime-u onda se slika ugrađuje u exe.
[ Vladica Savić @ 22.05.2007. 21:27 ] @
Hmmmm Ali meni treba da dobijem adresu slike koja je ucitana da je koristim za nesto drugo. Znam da mu ne treba kad se ucita. Ali meni treba
[ Nemanja Avramović @ 22.05.2007. 22:05 ] @
Pa kreiraj globalnu promenljivu putanjadoslike tipa string pa kod svakog učitavanja slike zapiši putanju slike na hardu u tu promenljivu
[ Vladica Savić @ 22.05.2007. 22:36 ] @
Hm, posto imam veci broj slika ovo nerado radim :P Ali, posto mi nema druge...
TNX u svakom slucaju, a ako ima i neko bolje resenje za ovo nek postuje. PozZz
[ Srki_82 @ 23.05.2007. 07:09 ] @
Slika moze da se ucita iz bolo kog stream-a, cak i onih koji nemaju putanje (npr. memory stream). Slika ne moze da zna odakle je ucitana. Na tebi je da napravis mehanizam koji ce da cuva naziv slike u nekoj promenljivoj.

Ako neces da kreiras promenljivu samo za cuvanje putanja, mozes da iskoristis Tag property slike. Tag je Integer tipa, ali mozes da ga castujes u Pointer i da u njemu cuvas sta hoces (putanju, komentar, autora, velicinu u kb,...).
[ savkic @ 23.05.2007. 08:02 ] @
> Ako neces da kreiras promenljivu samo za cuvanje putanja, mozes da iskoristis Tag property slike. Tag je Integer tipa, ali mozes da ga castujes
> u Pointer i da u njemu cuvas sta hoces (putanju, komentar, autora, velicinu u kb,...).

Samo ako taj pointer na koji se upućuje nastavi da postoji, npr. ako se uzme pointer na lokalnu promenljivu onda će čim se izađe iz metode promenljiva biti uništena i memorija nevažeća. Bolje je da izričito koristi GetMem na PChar i posle je oslobodi, ili još bolje da napravi izvedenu klasu i u njoj doda svojstvo koje želi.
[ Miloš Baić @ 23.05.2007. 08:41 ] @
Solidno rešenje za tvoj problem bi moglo biti SQLite. Naime, memorišeš u bazu neki identifikator slike(naziv, id_broj, etc.), potom link(string) ka tom fajlu, slici. Uzmi za predpostavku da imaš "matični" folder u kojem ti je .exe i pod folder "slike" gde su ti smeštene slike. U tabelu bi memorisao nešto slično ovome:
Code:
insert into naziv_tabele (id_slike, path) values (1, '..\Slike\Slika_1.jpg');

Pa onda, kad ti slika zatreba, učitaš je, npr. ovako:
Code:
...
var
  OpenImage:String;
begin
  OpenImage := ExtractFilePath(Application.ExeName) + Query_komponenta.FieldByName('path').AsString;
  if FileExists(OpenImage) then 
      FindOrOpenFile(OpenImage);
end;
...

Mana ovakvog pristupa je što se vezuješ za podfolder sa slikama, odnosno mora biti tamo gde je i .exe aplikacije. Naravno, iskoristi SQLite te memoriši još neke podatke koji bi mogli biti interesantni za aplikaciju.

Pišem iz glave, nisam isprobao.

Pozdrav.
[ Miloš Baić @ 23.05.2007. 08:45 ] @
Napravio sam dva ista posta, neka moderator to reguliše.
Unapred hvala.
[ Srki_82 @ 23.05.2007. 08:56 ] @
@savkic
Naravno da pointer mora da nastavi da postoji, predpostavio sam da zna da radi sa pointerima. Tag sam spomenuo samo zato sto je rekao da ne bi da kreira dodatne promenljive.
[ Vladica Savić @ 23.05.2007. 10:30 ] @
Ok, ljudi, probacu i to