Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как упростить алгоритм? Вопрос по DELPHI

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Как упростить алгоритм? Вопрос по DELPHI
Имя
Сообщение << Старые топики   Новые топики >>
Как упростить алгоритм? Вопрос по DELPHI - 2008-09-12 23:53:42.300000   
Cannibal666

Сообщений: 59
Оценки: 0
Присоединился: 2007-01-09 19:18:48.060000
Подскажите ,как правильно составить текст программы:
допустим у меня есть 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) &lt;&gt; 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 &lt;&gt; '' then L1.Visible:=true; // если имя не равно '' тогда "L1.Visible:=true;" L2.Caption:=myini.ReadString('QuickLaunch','2',''); // по умолчанию "L1.Visible:=false;" if L2.Caption &lt;&gt; '' then L2.Visible:=true; // и так далее L3.Caption:=myini.ReadString('QuickLaunch','3',''); -//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//-//- finally myIni.Free; end;

подскажите пожалуйсто , как сделать проще , иначе у меня такая путаница получается…
Post #: 1
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-13 03:12:52.733333   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
unit uMain; interface uses &nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, &nbsp; Dialogs, StdCtrls, Menus; type &nbsp; TForm5 = class(TForm) &nbsp;&nbsp;&nbsp; PopupMenu1: TPopupMenu; &nbsp;&nbsp;&nbsp; Button1: TButton; &nbsp;&nbsp;&nbsp; procedure FormCreate(Sender: TObject); &nbsp;&nbsp;&nbsp; procedure sdf1Click(Sender: TObject); &nbsp; private &nbsp;&nbsp;&nbsp; CurTag: integer; &nbsp;&nbsp;&nbsp; function AddMyMenu(fileName: TFileName): Integer; &nbsp;&nbsp;&nbsp; { Private declarations } &nbsp; public &nbsp;&nbsp;&nbsp; { Public declarations } &nbsp; end; var &nbsp; Form5: TForm5; implementation {$R *.dfm} procedure TForm5.FormCreate(Sender: TObject); var searchResult : TSearchRec ;&nbsp;&nbsp; //результат поиска begin &nbsp;curTag:=0; &nbsp;// ну с текущей директории ищем &nbsp;// подставишь нужную &nbsp;if FindFirst(ExtractFileDir(Application.ExeName)+'\*.*', faAnyFile, searchResult) = 0 then &nbsp; begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //ищем все файлы в вышеуказанной папке с расширением "lnk" (ярлыки) &nbsp;&nbsp;&nbsp; repeat &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (not (searchResult.Attr in [faDirectory])) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddMyMenu(searchResult.Name); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp; until FindNext(searchResult) &lt;&gt; 0; //ищем далее &nbsp;&nbsp;&nbsp; FindClose(searchResult); end; end; procedure TForm5.sdf1Click(Sender: TObject); begin /// if Sender.ClassNameIs('TMenuItem') then ShowMessage((sender as TMenuItem).Caption); end; function TForm5.AddMyMenu(fileName: TFileName): Integer; var MyMenuItem: TMenuItem; begin MyMenuItem := TMenuItem.Create(self); MyMenuItem.Caption:=fileName; self.PopupMenu1.Items.Add(MyMenuItem); inc(curTag); MyMenuItem.Tag:= curTag; MyMenuItem.OnClick:= sdf1Click; Result:=curTag; end; end. Примерно так
Пункт меню создаем динамически в функции AddMyMenu.
В качестве параметра пихаем имя файла
ну и ведем глобальный счетчик. Таг будет его значение - на всякий случай
Ну и цепляем на OnClick событие - обычную процедуру - sdf1Click
Понятно, что сендером будет пункт меню.
Там с директориями уж сам разберись.


Post #: 2
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-15 23:01:44.006666   
Cannibal666

Сообщений: 59
Оценки: 0
Присоединился: 2007-01-09 19:18:48.060000
Спасибо за ответ ; а как тогда добавить к субменю , чего-то у меня у самого не получается, за раннее благодарен за ответ.
Post #: 3
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-15 23:52:23.340000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: Cannibal666

Спасибо за ответ ; а как тогда добавить к субменю , чего-то у меня у самого не получается, за раннее благодарен за ответ.

Ну как

MyMenuItem.Caption:=fileName; self.PopupMenu1.Items.Add(MyMenuItem); MySubMenuItem := TMenuItem.Create(self); MySubMenuItem.Caption:='Подменю'; MyMenuItem.Add(MySubMenuItem); Add вызываешь для того пукта меню, подпунктом которого должно быть сабменю
Если ты задумал вложенные дирректории разобрать, то там рекурсивный вызов надо сделать
Post #: 4
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-16 01:24:32.420000   
TurboXaker

Сообщений: 385
Оценки: 0
Присоединился: 2008-05-23 01:05:40.516666
quote:

Если ты задумал вложенные дирректории разобрать, то там рекурсивный вызов надо сделать

есди он задумал всю файловую систему разобрать, то ему надо в процессе открытия менюшек/субменюшек орудовать, а не заранее :D
Post #: 5
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-16 01:57:52.420000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: TurboXaker

quote:

Если ты задумал вложенные дирректории разобрать, то там рекурсивный вызов надо сделать

есди он задумал всю файловую систему разобрать, то ему надо в процессе открытия менюшек/субменюшек орудовать, а не заранее :D

Так, а кто мешает?
Это ж проблема когда ее вызывать, а по сути код формирования меню тот же. Просто по атрибутам надо смотреть файл это или дирректория
Я ж специально показал, как зацепить onClick. И на него и надо вешать формирование сабменю
А родительский пункт меню как раз по тагу можно искать.
Post #: 6
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-16 06:32:17.273333   
Cannibal666

Сообщений: 59
Оценки: 0
Присоединился: 2007-01-09 19:18:48.060000
Теперь всё получилось , БЛАГОДАРЮ за ответы :D
Post #: 7
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-16 22:47:23.870000   
JohniJohni

Сообщений: 1
Оценки: 0
Присоединился: 2008-09-16 22:42:52.006666
Привет всем, я новенький у меня схожий вопрос a если мне нужно запустить одно из найденных приложений
procedure TForm1.sdf1Click(Sender: TObject); begin ShellExecute(Handle, nil, "ЧТО ВСТАВИТЬ СЮДА ЧТОБ ЗАПУСТИТЬ ФАЙЛ" , nil,nil, SW_SHOW); end; function TForm1.AddMyMenu(fileName: TFileName): Integer; var MyMenuItem: TMenuItem; begin MyMenuItem := TMenuItem.Create(self); MyMenuItem.Caption:=fileName; self.PopupMenu1.Items.Add(MyMenuItem); inc(curTag); MyMenuItem.Tag:= curTag; MyMenuItem.OnClick:= sdf1Click; Result:=curTag; end;
Post #: 8
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-16 23:16:59.160000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: JohniJohni

Привет всем, я новенький у меня схожий вопрос a если мне нужно запустить одно из найденных приложений
procedure TForm1.sdf1Click(Sender: TObject); begin ShellExecute(Handle, nil, "ЧТО ВСТАВИТЬ СЮДА ЧТОБ ЗАПУСТИТЬ ФАЙЛ" , nil,nil, SW_SHOW); end; function TForm1.AddMyMenu(fileName: TFileName): Integer; var MyMenuItem: TMenuItem; begin MyMenuItem := TMenuItem.Create(self); MyMenuItem.Caption:=fileName; self.PopupMenu1.Items.Add(MyMenuItem); inc(curTag); MyMenuItem.Tag:= curTag; MyMenuItem.OnClick:= sdf1Click; Result:=curTag; end;
ShellExecute(Handle, nil, "ВЕРОЯТНО, ИМЯ ФАЙЛА" , nil,nil, SW_SHOW);
Post #: 9
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-17 00:38:38.490000   
Cannibal666

Сообщений: 59
Оценки: 0
Присоединился: 2007-01-09 19:18:48.060000
я например пробовал так
ShellExecute(Handle,
nil,'Адрес папки с файлом' + pansichar(mysubmenuitem.Caption) , nil,nil, SW_SHOW);
 не катит DELPHI выдавал ошибку при компиляции , тогда пришлось пробовать так
ShellExecute(Handle,
nil, pansichar(mysubmenuitem.Caption) , nil,nil, SW_SHOW);
при этом пришлось поместить свою программку в папку с теми файлами,
каторые требовалось запустить хотя этот вариант не очень подходил ,
но всё равно ничего не получилось
Post #: 10
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-17 01:01:44.186666   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
А почему PANSIChar?
PChar. Приводить надо к виндовым типам, функция виндовая-то. Хотя, не принципиально.
А вот в Delphi 2009 оно хрен заработает у тебя.

Ну, и смотреть, что он туда пихает, и что должен пихать.
Элементарная отладка.
В частности, если ты хочешь кинуть файли из поддиректории, то будь любезен, зацепи и название самой директории, оно ж в родительском пункте меню находится.
Post #: 11
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-17 11:07:14.420000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Я вообще не понимаю, как можно кодить без мануалов/гугла/мозга?
http://www.google.com/search?q=ShellExecute

На худой конец (хотя лучше в первую очередь, для разогрева) - курим МСДН:
http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx

Хотя, чтобы догадаться, как это заюзать в дэлфе - нужно знать представление типов данных в памяти, хотя-бы азы. Учим мат. часть.
Post #: 12
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-20 04:31:47.880000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: alexbozhko

А почему PANSIChar?
PChar. Приводить надо к виндовым типам, функция виндовая-то. Хотя, не принципиально.
А вот в Delphi 2009 оно хрен заработает у тебя.

Ну, и смотреть, что он туда пихает, и что должен пихать.
Элементарная отладка.
В частности, если ты хочешь кинуть файли из поддиректории, то будь любезен, зацепи и название самой директории, оно ж в родительском пункте меню находится.

Упс…
Виноват
Там действительно, PANSIChar стоит.
Как только что выяснилось :)

Post #: 13
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Как упростить алгоритм? Вопрос по DELPHI







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.