Avatar billede athlon-pascal Juniormester
01. juli 2003 - 12:04 Der er 6 kommentarer og
1 løsning

Screen.MenuFont i Delphi4

Jeg har fat i en komponent hvor der bruges propertyen Screen.MenuFont. Mit problem er at jeg bruger Delphi4, og der er ikke nogen MenuFont-property i Delphi4's TScreen...
Så det jeg søger er en måde at få fat på Screen.MenuFont, evt. via WinAPI, eller på anden måde...

Dette er fra Delphi6's hjælp:
"TScreen.MenuFont

TScreen    See also
--------------------------------------------------------
Specifies the font used for menu commands.

property MenuFont: TFont;

Description

MenuFont stores the Windows 95 menu font setting. This font is used for menu items in main menus or popup menus that do not draw their own menu items in an OnDrawItem event handler."
Avatar billede borrisholt Novice
01. juli 2003 - 14:35 #1
prøv den her :

type
  TMyScreen = class(TScreen)
  private
    FMenuFont: TFont;
    procedure NotifyForms(Msg: Word);
    procedure IconFontChanged(Sender: TObject);
    procedure SetMenuFont(const Value: TFont);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property MenuFont: TFont read FMenuFont write SetMenuFont;
  end;

{ TMyScreen }

constructor TMyScreen.Create(AOwner: TComponent);
var
  NonClientMetrics: TNonClientMetrics;
begin
  inherited;
  FMenuFont := TFont.Create;

  if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then
    FMenuFont.Handle := CreateFontIndirect(NonClientMetrics.lfMenuFont)
  else
    FMenuFont.Handle := GetStockObject(SYSTEM_FONT);

  FMenuFont.OnChange := IconFontChanged;
end;

destructor TMyScreen.Destroy;
begin
  FreeAndNil(FMenuFont);
  inherited;
end;

procedure TMyScreen.IconFontChanged(Sender: TObject);
begin
  NotifyForms(CM_SYSFONTCHANGED);
end;

procedure TMyScreen.NotifyForms(Msg: Word);
var
  I: Integer;
begin
  for I := 0 to Screen.FormCount - 1 do
    Screen.Forms[I].Perform(Msg, 0, 0);
end;

procedure TMyScreen.SetMenuFont(const Value: TFont);
begin
  FMenuFont.Assign(Value);
end;



Jens B
Avatar billede athlon-pascal Juniormester
01. juli 2003 - 15:14 #2
Jens -> Det ser ud til at virke, tak for den hurtige hjælp :-)
Det er folk som dig der har gjort Eksperten til hvad den er i dag.
(jeg tænker ikke på de mere tekniske ting, som er Admins ansvar, ej heller de gode CoAdmins, der til tider passer deres frivillige, ulønnede job lidt for godt, efter nogens mening, og ej heller de provokerende ballademagere, der ikke er for kloge mht. ordvalg, men derimod det der virkelig kendetegner Eksperten, nemlig hurtig og effektiv hjælp...)
Avatar billede borrisholt Novice
01. juli 2003 - 15:18 #3
Tak . Der gik da næsten 30 minutter før jeg gik i gang :-)

Jens B
Avatar billede zerohero Nybegynder
02. juli 2003 - 20:33 #4
Delphi4: Screen.Fonts[x]

eksempel: viser alle fonte der er installeret under din Windows platform

var
I : Integer;
begin
  for I := 0 to Screen.Fonts.Count-1 do
  ListBox1.Items.Add(Screen.Fonts[I]);
end;

Mindre kode - mere overblik ;)

Held og Lykke
ZeroHero
Avatar billede borrisholt Novice
03. juli 2003 - 08:11 #5
Så misster AntiHelt .... Det var IKKE Screen.Fonts[x] i Delphi4 , men der i mod Screen.MenuFont i Delphi4 !!!

Det er ikke det samme ! Så vil du lige tage og heste bedere efter næstegang :-)

Jens B
Avatar billede athlon-pascal Juniormester
03. juli 2003 - 14:19 #6
ZeroHero -> Der er et udmærket eksempel på brugen af Screen.Fonts med Delphi4, havde det været Screen.Fonts jeg havde været ude efter, så havde jeg kigget på det eksempel...

Ellers tak for dit svar, du kunne dog godt have brugt nogle flere heste ;-)

Mindre kode - mere overblik - mindre rigtigt - for få heste ;-)
Avatar billede zerohero Nybegynder
04. juli 2003 - 22:26 #7
he he he... st ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester