Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2010, 22:35   #1
krikaved
Пользователь
 
Регистрация: 26.02.2010
Сообщений: 66
По умолчанию Работа с динамическими картинками

Есть главная форма F_MainForm. На главной форме по нажатию на кнопку RzButton_Bloknot динамически появляется форма F_Bloknot:
Код:
procedure TF_MainForm.RzButton_BloknotClick(Sender: TObject);
begin
F_Bloknot:=TF_Bloknot.Create(Application);
F_Bloknot.ShowModal;
F_Bloknot.Free;
end;
На появившейся форме одновременно появляются динамически разного размера картинки. По закрытию формы картинки должны быть очищены.
Вопрос: как правильно создавать динамически картинки, чтобы как можно меньше использовать памяти? Использовать один JPG (JPG:=TJPEGImage.Create) или создавать каждый отдельно JPG, JPG1, JPG2 и т.д.?
Код:
procedure TF_Bloknot.FormActivate(Sender: TObject);
begin
JPG:=TJPEGImage.Create;
JPG.LoadFromFile('D:\Images\1.JPG');
Image1.Canvas.Draw(-15,-5,JPG);
JPG.Free;

JPG:=TJPEGImage.Create;
JPG.LoadFromFile('D:\Images\2.JPG');
Image2.Canvas.Draw(0,-17,JPG);
JPG.Free;

JPG:=TJPEGImage.Create;
JPG.LoadFromFile('D:\Images\3.JPG');
Image3.Canvas.Draw(0,-17,JPG);
JPG.Free;

JPG:=TJPEGImage.Create;
JPG.LoadFromFile('D:\Images\4.JPG');
Image4.Canvas.Draw(0,0,JPG);
JPG.Free;
end;
Нужно ли по закрытию формы делать так:
Код:
procedure TF_Bloknot.FormClose(Sender: TObject; var Action: TCloseAction);
begin
JPG.Free;
end;

Последний раз редактировалось krikaved; 17.03.2010 в 22:42.
krikaved вне форума Ответить с цитированием
Старый 17.03.2010, 23:27   #2
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

У вас все правильно создавать каждый отдельно JPG, JPG1, JPG2 и т.д. не надо. По закрытию формы JPG.Free; не нужно так как в procedure TF_Bloknot.FormActivate(Sender: TObject); вы уже это сделали
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 17.03.2010, 23:40   #3
krikaved
Пользователь
 
Регистрация: 26.02.2010
Сообщений: 66
По умолчанию

Спасибо!
У меня ещё по нажатии на соответствующую картинку открывается программа или папка. А для открытия программы или папки, что лучше использовать ShellExecute или WinApi или ещё что-то, чтобы меньше использовать памяти? Нужно ли что-то ещё очищать по закрытию формы?
Код:
procedure TF_Bloknot.Image1Click(Sender: TObject);
begin
ShellExecute(F_Bloknot.Handle, nil, PChar('excel.exe'), nil, nil, SW_ShowNormal);
Close;
end;
krikaved вне форума Ответить с цитированием
Старый 17.03.2010, 23:48   #4
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

ShellExecute и есть из WinApi. Из привиденного закрывать не чего не надо
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]

Последний раз редактировалось mihali4; 18.03.2010 в 02:18.
Volt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с динамическими массивами _grusha_ Помощь студентам 2 22.04.2009 19:46
Работа с динамическими переменными DonLena Фриланс 4 15.10.2008 18:13
Работа с динамическими переменными DonLena Паскаль, Turbo Pascal, PascalABC.NET 1 14.10.2008 20:05
Работа с картинками в Delphi Alar Общие вопросы Delphi 0 29.10.2006 21:21