CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

dział ogólny

Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

Nowy postprzez dodo123 » poniedziałek, 10 października 2011, 13:49

Przenosiliśmy projekt z BDS2006 do Delphi RAD Studio XE i się narobiło: :cry:
1.w projekcie zdefiniowany je obiekt typu TFrame (TImgObrazki) zawierający 3 obiekty typu TImageList,
w których umieszczone zostały wszystkie obrazki (kolorowe,wyszarzone i specjalne) używane w projekcie do podpinania na listach akcji lub na przyciskach( wielkość pliku dfm - ok.3,7 MB)
2.W projekcie zdefiniowany został formularz bazowy (TFormStdPasek), w którym wykorzystano obiekt TImgObrazki, wielkość pliku dfm ok. 3,8 MB
3.Zdefiniowane zostały klasy formularzy o różnych funkcjonalnościach jako klasy potomne po formularzu bazowym (TFormStdPasek) wielkości plików dfm - od 2 do 7 KB
Problem:
W środowisku Windows 7 Professional 32b i RAD Studio XE Enterprise w momencie otwierania pliku *.dfm formularza potomnego jest do niego automatycznie wklejany cały kod obiektu TImgObrazki (niezależnie od poziomu w hierarchii dziedziczenia),co powoduje zwiększenie każdego pliku do prawie 4 MB, a w efekcie pliku exe z 8 MB do 60 MB.
Inne obiekty dziedziczone z formularza bazowego mają zapisy tylko w przypadku różnic, jak dotyczas.

W środowisku Windows XP i RAD Studio XE Professional wszystko jest OK.
przykład:
dotychczas i w Windows XP+RAD Studio XE Professional:

KOD cpp:     UKRYJ  
 inherited Frame1: TIMGObrazki
    Left = 2
    Top = 0
    ExplicitLeft = 2
    ExplicitTop = 0
  end
  inherited SiatkaButtons: TToolBar
    DisabledImages = Frame1.DisObrazki
    Images = Frame1.Obrazki
    ExplicitWidth = 803
  end


Windows 7 Professional 32b i RAD Studio XE Enterprise:
KOD cpp:     UKRYJ  
  inherited Frame1: TIMGObrazki
    inherited DisObrazki: TImageList
      Bitmap = {.....
        494C0101A900AE001C001C001C00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
        000000000000360000002800000070000000B40400000100200000000000003B
                .....}   razem 17 500 linii
    end
    inherited Obrazki: TImageList
      Bitmap = {.....
        494C0101A900AE001C001C001C00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
        000000000000360000002800000070000000B40400000100200000000000003B
                .....}   kolejne 17 500 linii
    end
    inherited MenuBarImageList28: TImageList
      Bitmap = {
        494C0101B300B80018001C001C00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
        000000000000360000002800000070000000EC0400000100200000000000009D
                .....}   kolejne 10 500 linii

    end
  end
  inherited SiatkaButtons: TToolBar
    DisabledImages = Frame1.DisObrazki
    Images = Frame1.Obrazki
    ExplicitWidth = 803
  end


Uwagi:
1.Jeżeli plik dfm przeniesiemy ze środowiska 1 do środowiska 2 bez otwierania,to kompilacja też przebiega bez błędów.
2.W środowisku Windows 7 Professional 32b i RAD Studio XE Enterprise plik dfm "wzbogacony" przy otwarciu o bitmapy obrazków nie daje się otworzyć menu kontekstowego z opcji ->View as Text i generuje komunikat:
Module "C:\ ... .pas" has open descendents or linked modules. Cannot close.
O co chodzi?
:cry:
Avatar użytkownika
dodo123
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): poniedziałek, 10 października 2011, 13:12
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows 7 pro 32 bit
Kompilator: RAD Studio XE (Enterprise)
Gadu Gadu: 0
    Windows XPInternet Explorer 8

Re: Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

Nowy postprzez Cyfrowy Baron » poniedziałek, 10 października 2011, 15:19

Ty to jakoś ręcznie przenosiłeś, czy po prostu otworzyłeś stary projekt w nowym środowisku i toż środowisko dokonało konwersji ze starego na nowe?

Skoro umieściłeś obrazki w TImageList to nie dziw się, że zostały one dodane do pliku aplikacji. Zasada jest prosta, jeżeli umieszczasz w pliku aplikacji np. bitmapę o rozmiarze np. 10 MB to rozmiar pliku EXE wzrośnie dokładnie o 10 MB. Jeżeli nie miałeś tego w starej wersji środowiska, to być może dlatego, że nie miałeś ustawionej kompilacji razem z bibliotekami i aplikacja w chwili uruchomienia doczytywała sobie pliki z dysku. Po przejściu na nową wersję, domyślnie może być ustawiony tryb kompilacji razem z bibliotekami. Tylko spekuluję, gdyż nie mam dostępu do środowiska w wersji XE.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

Nowy postprzez dodo123 » wtorek, 11 października 2011, 09:11

Chodzi o to, że bitmapy ładują się do każdego formularza potomnego ( jesli mam trzy formularze dziedziczące po formularzu zawierającym TImageList to w każdy z nich ładuje się 10 MB bitmapy). Poza tym w środowisku Windows XP i wersji professinal RAD Studio wszystko jest prawidłowo (tzn bitmapy są tylko na formularzu "głównym")
Avatar użytkownika
dodo123
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): poniedziałek, 10 października 2011, 13:12
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows 7 pro 32 bit
Kompilator: RAD Studio XE (Enterprise)
Gadu Gadu: 0
    Windows XPInternet Explorer 8

Re: Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

Nowy postprzez Cyfrowy Baron » wtorek, 11 października 2011, 17:06

Więc to jakiś BUG środowiska. Na to jedynym lekarstwem mogą być tylko patche. Swego czasu też miałem problem z C++Builder 2010 i dopiero patche rozwiązało problemy.
Jedyne rozsądne rozwiązanie jakie mi się teraz nasuwa, to po przekonwertowaniu projektu powinieneś usunąć z niego wszystkie bitmapy i ponownie dodać.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 6 gości

cron