Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.02;
Скачать: CL | DM;

Вниз

Как в ран-тайме добавить в попап-меню расширенное меню?   Найти похожие ветки 

 
Volf_555   (2006-01-14 15:45) [0]

Как в ран-тайме добавить в попап-меню расширенное меню?

Использую следующий код, который добавляет в попам-меню одноранговое меню.

procedure TForm1.Button1Click(Sender: TObject);
var
s:Integer;
a,a1:String;
ares:TStringList;
q:Integer;

z:TMenuItem;
begin
Edit1.Text:="1\2\3";

z:=TMenuItem.Create(PopupMenu1);
ares:=TStringList.Create;
a:=edit1.Text;
a1:="";
for s:=1 to Length(a) do
begin
 if a[s]<>"\" then
  a1:=a1+a[s] else
 if a[s]="\" then
 begin
  ares.Add(a1);
  a1:="";
 end;
end;
ares.Add(a1);

for q:=0 to ares.Count-1 do
begin
 z.Add(NewItem(ares.Strings[q],0,false,false,NIL,0,"Item"+IntToStr(q)+IntToStr(ares.Count)+IntToStr(q div ares.count)));
end;
popupmenu1.Items.Add(z);
end;


Как мне добавить в попап-меню расширенное меню?
То есть:
1>2>3
пункт 2 - подпункт пункта 1
пункт 3 - подпункт пункта 2


 
ss2   (2006-01-14 23:22) [1]

var
i,ii: integer;
ares:TStringList;
procedure UM( P: TMenuItem);
var M: TMenuItem;
begin
Inc(i);
if i = ii+1 then exit;
M := TMenuItem.Create(Form1);
M.Caption := ares.Strings[i-1];
P.Add(M);
UM( M );
end;

procedure TForm1.Button8Click(Sender: TObject);
var
s:Integer;
a,a1:String;
q:Integer;
z:TMenuItem;
begin
Edit1.Text:="1\2\3\4\5\6\7\8\9";
ii:=0;
z:=TMenuItem.Create(PopupMenu1);
ares:=TStringList.Create;
a:=edit1.Text;
a1:="";
for s:=1 to Length(a) do
begin
if a[s]<>"\" then
 a1:=a1+a[s] else
if a[s]="\" then
begin
 ares.Add(a1);
 a1:="";
end;
end;
ares.Add(a1);

for q:=0 to ares.Count-1 do
begin
Inc(ii);
Caption:=IntToStr(ii);
//z.Add(NewItem(ares.Strings[q],0,false,false,NIL,0,"Item"+IntToStr(q)+IntToStr(ares.Count)+IntToStr(q div ares.count)));
end;
popupmenu1.Items.Add(z);
i:=0;
UM(z);
end;


 
Volf_555   (2006-01-15 17:35) [2]


> ss2   (14.01.06 23:22) [1]

Огромное спасибо! В упрощённом варианте всё ОК!
Следующая процедура работает неверно:
procedure TForm1.ModifyMenu;
var
s:TIniFile;
z,w:Integer;
a,a1,a2:TStringList;
itemsall:Integer;
prov,res:Integer;

provslesh:Integer;
sleshA1:String;
q:Integer;
zMI:TMenuItem;
begin
 s:=TIniFile.Create(ExtractFilePath(Application.ExeName)+"options.ini");
 zMI:=TMenuItem.Create(PopupMenu1);
for itemsall:=popupmenu1.Items.Count-3 downto 0 do
  popupmenu1.Items.Delete(itemsall);
 a:=TStringList.Create;
 a1:=TStringList.Create;
 a2:=TStringList.Create;

 ares:=TStringList.Create;

 try
 s.ReadSections(combobox1.Items);
 if combobox1.Items.Count>0 then
  combobox1.ItemIndex:=0;
  s.ReadSection(combobox1.Text,combobox2.Items);
  if combobox2.Items.Count>0 then
  begin
   combobox2.ItemIndex:=0;
   edit4.Text:=s.ReadString(combobox1.Text,combobox2.Text,"");
  end;
 except
 end;
 
 s.ReadSections(a); //s - содержит все секции INI-файла
 if a.Count<>0 then
 begin

  for z:=0 to a.Count-1 do //Цикл для секций
  begin
   s.ReadSection(a.Strings[z],a1); //a1 - содержит все параметры текущей секции
   cursec:=a.Strings[z]; //cursec - содержит значение текущей секции

   ares:=TStringList.Create;
   for provslesh:=1 to Length(cursec) do
   begin
   if cursec[provslesh]<>"\" then
    SleshA1:=SleshA1+cursec[provslesh] else
   if cursec[provslesh]="\" then
   begin
    ares.Add(SleshA1);
    SleshA1:="";
   end;
   end;
   ares.Add(SleshA1);
   

   if cursec="Line" then
     PopupMenu1.Items.Insert(0,NewLine);
     
   for w:=0 to a1.Count-1 do //Цикл для параметров
   begin
    curpar:=a1.Strings[w];
    curval:=s.ReadString(cursec,curpar,"");

    res:=0;
    for prov:=0 to PopupMenu1.Items.Count-1 do
    begin
      if cursec=popupmenu1.Items.Items[prov].Caption then
       res:=1;
    end;

    if res=0 then //Добавление разделов в меню
     {PopupMenu1.Items.Insert(0,NewItem(cursec,0,False,True,NIL,0,"MenuItem"+IntToStr(z)+IntToStr(w)));}
    begin
     for q:=0 to ares.Count-1 do
       Inc(ii);
     PopupMenu1.Items.Insert(0,zMI);
     i:=0;
     UM(zMI);
    end;
    PopupMenu1.Items.Items[0].Insert(0,NewItem(curpar,0,False,True,MyMenuClick,0,"MenuItem44"+IntToStr(z)+IntToStr(w)));
   end;
  end;
 end;
 a.Free;
 a1.Free;
 a2.Free;
 s.Free;
end;

В чём причина её неправильной работы?


 
Zeqfreed ©   (2006-01-15 17:39) [3]

Volf_555   (15.01.06 17:35) [2]

> В чём причина её неправильной работы?

Она слишком большая.


 
Volf_555   (2006-01-15 19:46) [4]


> Zeqfreed ©   (15.01.06 17:39) [3]

Какие твои предложения по уменьшению процедуры?

Процедура должна делать следующее:
1) считывать ini-файл (в данном случае options.ini)
Кусок ini-файла:

[Программы\Системные]
Редактор реестра=C:\WINDOWS\regedit.exe
Коммандная строка=cmd
Проводник=explorer.exe
Nero Express=C:\Program Files\Ahead\Nero\nero.exe, -w
[Программы\Разработка]
Delphi=C:\Program Files\Borland\Delphi6\Bin\delphi32.exe
[Избранное]
Проверить почту на Mail.Ru=E:\ХОББИ\HTML\Стартовая страничка\mail.html
Проверить почту на Yandex.Ru=E:\ХОББИ\HTML\Стартовая страничка\yandex.html

...


2) считывать и проверять на наличие "\" секции ini-файла
3) в случае нахождения слэша, добавлять разделы в TStringList, если слэша нет, то добавить в TStringList только одно значение
4) добавить в меню PopupMenu1 необходимые значения + присвоить события при щелчке на них
5) если имя раздела="Line" - вставить в popup-меню новый разделитель

Какие тогда твои предложения по реализации выше сказанного?


 
Zeqfreed ©   (2006-01-16 11:52) [5]

Volf_555   (15.01.06 19:46) [4]
Так вот, это должны быть как минимум 5 независимых, как можно более универсализированных, процедуры. А не одна, непонятно что делающая.



Страницы: 1 вся ветка

Текущий архив: 2006.04.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.059 c
2-1142337389
Emik
2006-03-14 14:56
2006.04.02
Interbase


2-1142598661
ttt_111
2006-03-17 15:31
2006.04.02
Как свернуть программу в tray?


2-1142930771
pkm
2006-03-21 11:46
2006.04.02
Random.


4-1137563866
ZZZ
2006-01-18 08:57
2006.04.02
Как определить серийный номер...?


15-1141934121
JUS
2006-03-09 22:55
2006.04.02
Как скачать из компьютера на сотовый файлы с помощью BlueTooth?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский