Перейти к содержанию

Как сделать проще?


Cannibal666

Рекомендуемые сообщения

Подскажите ,как правильно составить алгоритм программы:

допустим у меня есть 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;

 

вобщем подскажите пожалуйсто , как сделать проще , иначе такая путаница получается...

Ссылка на комментарий
Поделиться на другие сайты

А зачем инишник создавать? Криэйть сразу пункты меню:

 

Новый элемент верхнего уровня:

 

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;

Ссылка на комментарий
Поделиться на другие сайты

Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

×
×
  • Создать...