Cannibal666 Опубликовано 12 сентября, 2008 Жалоба Share Опубликовано 12 сентября, 2008 Подскажите ,как правильно составить алгоритм программы: допустим у меня есть 20 пунктов PopupMenu L1;l2..L19;L20 каждому из каторых нужно присвоить имена файлов из определённой папки и вообще можно-ли обойтись без объявления лишних пунктов (если новый файл найден то создать новый пункт и присвоить ему имя этого файла) //////////////////////////// ///я реализовал Это так:/// //////////////////////////// Procedure TForm1.QuickLaunch; var myini :TIniFile; //файл конфигураций searchResult : TSearchRec; //результат поиска m: integer; //номер строки в файле конфига begin m:=0; if FindFirst('\Documents and Settings\Администратор\Application Data\Microsoft\Internet Explorer\Quick Launch\*.lnk', faAnyFile, searchResult) = 0 then begin //ищем все файлы в вышеуказанной папке с расширением "lnk" (ярлыки) repeat m := m + 1; //номер строки в файле конфига каждый раз увеличмваем на 1 //создадим файл конфигураций myini:=Tinifile.Create(changeFileExt(Application.exename,'opt.ini')); try myini.WriteString('QuickLaunch',inttostr(m),searchResult.Name); finally //записываем в файл конфигураций номер строки и имя файла myini.Free; end; until FindNext(searchResult) <> 0; //ищем далее FindClose(searchResult); end; end; ///////////////// ///после чего:/// ///////////////// procedure TForm1.FormCreate(Sender: TObject); begin QuickLaunch; // запуск процедуры "QuickLaunch" myIni:=TiniFile.Create(changeFileExt(Application.exename,'opt.ini')); try //далее читаем из файла конфигураций L1.Caption:=myini.ReadString('QuickLaunch','1',''); //и присваиваем пунктам PopupMenu имена ранее найденых файлов if L1.Caption <> '' then L1.Visible:=true; // если имя не равно '' тогда "L1.Visible:=true;" L2.Caption:=myini.ReadString('QuickLaunch','2',''); // по умолчанию "L1.Visible:=false;" if L2.Caption <> '' then L2.Visible:=true; // и так далее L3.Caption:=myini.ReadString('QuickLaunch','3',''); -//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//- finally myIni.Free; end; вобщем подскажите пожалуйсто , как сделать проще , иначе такая путаница получается... Ссылка на комментарий Поделиться на другие сайты More sharing options...
Флэйм Опубликовано 13 сентября, 2008 Жалоба Share Опубликовано 13 сентября, 2008 А зачем инишник создавать? Криэйть сразу пункты меню: Новый элемент верхнего уровня: procedure TForm1.AddMainItem(s: string); var newitem: TMenuItem; begin newitem := TMenuitem.Create(НАЗВАНИЕМЕНЮ); newitem.caption := s; {если надо определить событие onclick newitem.onclick:=НАЗВАНИЕФУНКЦИИОБРАБОТЧИКА; } {добавляем это к верхнему уровню меню в конец} НАЗВАНИЕМЕНЮ.items.insert(НАЗВАНИЕМЕНЮ.items.count, newitem); end; Создание подменю: procedure TForm1.AddSubItem(s: string; to : integer); var newitem, toitem: TMenuitem; begin {to = верхний уровень меню для нового пункта} toitem := НАЗВАНИЕМЕНЮ.items[to ]; newitem := TMenuItem.create(toitem); newitem.caption := s; {если надо определить событие onclick newitem.onclick:=НАЗВАНИЕФУНКЦИИОБРАБОТЧИКА; } toitem.onclick := nil; toitem.insert(toitem.count, newitem); end; Или смотри функции: function NewItem(const ACaption: string; AShortCut: TShortCut; AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent; hCtx: THelpContext; const AName: string): TMenuItem; function NewSubMenu(const ACaption: string; hCtx: THelpContext; const AName: string; const Items: array of TMenuItem ; AEnabled: Boolean = True): TMenuItem; Ссылка на комментарий Поделиться на другие сайты More sharing options...
BearKing Опубликовано 20 сентября, 2008 Жалоба Share Опубликовано 20 сентября, 2008 Вопросы по данному языку программирования, задавать в тему, находящуюся выше. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Заархивировано
Эта тема находится в архиве и закрыта для дальнейших ответов.