Delphi RAD Studio XE-dziedziczenie formularzy z bitmapami
Napisane: poniedziałek, 10 października 2011, 13:49
Przenosiliśmy projekt z BDS2006 do Delphi RAD Studio XE i się narobiło:
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:
Windows 7 Professional 32b i RAD Studio XE Enterprise:
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?
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
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
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?