🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #346047

Re: Nie działa mi TImage tak jak powinien - moja indolencja z OOP?

#346047
From: Roman Tyczka
Date: Mon, 11 Sep 2017 12:02
45 lines
4256 bytes
On Sun, 10 Sep 2017 13:48:30 -0700 (PDT), Robert wrote:

> Witam Szanownych. 
> To mój pierwszy raz tutaj a z Delphi (XE) zaczynam przygodę i mam problem chyba związany z nieznajomością OOP bo nie wierzę, że komponent TImage jest wadliwy.
> Tak więc z góry przepraszam za trywialne pytanie ale walczę z problemem już na tyle długo, że musiałem sięgnąć po pomoc. 
> 
> Poniżej zamieściłem obcięte do minimum dwa moduły, z których wyrzuciłem wszystko co niezbędne i zostawiłem sama obsługę tworzenia obiektów i inicjacji obrazka. Funkcją tych modułów jest odczytanie i wyświetlenie danych z pliku w komponencie TVirtualStringTree. Z pliku odczytuję również pliki .jpg, które chcę wyświetlić w TImage w zależności od tego którą nodę kliknie się w Tree. 
> Odczyt i prezentacja danych tekstowych przebiegają właściwe. Problemem jest pokazanie tych obrazków. Gdy tworzę i inicjuję obiekt TFilm, to tworzę również pole fPoster do którego chcę na starcie wczytać plik, nazwijmy go - początkowy. Później w trakcie czytania danych z pliku obrazek początkowy zastępowany jest tym odczytanym z pliku i ten drugi ma być prezentowany w TImage. Niestety, drugi obrazek jest pokazywany tylko wtedy, gdy przy tworzeniu obiektu TFilm NIE przypiszę nic do pola fPoster. Gdy dokonam przypisania to widoczny jest wyłącznie ten pierwszy obrazek.
> 
> Jestem pewien, że czytam obrazki z pliku w sposób właściwy. Gdy w vsTreeNodeClick dla testu zapisuję obrazek do pliku to pojawia się ten właściwy: (Filmy.FilmInd[Data.NrF].Poster.SaveToFile();)
> Co więcej, gdy w tej samej procedurze zapisuję do pliku zawartość ImgPoster.Picture. to również zapisuje się właściwy obraz, lecz równocześnie na formie wyświetlany jest zły. Gdzie się przewróciłem? Proszę o pomoc.

Czytałem trzy razy i nie do końca potrafię wyczytać w czym masz problem.
Otworzyłem aplikację w Berlinie, usunąłem błędy kompilacji, odpaliłem i po
usunięciu jeszcze AV, bo dziwnie jakoś naokoło pobierałeś klikniętego noda
zamiast po prostu:

procedure TForm1.vsTreeNodeClick(Sender: TBaseVirtualTree; const HitInfo:
THitInfo);
var
    Data:PRekordNody;
begin
 with Sender do
  begin
   Data := GetNodeData(HitInfo.HitNode);
   ImgPoster.Picture.Assign(Filmy.FilmInd[Data.NrF].Poster);
  end;
end;

...aplikacja zadziałała tak, że tree jest po wczytaniu pliku puste (brak
jakichkolwiek tekstów) ale ma 5 wierszy i gdy po nich klikam to na przemian
w TImage pokazują się dwa obrazki.
Czy tak miało być czy inaczej?

Mam za to uwagi następujące. Nie polecam używać w takim wypadku rekordów,
bo rekord przy przypisaniu jest kopiowany, przez co trudno jest przenosić
nim dane w te i z powrotem. Używaj obiektów, a najlepiej interfejsów, bo w
kodzie masz możliwość pobrania kompletnego info o filmie i interfejs byłby
tu idealny, gdyż po pierwsze nie musisz się martwić o odpowiedzialność za
zwalnianie, po drugie możesz mieć kilka interfejsów do tego samego obiektu
i jeden z nich może być read only.

-- 
pozdrawiam
Roman Tyczka
Technical Details
Message-ID: <3qpkbs13vlxo.dlg@tyczka.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!feeder.erje.net!1.eu.feeder.erje.net!ecngs!feeder2.ecngs.de!81.171.118.61.MISMATCH!peer01.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <ca539309-9239-463b-8e2a-642c67db76c2@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!feeder.erje.net!1.eu.feeder.erje.net!ecngs!feeder2.ecngs.de!81.171.118.61.MISMATCH!peer01.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: Roman Tyczka <noemail@because.no>
Subject: Re: Nie działa mi TImage tak jak powinien - moja
 indolencja z OOP?
Newsgroups: pl.comp.lang.delphi
User-Agent: 40tude_Dialog/2.0.15.84
MIME-Version: 1.0
Sender: romek@tyczka.no.found
References: <ca539309-9239-463b-8e2a-642c67db76c2@googlegroups.com>
Date: Mon, 11 Sep 2017 14:02:32 +0200
Message-ID: <3qpkbs13vlxo.dlg@tyczka.com>
Lines: 45
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 94.75.90.137
X-Trace: 1505131351 unt-rea-b-01.news.neostrada.pl 649 94.75.90.137:10228
X-Complaints-To: abuse@news.neostrada.pl
X-Received-Bytes: 3984
X-Received-Body-CRC: 3215272624
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit