Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы
Старый 17.09.2025, 01:51   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 694
По умолчанию Временно сменить Font для меню

Попробовал сделать такой вот код

Код:
Screen.MenuFont.Charset:=ANSI_CHARSET;
DeutschPPM.Popup(Mouse.CursorPos.X, Mouse.CursorPos.y);
Screen.MenuFont.Charset:=RUSSIAN_CHARSET;
Но всё равно всплывающее меню имеет RUSSIAN_CHARSET

Как сделать так, чтобы всплыло меню с ANSI_CHARSET ?
А потом вернуть обратно
Kronos913 вне форума Ответить с цитированием
Старый Вчера, 23:16   #2
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 694
По умолчанию

Убив двое суток с нейросетью я таки смог найти решение своей проблемы. Если кому понадобится, можете копировать и переделывать под свои задачи.

Код:
type
  AnsiPPM = object
    PPM:TPopupMenu;
    procedure PopupMenu1MeasureItemD(Sender: TObject; ACanvas: TCanvas;
        var Width, Height: Integer);
    procedure PopupMenu1DrawItemD(Sender: TObject; ACanvas: TCanvas;
        ARect: TRect; Selected: Boolean);
    procedure AllesD;
    procedure Machen(Owner1: TWinControl);
  end;
Код:
procedure AnsiPPM.PopupMenu1DrawItemD(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
var
  MenuItem: TMenuItem;
begin
  MenuItem := Sender as TMenuItem;

  if Selected then
  begin
    ACanvas.Brush.Color := clHighlight;
    ACanvas.Font.Color := clHighlightText;
  end
  else
  begin
    ACanvas.Brush.Color := clMenu;
    ACanvas.Font.Color := clMenuText;
  end;

  // !!! Вот тут настраиваем всё как нам нужно!
  ACanvas.Font.Charset := ANSI_CHARSET;
  // Конец раздела настроек

  ACanvas.FillRect(ARect);
  ACanvas.TextOut(ARect.Left + 10, ARect.Top + 2, StripHotKey(MenuItem.Caption));
end;

procedure AnsiPPM.PopupMenu1MeasureItemD(Sender: TObject; ACanvas: TCanvas;
  var Width, Height: Integer);
var
  MenuItem: TMenuItem;
begin
  MenuItem := Sender as TMenuItem;
  ACanvas.Font.Charset := ANSI_CHARSET;

  Width  := ACanvas.TextWidth(MenuItem.Caption) + 16;
  Height := ACanvas.TextHeight(MenuItem.Caption) + 4;
end;

procedure AnsiPPM.AllesD;
var
  i:LongWord;
begin
  If PPM<>nil then begin
    i:=PPM.Items.Count;
    While i>0 do begin
      dec(i);
      PPM.Items[i].OnDrawItem := PopupMenu1DrawItemD;
      PPM.Items[i].OnMeasureItem := PopupMenu1MeasureItemD;
    end;
  end;
end;

procedure AnsiPPM.Machen(Owner1: TWinControl);
begin
  PPM:=TPopupMenu.Create(Owner1);
  PPM.OwnerDraw:=true;
end;
Kronos913 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается сменить фон у ListView. Нужно как-то сменить обработку WM_ERASEBKGND, судя по всему TwiX Win Api 2 09.06.2013 23:25
Резиновый font-size, Как сделать резионвый font-size в блоке? AlienNation HTML и CSS 0 26.09.2011 09:14
Canvas.Font.Style := Label.Font.Style; не выходит ArtGrek Общие вопросы Delphi 3 23.02.2011 19:55
Как временно отключить формулы? parsn Microsoft Office Excel 2 12.01.2010 18:32