Удаление ненужных данных DFM из TImage32 (библиотека Graphics32)
У меня есть элемент управления, полученный из TImage32:
TChromaDisplay = class(TImage32)
Все хорошо, за исключением того, что когда я опускаю TChromaDisplay на форму, полученный файл DFM становится огромным (300 КБ вместо <1 КБ), потому что у меня есть данные мусора (это просто серое изображение), сохраненные в поле Bitmap.Data. Растровое изображение создается и заполняется серым цветом каждый раз, когда я опускаю свой элемент управления в форме. Я не хочу сохранять содержимое изображения (мусора) в файл DFM, так как это увеличивает размер EXE, но я не знаю как.
Вероятно, мне нужно написать где-нибудь в TChromaDisplay. Создайте, что у меня нет данных изображения, сохраненных / сохраненных в моем TChromaDisplay. Но я не знаю, где и как это сделать.
object Display: TChromaDisplay
Left = 0
Top = 0
Width = 1465
Height = 246
Bitmap.Data = {
C0000000C0000000EBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFF
EBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFF
EBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFF
etc
etc
etc
Я пробовал это в Create, но не поможет:
Bitmap.Width := 1;
Bitmap.Height:= 1;
2 ответа
Обновить:
Глядя на диалог времени разработки изображения GR32_Dsgn_Bitmap.pas
за TImage32.Bitmap
собственность, Clear
Кнопка там использует Bitmap.Delete
Процедура, которая просто устанавливает размер растрового изображения на 0x0. Поэтому вы можете попытаться вызвать его, чтобы очистить растровое изображение перед сохранением потока формы:
type
TChromaDisplay = class(TImage32)
protected
procedure WriteState(Writer: TWriter); override;
end;
implementation
procedure TChromaDisplay.WriteState(Writer: TWriter);
begin
Bitmap.Delete;
inherited;
end;
Но это все еще не объясняет, почему у вас есть растровые данные, когда вы помещаете элемент управления в форму. Вы также можете позвонить Bitmap.Delete
в вашем конструкторе управления после того, как унаследованная часть сделана (когда Bitmap
уже создан).
Все еще не проверено, так как я не могу смоделировать вашу проблему.
Это не "мусор". Это изображение (будь то назначенное вами или созданное элементом управления в его конструкторе). Это растровое изображение, расположенное в позиции 0
, 0
с шириной и высотой 1465
, 246
,
BitmapData
это данные в растровом изображении (пиксели и т. д.), закодированные в виде шестнадцатеричной строки, поэтому они будут помещены в текст dfm.
Решение состоит в том, чтобы выяснить, как назначается растровое изображение. Это либо:
- В конструкторе компонента (изображение по умолчанию?)
- В вашей форме (вы назначили изображение в IDE)
- Он не удаляется из DFM в предыдущий раз, когда он был назначен.
Первый требует, чтобы вы внимательно изучили исходный код компонента, чтобы выяснить, где он назначен. Вы можете проверить, как свойство bitmap вызывается внутри (например, FBitmap
или же FImage
), а затем искать места, которым он получает назначенное изображение (LoadFromFile
, LoadFromStream
, LoadFromResource
, Assign
, и так далее).
Второй и третий: сделайте резервную копию вашего dfm на всякий случай. Удалите компонент из вашей формы. Закомментируйте любой код, связанный с ним, чтобы ваш модуль скомпилировался. Щелкните правой кнопкой мыши и выберите View as Text
, Ищи TChromaDisplay
(или просто TChroma
) и удалите все, что вы найдете в dfm, связанной с ним. Щелкните правой кнопкой мыши и выберите View as Form
, а затем построить свой проект. Вернитесь в DFM и убедитесь, что все следы TChroma
все еще нет