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

Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

Nowy postNapisane: poniedziałek, 10 października 2011, 13:49
przez dodo123
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:

Re: Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

Nowy postNapisane: poniedziałek, 10 października 2011, 15:19
przez Cyfrowy Baron
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.

Re: Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

Nowy postNapisane: wtorek, 11 października 2011, 09:11
przez dodo123
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")

Re: Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami

Nowy postNapisane: wtorek, 11 października 2011, 17:06
przez Cyfrowy Baron
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ć.