Mam powazny problem. Ikony 32bitowe

0
var
  x,y:TStringStream;
begin
  x:=TStringStream.Create('');
  form1.App.Picture.Icon.Handle:=ExtractIcon(Hinstance,PChar('c:\windows\explorer.exe'),0); // APP to obiekt TIMAGE na formie
  app.Picture.icon.SaveToStream(x);

  y:=Tstringstream.Create(x.DataString);
  Form1.image1.Picture.icon.LoadFromStream(y); // Image1 inny obrazek Timage na formie

Przy takiej konstrukcji pierwsza obrazek APP wyswietla sie prawidlowo, ale kiedy przekopiuje to w ten sposob do drugiego obrazka to jest wyswietlany blednie, wyglada jak by mial 16 kolorów.

Dlaczego tak? to przyklad, pisze program ktory pobiera ikone i przesyla ja do drugiego programu za pomoca Gniazd z wykorzystaniem SENDTEXT dlatego uzylem TStringStream.

Wiec... Eksperci, blagam pomozcie :-(

0

Pewien nie jestem ale najprawdopodobniej właściwości obiektu Icon w drugim obrazku są źle ustaione. Chodzi mi o to, że podczas ładowania ikony z pliku metoda ładująca sprawdza jaki jest format kolorów itd. i odpowiednio ustawia właściwości obiektu Icon. Natomiast ładując ze strumienia tego nie robi i pewnie musiał bys to zrobić "ręcznie". Może to pomoże.

0

Niestety definicja klasy TIcon(Moduł Graphics) w delphi nie pozwala ni obsługę 32bitowych Ikon. Wywołanie SaveToStream -> ImageNeeded -> WriteIcon;
powoduje przepisanie Ikony po 'Borlandowskiemu'. Taka sytuacja była bodajże do wersji 6 delphi(tak mowią źrodła) ale wątpie by coś sią zmieniło w nowszych wersjach.

0

juz skapnalem sie ze jaka kolwiek proba eksportu ikony gdzie kolwiek tak sie konczy.

Za to dziala przeslanie metoda SendBuf. Ale nie lubie tej metody. Wole samemu kodowac pakiety.

1 użytkowników online, w tym zalogowanych: 0, gości: 1