WithStringGrid1.Objects[aCol,aRow] asTBitmap do
LoadFromFile(BmpPath+SR.Name);
aCol:=aCol+1;
IfaCol>StringGrid1.ColCount-1 then
Begin
aRow:=aRow+1;
aCol:=0;
end;
I:=FindNext(SR);
end;
FindClose(SR);
end;
Как видно из кода, в момент создания формы решаются следующие задачи:
•поиск всех файлов картинок (*.bmp) в каталоге, определенном переменной
BmpPath;
•запись имени файла в ячейку сетки;
•создание объекта класса TBitmap с одновременной установкой ссылки
на этот объект в ячейке сетки строк;
•загрузка изображения в объект;
•переход к новой ячейке.
В исходном коде есть функции FindFirst(), FindNext() и FindClose(), применяемые для поиска файлов и каталогов. Подробнее об этих функциях см. в главе 4 «Основы работы с файлами».
Обратимся к событию, отвечающему за прорисовку ячеек сетки:
procedureTForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
Begin
IfStringGrid1.Objects[ACol,ARow] isTBitmap then
WithStringGrid1.Canvas do
Draw(Rect.Left+15,Rect.Top+20, TBitmap(StringGrid1.Objects[ACol,ARow]));
end;
Этих двух процедур было бы вполне достаточно для сбора и отображения
картинок, но следуя правилу, принятому в Delphi, необходимо обеспечить
уничтожение созданных нами объектов.
Еще раз акцентирую внимание на том, что сетка хранит не сами объекты, а только ссылки на них, и с уничтожением таблицы созданные вами объекты не разрушаются. Ответственность за их уничтожение лежит на программисте.
В обработчике события OnCreate() формы проекта мы создаем несколько десятков объектов TBitmap. Предлагаю освободить занимаемые ресурсы в момент закрытия формы.
procedureTForm1.FormClose(Sender: TObject; varAction: TCloseAction);
varaCol,aRow:integer;
Begin
foraCol:=0 toStringGrid1.ColCount-1 do
Begin
foraRow:=0 toStringGrid1.RowCount-1 do
Begin
IfStringGrid1.Objects[aCol,aRow] isTBitmap then
withStringGrid1.Objects[aCol,aRow] asTBitmap dofree;
end;
end;
end;
Славно потрудились! А теперь нажмите клавишу F9. Если пример был повторен правильно, ячейки сетки заполнятся рисунками из коллекции Delphi (рис. 8.9).
Меню
На мой взгляд, присутствие программного меню в приложении является абсолютно необходимым условием для того, чтобы это творение смело могло
называться программным продуктом для Microsoft Windows. Вообще, по
сравнению с другими элементами управления, меню – это одно из самых
удачных дизайнерских решений программистов. Самое главное его достоинство заключается в том, что, практически не занимая места на форме, меню способно предоставить в распоряжение пользователя всю функциональность программы.
Различают два типа меню: главноеи всплывающее, или контекстное. Классический пример главного меню – меню программ пакета Microsoft Office или меню среды программирования Delphi. Главное меню размещается сразу под заголовком формы и, как правило, на самом верхнем уровне содержит пункты Файл, Правка, Окно и Справка. При выборе пункта верхнего уровня из него «выпадают» связанные с ним элементы нижнего уровня. В процессе проектирования вы можете размещать на форме сколько угодно компонентов главного меню (TMainMenu), однако после запуска приложение сможет отобразить только одно главное меню. Ограничений на численность всплывающих меню у приложения нет. В отличие от главного меню, всплывающее меню возникает на экране только после щелчка правой кнопки мыши по форме или элементу управления.
Программисты стараются не перегружать этот тип меню избыточными
пунктами и по негласной договоренности заполняют его операциями, относящимися именно к тому элементу управления, которому принадлежит это меню. Всплывающее меню называют контекстным, поскольку оно тесно
связано с его элементом управления.
С точки зрения иерархии наследования как главное, так всплывающее меню берут начало от уже изученного нами класса TComponent (см. главу 6 «Невидимые классы»). В Delphi реализовано два
компонента, предоставляющих программисту все возможности главного (TMainMenu) и всплывающего (TPopupMenu) меню (рис. 8.10). Оба компонента вы обнаружите на первой странице стандартных (Standard) элементов управления палитры компонентов Delphi. По сути, оба элемента
управления представляют собой контейнеры, обеспечивающие хранение и доступ к отдельным пунктам меню – элементам, построенным на основе класса TmenuItem.
Элементы управления TMainMenu и TPopupMenu снабжены специализированным редактором, значительно упрощающим процесс дизайна меню. Для вызова редактора меню (рис. 8.11) достаточно дважды щелкнуть левой кнопкой мыши по компоненту меню или выбрать свойство Items в Инспекторе объектов.
Для создания пункта меню достаточно выделить курсором мыши пустую область и в поле Caption Инспектора объектов присвоить пункту название.
Пункты меню второго уровня способны обладать подменю, для создания которого достаточно щелкнуть правой кнопкой мыши и во всплывающем меню выбрать пункт Create Submenu. При необходимости можно пересортировать пункты внутри меню, перетаскивая их мышью. И наконец, для удаления лишнего пункта просто нажмите клавишу Del.
Дата добавления: 2016-03-15; просмотров: 617;