Хочу сделать русские буквы в MessageBox (Да, Нет), но при выполнении команды Компас вылетает с ошибкой.
Если создать новый проект - все работает как надо в обоих вариантах кода.
На этом коде вылетает! (русские буквы)
var
rec:integer;
rec := MessageBox(Form2.Handle,
PChar('Внимание!' + #13#10 + 'команда'),
PChar('Имя библиотеки'), MB_YESNOCANCEL or MB_ICONASTERISK);
Тут работает! (английские буквы)
var
rec:integer;
rec := MessageDlg('Внимание! Штамп будет обновлен ' + #10#13 +
'во всех открытых документах.', mtConfirmation, [mbYes, mbNo], 0);
if SelectedMenu = mrNo then
Exit;
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Vcl.Samples.Spin, Vcl.ExtCtrls, ksTLB, LDefin2D,
ksAuto, ksConstTLB, comobj, Vcl.Imaging.jpeg, Registry, LtDefine, LibTool,
ConstKompasAPI;
Скорее всего проблема в следующем... Если у вас это RTW
1) В начале проекта необходимо следующее
Forms.Application.Handle := GetHWindow;
2) MessageBox надо обернуть... и для правильности работы на нескольких мониторах и для простоты.
function MsgBox(const Caption, Text: string; Flags: Integer): Integer;
var
{ Patched by Голованёв В.А. 27.04.2017 }
oldHandle : HWND;
begin
//SetAutoSubClass(True);
try
{ Patched by Голованёв В.А. 27.04.2017 }
oldHandle := Forms.Application.Handle;
if Forms.Application.ActiveFormHandle <> 0 then
Forms.Application.Handle := Forms.Application.ActiveFormHandle;
Result := Forms.Application.MessageBox(PChar(Text), PChar(Caption), Flags);
{ Patched by Голованёв В.А. 27.04.2017 }
Forms.Application.Handle := oldHandle;
finally
end;
end;
Мне, кажется, всё ещё проще.