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

Вниз

problems with KOL Pmenu Submenus   Найти похожие ветки 

 
rofl   (2005-02-14 03:07) [0]

i have a problem with a popupmenu; i want it to expand like folder structure on hard drive. the function i use works recursive, but suddenly the pointer to parentmenu is $FEEEFEEE and i get an exception when executing pmenu.insert. i am using KOL 2.0

this is my code:

var
 popmenu: Pmenu;

     function PathMatchSpecA(pszFile, pszSpec: String): Boolean; StdCall; External 'SHLWAPI.DLL';

...

function FileSearch(const sRoot, sFileEXT: String; const strRecursive: Boolean):string;
const vardel = #13#10;
var WFD: TWin32FindData; hFile: THandle;
begin
 result := '';
 hFile := FindFirstFileA(pchar(sRoot + '*'), WFD);
 while FindNextFileA(hFile, WFD) do

   if (WFD.dwFileAttributes and 16) = 16 then
   begin
      if sFileEXT = ' ' then result := result + sRoot + String(WFD.cFileName) + vardel;
      (if strRecursive then if Copy(String(WFD.cFileName),1,1)  '.' then
      FileSearch(sRoot + String(WFD.cFileName) + '\', sFileEXT, True))
   end
      else if PathMatchSpecA(String(WFD.cFileName), sFileEXT) then
      result := result + sRoot + String(WFD.cFileName) + vardel;

 FindClose(hFile);
 if strRecursive then strSearch := strSearch + Result;
end;

procedure tform1.addSubSubMenu(var parentmenu:pointer;fld:string;posi:integer);
var s : string;
   i : integer;
   curloc: integer;
   opt: TMenuOptions;
   t:pmenu;
begin
  if (copy(fld,length(fld),1) = '.') or (copy(fld,length(fld)-1,2) = '..') then exit;
  if fld[length(fld)]  '\' then fld := fld + '\';
  inc(nosubmenus);
  setlength(submenus,Nosubmenus+1);
  if nosubmenus = 2 then exit;
  i:=0;
  curloc := 0;
// check if subdirs exist;
  s := filesearch(fld,' ',false);
// cut away . and .. dirs
  while pos('.'#13#10,s)  0 do
   s:= copy(s,pos('.'#13#10,s)+3,length(s));
// if subfolders then opt = submenu
  if s  '' then opt := [moSubMenu]
   else
  opt := [moDefault];
//   if pointer(parentmenu) = pointer(popmenu) then curloc := sublocs+1;
  t := parentmenu;
  submenus[nosubmenus] := t.Insert(posi,pchar(fld),TOnMenuItem( MakeMethod( nil, @DoPopUpItem )),opt);
//   testlist.Add(fld);
  while pos(#13#10,s)  0 do
  begin
     //recursive if more subfolders
     addsubsubmenu(pointer(submenus[nosubmenus]),copy(s,1,pos(#13#10,s)-1),i);
     s := copy(s,pos(#13#10,s)+2,length(s));
     inc(i);
  end;
end;

procedure tform1.addNewSubMenu(fld:pchar);
var s : string;
i : integer;
begin
  inc(sublocs);
  addsubsubmenu(pointer(popmenu),string(fld),sublocs+1);
end;

// START via i.e. addNewSubMenu('c:\windows');


 
rofl   (2005-02-14 03:20) [1]

var submenus: array of pmenu;


 
rofl   (2005-02-14 08:33) [2]

found the bug, the routine tried to add a submenu to MoDefault Menus. o0



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

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

Наверх




Память: 0.47 MB
Время: 0.054 c
4-1124123194
dddim
2005-08-15 20:26
2005.10.16
установить Привелегию процессу


2-1127201435
Tab
2005-09-20 11:30
2005.10.16
"правильное" выполнение запросов


14-1127831750
LordOfRock
2005-09-27 18:35
2005.10.16
Metallica


2-1126083541
worldmen
2005-09-07 12:59
2005.10.16
Форматирование даты.


1-1127814627
BaxTMaH
2005-09-27 13:50
2005.10.16
Клавиша Backspace