| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Эффективная работа с меню
Эффективная работа с меню:
Сегодня я покажу тебе, как создавать симпотичные менюшки и как работать с ними. А самое главное, ты научишся создавать пункты меню в рантайме, что просто необходимо при создании и использовании закладок в твоих прогах. Короче говоря, сегодняшний примерчик будет просто супер. Давай создадим новый проект. Брось на форму ControlBar из закладки Additional. Установи его свойство Align в alTop . Теперь брось на ControlBar1 два компонента ToolBar из закладки Win32, они появятся у тебя с именами ToolBar1 и ToolBar2. Установи у обоих такие свойства:
Теперь брось на форму один компонент ImageList из закладки Win32. Дважды щёлкни по немуи добавь туда 4-е картинки (какие добавил я, смотри на рис 1). Картинки должны быть размером 16х16. Едем далее. Брось на форму менюшку MainMenu из палитры Standart. Дважды щёлкни по ней, появится редактор меню с одним пустым элементом. Укажи его имя Caption равным, например, File и свойство Vasible=false. Появится два пустых элемента (справа, чтобы создать ещё одино выпадающее меню, и снизу, чтобы создать элемент выподающего меню). Поставб курсор на элемента снизу. Установи ему имя Caption=Файл и Name=FileMenu. Ещё ниже создай элемент с Caption=Правка и Name=EditMenu.
Теперь создадим дополнительные менюшки меню. Выдели созданное тобой меню Файл , щёлкни по нему правой кнопкой мыши и выбери в появившемся меню пункт Create Submenu . Создай там несколько пунктов (можешь как я, см рис 2). Главное, чтобы у тебя там был пункт с именем История и с именем Name=HistoryMenu. У ToolBar1 создай две кнопки с параметрами Caption равными Файл и Правка . У первой кнопки свойство MenuItem выставь в FileMenu, чтобы связать кнопку с пунктом Файл . У второй кнопки установи это же свойство в EditMenu. Теперь у ToolBar2 установи свойство Images в ImageList1 и создай на этой панели четыре кнопки (для этого щёлкни правой кнопкой по ToolBar2 и выбери пункт New Button . У тебя должно получится нечто похожее на рис 2. Всё, косметический ремонт закончен, теперь приступаем к программированию. Чуть не забыл. Брось ешё на форму OpenDialog из закладки Dialogs. Создадим обработчик события для пункта меню "Открыть": procedure TForm1.OpenMenuClick(Sender: TObject); begin // Выводим стандартное окно открытия файла if not OpenDialog1.Execute then exit; // Если файл выбран, то добавить его в меню "История" AddLastFile(OpenDialog1.FileName); end; Когда пользователь щёлкнул по менюшке "Открыть". Функция AddLastFile добавляет новый элемент в список "История". Она объявлена в разделе private и выглядит как: procedure TForm1.AddLastFile(Str: String); var NewItem: TMenuItem; i:Integer; begin //Проверяем, есть ли уже такой элемент в меню "История" //Если да, то выходим for i:=0 to HistoryMenu.Count-1 do if HistoryMenu.Items[i].Caption=Str then exit; //Создаём новый элемент NewItem := TMenuItem.Create(Self); //Устанавливаем для него заголовок NewItem.Caption:=Str; //Устанавливаю событие OnClick NewItem.OnClick:=LoadLastFile; //Добавляю в меню "История" HistoryMenu.Add(NewItem); //Если список в меню "История" уже больше 7, то удаляю первый элемент if HistoryMenu.Count>7 then HistoryMenu.Delete(0); end; По событию OnClick я устанавливаю обработчик создаваемого элемента LoadLastFile. Он объявлен в разделе private: private
{ Private declarations }
procedure AddLastFile(Str:String);
procedure LoadLastFile(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.LoadLastFile(Sender: TObject);
begin
end;
Эту функцию я оставлю пустой. Ты сам придумай, что в ней делать. Если у тебя это текстовый редактор, то прога должна уметь загрузить файлиз истории. Вот именно в этом обработчике это и надо делать. Это может выглядить так: procedure TGiffer.LoadLastFile(Sender: TObject);
begin
//Если файл существует, то открыть его
if FileExists(TMenuItem(Sender).Caption) then
DoOpenFile(TMenuItem(Sender).Caption)
else
//Иначе сообщение об ошибке
Application.MessageBox('Файл уже удалён.','Error!',
MB_OK + MB_ICONINFORMATION);
end;
Хочу тебя предупредить, что путь будет немного искорёжен. В параметре TMenuItem(Sender).Caption может содержатся, например, "E:&ProjectsTempVRProject1.dof". Как видишь, в этой строке содержится ненужный знак &. Я с ним уже намучился очень много и автоматом он убирается не всегда. Лучше удаляй его в ручную: //Ищем, символ & в строке TMenuItem(Sender).Caption
index:=pos('&', TMenuItem(Sender).Caption);
//Удаляем один символ в строке TMenuItem(Sender).Caption
//начиная с позиции index и всего 1 символ.
Delete(TMenuItem(Sender).Caption,index,1);
По событию формы OnClose я сохраняю состояние истории: procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var FileList:TStrings; i:Integer; begin //Создаю строковый список элементов FileList:=TStringList.Create; //Заполняю его for i:=0 to HistoryMenu.Count-1 do FileList.Add(HistoryMenu.Items[i].Caption); //Сохраняю в файл FileList.SaveToFile(ExtractFilePath(Application.ExeName)+'File.dat'); //Удаляю список FileList.Free; end; По событию OnShow я загружаю элементы procedure TForm1.FormShow(Sender: TObject);
var
FileList:TStrings;
i:Integer;
begin
//Если файл существует, то вперёд!!!
if FileExists(ExtractFilePath(Application.ExeName)+'File.dat') then
begin
//Создаю список элементов
FileList:=TStringList.Create;
//Загружаю историю
FileList.LoadFromFile(ExtractFilePath(Application.ExeName)+'File.dat');
//Добавляю элементы
for i:=0 to FileList.Count-1 do
AddLastFile(FileList.Strings[i]);
//Очищаю список
FileList.Free;
end;
end;
Напоследок, хочу посоветовать у всех кнопок, с которыми связаны меню установить свойство Grouped в true. Тогда кнопки будут выглядить как настоящие меню. Вот и всё!!! Наша крутая менюшка готова. Рубрика: Пользовательский интерфейс
Вышел MySQL 5.1.30, первый стабильный рели....
После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:
Подробнее... |
Рубрика: MySQL
| Добавлено: 28.11.2008
Тестирование параллельных программ.
Тестирование параллельного программного обеспечения представляет собой более сложную задачу по сравнению с тестированием последовательной программы. Программист должен знать о подводных камнях при тестировании параллельного кода, имеющихся методологиях и инструментарии.
Подробнее... |
Рубрика: Тестирование
| Добавлено: 28.11.2008
Архитектура AMD64 (EM64T).
Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.
Подробнее... |
Рубрика: Архитектура AMD
| Добавлено: 27.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|