Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавление нового пункта в pop-up меню [D5, XP]


Страницы:   1 2 3

DJ Kondakov ©   (2008-04-25 12:12:00) 

Подскажите, каким образом можно добавить пункт в меню? Функция ADD предполагает наличие уже готового пункта.


DJ Kondakov   (2008-05-07 14:11:00) [1]

Усе понял... Пасиба... Все работает. Показать?


Palladin   (2008-05-05 13:12:00) [2]

если бы ты почитал в справке чего пишут на тему "of object" ты бы давно все понял... а так ерундой страдаешь...


DJ Kondakov   (2008-05-05 13:09:00) [3]

Ошибка в фрагментах типа

>  if @getplugname<>nil then begin    mi := TMenuItem.Create(form1.
> PopupMenu2);    nm:=extractfilename(sr.name);    delete(nm,
> pos('.',nm),4);     with mi do begin      Caption := strpas(GetPlugName);
>       name:=nm;       onClick:=MenuItemClick(mi);    end;
>     form1.PopupMenu2.items.Add(mi);   end;


Anatoly Podgoretsky   (2008-05-05 09:24:00) [4]


> Миллионный раз уже вижу этот код. Где же источник этой ереси?
>  (

Из кодопомойки, их хоть и много, но они копируют друг у друга, размножаю глупость во вселенском маштабе. Ну а копипастеров всегда хватало.


Anatoly Podgoretsky   (2008-05-05 09:20:00) [5]

Этот код из Д1


Palladin   (2008-05-05 08:49:00) [6]

в интернете встречаются статьи, старые конечно, именно с таким условием, а новых мало кто пишет, бо чего нового можно написать про dll  :)


sniknik   (2008-05-05 08:46:00) [7]

это не ересь. просто раньше, очень давно, функция возвращала код ошибки если значение < 32. теперь это просто привычка... или подражание/копирование чужого кода.
сам пишу также... (писал вернее пока не задумался о смысле после однотипного вопроса, не полез в хелп и не увидел, что мои знания устарели.)  
а сейчас уже и не уверен эта функция так себя вела или другая.


Loginov Dmitry   (2008-05-05 07:49:00) [8]

> if libhandle>=32 then begin


