powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / А такая фишка возможна???
4 сообщений из 4, страница 1 из 1
А такая фишка возможна???
    #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
А такая фишка возможна???
    #32059663
Mich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имя функции и ее адрес - 2 большие разницы! Однако для _класса_ в RunTime можно вытащить адрес функции по ее имени. Загони все свои функции в класс, и используй MethodAddress
...
Рейтинг: 0 / 0
А такая фишка возможна???
    #32059695
Фотография moonmike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал уже, не помогает, хотя интуиция подсказывает что сие должно быть возможным.
...
Рейтинг: 0 / 0
А такая фишка возможна???
    #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
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / А такая фишка возможна???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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