Как упростить алгоритм? Вопрос по DELPHI
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Как упростить алгоритм? Вопрос по 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) <> 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;
подскажите пожалуйсто , как сделать проще , иначе у меня такая путаница получается…
|
|
|
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-13 03:12:52.733333
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TForm5 = class(TForm)
PopupMenu1: TPopupMenu;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure sdf1Click(Sender: TObject);
private
CurTag: integer;
function AddMyMenu(fileName: TFileName): Integer;
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
procedure TForm5.FormCreate(Sender: TObject);
var
searchResult : TSearchRec ; //результат поиска
begin
curTag:=0;
// ну с текущей директории ищем
// подставишь нужную
if FindFirst(ExtractFileDir(Application.ExeName)+'\*.*', faAnyFile, searchResult) = 0 then
begin //ищем все файлы в вышеуказанной папке с расширением "lnk" (ярлыки)
repeat
try
if (not (searchResult.Attr in [faDirectory])) then
AddMyMenu(searchResult.Name);
finally
end;
until FindNext(searchResult) <> 0; //ищем далее
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 Понятно, что сендером будет пункт меню. Там с директориями уж сам разберись.
|
|
|
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-15 23:01:44.006666
|
|
|
Cannibal666
Сообщений: 59
Оценки: 0
Присоединился: 2007-01-09 19:18:48.060000
|
Спасибо за ответ ; а как тогда добавить к субменю , чего-то у меня у самого не получается, за раннее благодарен за ответ.
|
|
|
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 вызываешь для того пукта меню, подпунктом которого должно быть сабменю Если ты задумал вложенные дирректории разобрать, то там рекурсивный вызов надо сделать
|
|
|
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-16 01:24:32.420000
|
|
|
TurboXaker
Сообщений: 385
Оценки: 0
Присоединился: 2008-05-23 01:05:40.516666
|
quote:
Если ты задумал вложенные дирректории разобрать, то там рекурсивный вызов надо сделать есди он задумал всю файловую систему разобрать, то ему надо в процессе открытия менюшек/субменюшек орудовать, а не заранее :D
|
|
|
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-16 01:57:52.420000
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
quote:
ORIGINAL: TurboXaker quote:
Если ты задумал вложенные дирректории разобрать, то там рекурсивный вызов надо сделать есди он задумал всю файловую систему разобрать, то ему надо в процессе открытия менюшек/субменюшек орудовать, а не заранее :D Так, а кто мешает? Это ж проблема когда ее вызывать, а по сути код формирования меню тот же. Просто по атрибутам надо смотреть файл это или дирректория Я ж специально показал, как зацепить onClick. И на него и надо вешать формирование сабменю А родительский пункт меню как раз по тагу можно искать.
|
|
|
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-16 06:32:17.273333
|
|
|
Cannibal666
Сообщений: 59
Оценки: 0
Присоединился: 2007-01-09 19:18:48.060000
|
Теперь всё получилось , БЛАГОДАРЮ за ответы :D
|
|
|
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;
|
|
|
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);
|
|
|
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); при этом пришлось поместить свою программку в папку с теми файлами, каторые требовалось запустить хотя этот вариант не очень подходил , но всё равно ничего не получилось
|
|
|
RE: Как упростить алгоритм? Вопрос по DELPHI - 2008-09-17 01:01:44.186666
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
А почему PANSIChar? PChar. Приводить надо к виндовым типам, функция виндовая-то. Хотя, не принципиально. А вот в Delphi 2009 оно хрен заработает у тебя. Ну, и смотреть, что он туда пихает, и что должен пихать. Элементарная отладка. В частности, если ты хочешь кинуть файли из поддиректории, то будь любезен, зацепи и название самой директории, оно ж в родительском пункте меню находится.
|
|
|
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 Хотя, чтобы догадаться, как это заюзать в дэлфе - нужно знать представление типов данных в памяти, хотя-бы азы. Учим мат. часть.
|
|
|
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 стоит. Как только что выяснилось :)
|
|
|
|
|