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

Вниз

Добавление нового пункта в pop-up меню   Найти похожие ветки 

 
{RASkov} ©   (2008-04-30 13:28) [40]

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

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


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

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

...
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"


 
Palladin ©   (2008-05-05 07:40) [42]

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


 
Loginov Dmitry ©   (2008-05-05 07:49) [43]

> if libhandle>=32 then begin


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


 
sniknik ©   (2008-05-05 08:46) [44]

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


 
Palladin ©   (2008-05-05 08:49) [45]

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


 
Anatoly Podgoretsky ©   (2008-05-05 09:20) [46]

Этот код из Д1


 
Anatoly Podgoretsky ©   (2008-05-05 09:24) [47]


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

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


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

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

>  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;


 
Palladin ©   (2008-05-05 13:12) [49]

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


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

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



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

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

Наверх




Память: 0.56 MB
Время: 0.021 c
15-1208483714
Slider007
2008-04-18 05:55
2008.06.01
С днем рождения ! 18 апреля 2008 пятница


4-1189662839
Rustam
2007-09-13 09:53
2008.06.01
Вопрос по оборудованию


15-1208680471
Экс-Семеныч
2008-04-20 12:34
2008.06.01
К вопросу о программистах нормальных и не. Спрашивали тут как-то


8-1181160626
Дима_З
2007-06-07 00:10
2008.06.01
Иконки 256Х256, сжатые vista-форматом


3-1198497594
Максим
2007-12-24 14:59
2008.06.01
Многотабличные запросы (модификация данных)