Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 10.2 Как пофиксить Vcl.Dialogs  [new]
AWSVladimir
Member

Откуда:
Сообщений: 857
Купленная 10.2
Хотел изменить штатный модуль Vcl.Dialogs - фигвам
Старый метод не работает: Бросить в каталог с программой/включить явно в проект по своему пути.
Как сейчас можно модифицировать системные делфийские файлы?
6 дек 18, 18:18    [21756219]     Ответить | Цитировать Сообщить модератору
 Re: 10.2 Как пофиксить Vcl.Dialogs  [new]
ziv-2014
Member

Откуда:
Сообщений: 174
AWSVladimir,
Копируешь файл в свой каталог, каталог прописываешь в library и debug library в самым первым в настройках делфи.
Меняешь файл, компилируешь, профит :)
6 дек 18, 18:33    [21756232]     Ответить | Цитировать Сообщить модератору
 Re: 10.2 Как пофиксить Vcl.Dialogs  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5118
AWSVladimir
Купленная 10.2
Хотел изменить штатный модуль Vcl.Dialogs - фигвам
Старый метод не работает: Бросить в каталог с программой/включить явно в проект по своему пути.
Как сейчас можно модифицировать системные делфийские файлы?


Как вариант не подойдет?
procedure PatchRoutine(ASystemRoutine, AOverrideRoutine: TFarProc);
const
  JUMP_FAR = $E9;
var
  Protect: DWORD;
  OldProtect: DWORD;
  Address: Integer;
begin
  VirtualProtect(ASystemRoutine, 256, PAGE_EXECUTE_READWRITE, @OldProtect);
  if PByte(ASystemRoutine)^ <> JUMP_FAR then
  begin
    PByte(ASystemRoutine)^ := JUMP_FAR;
    Address := Integer(AOverrideRoutine) - Integer(ASystemRoutine) - 5;
    PInteger(DWORD(ASystemRoutine) + 1)^ := Address;
  end;
  VirtualProtect(ASystemRoutine, 256, OldProtect, @Protect);
  FlushInstructionCache(GetCurrentProcess, ASystemRoutine, 256)
end;

procedure MyShowMessage(const Msg: string);
begin
  MessageBox(Application.Handle, PChar('Calling MyShowMessage'), MyShowMessage, MB_ICONWARNING)
end;

//////////////////////////

PatchRoutine(@Vcl.Dialogs.ShowMessage, @MyShowMessage);
6 дек 18, 19:01    [21756277]     Ответить | Цитировать Сообщить модератору
 Re: 10.2 Как пофиксить Vcl.Dialogs  [new]
AWSVladimir
Member

Откуда:
Сообщений: 857
ziv-2014
спасибо помогло, только я еще путь в опциях проекта сделал.

Квейд
Спасибо тоже, ну ты монстр )))
6 дек 18, 20:20    [21756355]     Ответить | Цитировать Сообщить модератору
 Re: 10.2 Как пофиксить Vcl.Dialogs  [new]
DimaBr
Member

Откуда:
Сообщений: 10779
А что просто подключить под другим именем и в списке USES указать его последним уже не работает ?
6 дек 18, 22:52    [21756475]     Ответить | Цитировать Сообщить модератору
 Re: 10.2 Как пофиксить Vcl.Dialogs  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1199
А почему 256? Из-за гранулярности памяти?
6 дек 18, 22:53    [21756479]     Ответить | Цитировать Сообщить модератору
 Re: 10.2 Как пофиксить Vcl.Dialogs  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1199
Вроде же достаточно 5 байт...
6 дек 18, 22:58    [21756482]     Ответить | Цитировать Сообщить модератору
 Re: 10.2 Как пофиксить Vcl.Dialogs  [new]
Василий 2
Member

Откуда:
Сообщений: 303
А какая цель?
7 дек 18, 10:26    [21756718]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить