Я искал тематические предложения, но не смог найти правильного ...
Извините, если я ошибаюсь. Если да, пожалуйста, укажите правильный вопрос здесь.
Хорошо, вернемся к делу. Ситуация: я использую ShowMessage () в качестве простого поставщика «Status Briefing» для некоторых событий в приложении:
procedure SatusBriefingDialog();
begin
if Sender = SomeObject then
begin
Application.NormalizeToMosts;
MessageDlg(Handle, PChar('The_string_that_forms_nice_informative_window / dialog'));
Application.RestoreTopMosts;
end;
end;
Теперь я хочу его отполировать, поэтому я хочу использовать расширенную таблицу ascii , но я не могу выбрать лучший способ доступа к ним. Может быть, я просто не знаю эту магическую функцию ...
Вот подход, который использует функции OEMToANSI / OEMToChar и наоборот: http://www.experts -exchange.com / Программирование / Языки / Pascal / Delphi / Q_20381022.html . Я попробовал их без удачи, вероятно из-за:
Синтаксис из EDN / MS-Help
BOOL OemToChar (LPCSTR lpszSrc,
LPTSTR lpszDst
);
Параметры
lpszSrc [in] Указатель на
строка символов, оканчивающаяся нулем
из набора символов, определенного OEM.
lpszDst [out] Указатель на буфер
для переведенной строки.
Если функция OemToChar используется как
Функция ANSI, строка может быть
переведен на место, установив
Параметр lpszDst по тому же адресу
в качестве параметра lpszSrc. Это не может
быть сделано, если OemToChar используется как
функция широких символов.
Мне нужен Чар (Орд (170)); Чар (Орд (180)); и Char (Ord (190)) - http://www.asciitable.com/. Очевидно, что по умолчанию с кодовой страницей WInXP я не могу их использовать. Теперь я немного погуглил и нашел это решение:
Код события FormShow:
procedure TMain.FormShow(Sender: TObject);
var
i : longint;
begin
re.Font.Name := 'Terminal';
re.Font.Size := 9;
//seems that charset must be set last
re.Font.Charset := OEM_CHARSET;
re.DefAttributes.Name := 'Terminal';
re.DefAttributes.Size := 9;
re.DefAttributes.Charset := OEM_CHARSET;
re.SelectAll;
re.SelAttributes := re.DefAttributes;
//turn off richedit's auto font switching...
i := SendMessage(re.Handle, EM_GETLANGOPTIONS, 0, 0);
i := i and not IMF_AUTOFONT;
SendMessage(re.Handle, EM_SETLANGOPTIONS, 0, i);
end;
Также эти шрифты будут отображаться правильно >>
Новый Курьер
Lucida Console
MS Mincho
Теперь возникает вопрос: как лучше всего использовать Windows Dialogs (API), чтобы использовать OEM-кодировку без процедуры, которая запускает ShowMessage (); ? Переопределение ShowMessage (); ? Унаследовать некоторые функции richedit? Различные OwnerDraw () или WndProc () подходят ... слишком много вариантов, но ... которые ... я в замешательстве. (
Помогите мне выбрать и указать, конечно же, субъективно наиболее эффективное и наиболее бескодовое решение.