Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / А такая фишка возможна??? / 4 сообщений из 4, страница 1 из 1
18.10.2002, 12:47
    #32059614
moonmike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А такая фишка возможна???
Есть идея свернуть меню проги в БД, и оттуда соответственно его выдергивать,
соответственно по минимуму в БД надо сохранять для каждого пункта меню необходимо
сохранить в базе:
Name, Caption и название функции реагирующей на клик. В мануале сказано что
в рнантайме мона добавлять ето так:
MenuItem->OnClick = function;
но все дело в том что в БД сохраняется то название функции, соответственно
при компиляции следющего участка кода:
New->OnClick = WideToAnsi(MTODm->aspReturnMenu->FieldByName("OnClick")->Value);
Выдается ошибка:
[C++ Error] MenuLoad.cpp(38): E2034 Cannot convert 'char *' to 'void (_fastcall
* (_closure )(TObject *))(TObject *)'
Так можно ли ето как - то реализовать???
...
Рейтинг: 0 / 0
18.10.2002, 13:55
    #32059663
Mich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А такая фишка возможна???
Имя функции и ее адрес - 2 большие разницы! Однако для _класса_ в RunTime можно вытащить адрес функции по ее имени. Загони все свои функции в класс, и используй MethodAddress
...
Рейтинг: 0 / 0
18.10.2002, 14:23
    #32059695
moonmike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А такая фишка возможна???
Пробовал уже, не помогает, хотя интуиция подсказывает что сие должно быть возможным.
...
Рейтинг: 0 / 0
19.10.2002, 17:30
    #32059984
MIKLUHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А такая фишка возможна???
Здравствуйте!

Вот код для Delphi:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    procedure MessageA(Sender: TObject);
    procedure MessageB(Sender: TObject);
    procedure MessageC(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.MessageA(Sender: TObject);
begin
  ShowMessage('A');
end;

procedure TForm1.MessageB(Sender: TObject);
begin
  ShowMessage('B');
end;

procedure TForm1.MessageC(Sender: TObject);
begin
  ShowMessage('C');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TMethod(Button2.OnClick) do
  begin
     Data := Self;
     Code := Self.MethodAddress(Edit1.Text);
  end;
end;

end.


MethodAddress работает только с published методами.

Желаю успехов.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / А такая фишка возможна??? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]