Миллионный раз уже вижу этот код. Где же источник этой ереси? (


Palladin   (2008-05-05 07:40:00) [9]

может лучше жирным было выделить, а то глаза то не казенные...


DJ Kondakov   (2008-05-05 06:51:00) [10]

Короче, новая проблема.
Пишу:

...
procedure menuitemclick(sender:tobject);
...
procedure tform1.Menuitemclick(sender:tobject);
var
libhandle:thandle;
mainproc:procedure;
begin
@mainproc:=nil;
libhandle:=loadlibrary(pchar(paramstr(0)+'\plugins\'+Tcomponent(sender).name+'.dll'));
if libhandle>=32 then begin
 @mainproc:=getprocaddress(libhandle,'mainproc');
 if @mainproc<>nil then mainproc;
end;
freelibrary(libhandle);
end;
...
...
procedure tform1.LoadPlugins;
var
sr:tsearchrec;
GetPlugName:function:pchar;
libhandle:thandle;
mi:tmenuitem;
nm:string;
begin
if fileexists(paramstr(0)+'\plugins\*.dll') then begin
 findfirst(paramstr(0)+'\plugins\*.dll',faanyfile,sr);
 @getplugname:=nil;
 libhandle:=loadlibrary(pchar(sr.name));
 if libhandle>=32 then begin
  @getplugname:=getprocaddress(libhandle,'GetPlugName');
  if @getplugname<>nil then begin
   mi := TMenuItem.Create(form1.PopupMenu2);
   nm:=extractfilename(sr.name);
   delete(nm,pos('.',nm),4);
    with mi do begin
     Caption := strpas(GetPlugName);
     name:=nm;
      onClick:=MenuItemClick(mi);
    end;
   form1.PopupMenu2.items.Add(mi);
  end;
 end;
 freelibrary(libhandle);
 while findnext(sr)=0 do begin
  @getplugname:=nil;
 libhandle:=loadlibrary(pchar(sr.name));
 if libhandle>=32 then begin
  @getplugname:=getprocaddress(libhandle,'GetPlugName');
  if @getplugname<>nil then begin
   mi := TMenuItem.Create(form1.PopupMenu2);
   nm:=extractfilename(sr.name);
   delete(nm,pos('.',nm),4);
    with mi do begin
     Caption := strpas(GetPlugName);
     name:=nm;
      onClick:=MenuItemClick(mi);
    end;
   form1.PopupMenu2.items.Add(mi);
  end;
 end;
 end; freelibrary(libhandle);
end;
end;
...
На выделенных курсивом фрагментах получаю Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'


{RASkov}   (2008-04-30 13:28:00) [11]

> [39] DJ Kondakov   (30.04.08 13:08)
> как обратиться к свойству Name объекта, передаваемого в
> параметре Sender?

TComponent(Sender).Name
Но зачем? Имя у компонентов - это только для дизайна.... в рантайм их как правило не используют...


DJ Kondakov   (2008-04-30 13:08:00) [12]

Ладно, с этим, кажется, разобрался. Во всяком случае, ошибок компиляции больше нет. Следующий вопрос: как обратиться к свойству Name объекта, передаваемого в параметре Sender?


{RASkov}   (2008-04-28 16:58:00) [13]

> [35] DJ Kondakov   (28.04.08 13:49)

Borland Package Library


Anatoly Podgoretsky   (2008-04-28 14:26:00) [14]

> DJ Kondakov  (28.04.2008 13:49:35)  [35]

Ну что Игорь получил :-)


Игорь Шевченко   (2008-04-28 14:15:00) [15]


> Получаю incompatible types: parameter lists differ.


Больно слышать


DJ Kondakov   (2008-04-28 13:49:00) [16]

Да, а что такое BPL?


DJ Kondakov   (2008-04-28 13:45:00) [17]

Пишу:
public
procedure MyMethod;
...

var
mainproc:procedure;
...

procedure MyMethod;
begin
mainproc;
end;
...
...
onClick:=MyMethod;
...

Получаю incompatible types: parameter lists differ.


Игорь Шевченко   (2008-04-28 13:39:00) [18]


> Идея такая: приложение при запуске опрашивает директорию
> \plugins\ на предмет DLL-модулей. В найденных DLL-ках оно
> находит две процедуры: GetPlugName и MainProc. Создается
> пункт в контекстном меню, его св-ву Caption присваивается
> значение, переданное процедурой GetPlugName, а св-ву onClick
> - MainProc. Уфф...


Эта...а зачем в DLL, почему не в BPL ?


Kolan   (2008-04-28 13:35:00) [19]

> с компонентов

Интересно что для тебя тогда компонент, если ты незнаешь ооп?

метод формы — это метод формы как ни странно.

Если у тебя есть класс

TMyForm = class(TForm)
end;


То это класс формы, так вот елси теперь в этом классе объявить метод, то это и будет метод формы.


TMyForm = class(TForm)
public
 procedure FormMethod;
end;


DJ Kondakov   (2008-04-28 13:31:00) [20]

Не знаю, не знаю... Может, позже и вернусь, но сейчас время поджимает. Разрабатываю приложение с поддержкой плагинов. От него зависит оценка на экзамене по информатике. Идея такая: приложение при запуске опрашивает директорию \plugins\ на предмет DLL-модулей. В найденных DLL-ках оно находит две процедуры: GetPlugName и MainProc. Создается пункт в контекстном меню, его св-ву Caption присваивается значение, переданное процедурой GetPlugName, а св-ву onClick - MainProc. Уфф...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо