• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Компас 15 и MessageBox

Автор podshibyakinea, 13.03.18, 17:02:41

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

podshibyakinea

Хочу сделать русские буквы в 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;

Golovanev

Скорее всего проблема в следующем... Если у вас это 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;

13.03.18, 20:02:43 #2 Последнее редактирование: 13.03.18, 20:48:23 от Sabahs
Мне, кажется, всё ещё проще.