Шрифты

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Шрифты

Сообщение ronin » 28.03.2010 09:53:23

Здравствуйте, вопрос такой: как изменить шрифты у StatusBar и MainMenu?

вот мой код для статусбара:

Код: Выделить всё
procedure TMainForm.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
with StatusBar.Canvas do
  begin
    Font.Size := 6;
    Font.Pitch := fpFixed;

    //Panel background color
    FillRect(Rect) ;
    //Panel Text
    TextRect(Rect,Rect.Left,Rect.Top,Panel.Text) ;
  end;
end;


соответственно для каждой созданной панели на баре свойство style=psOwnerDraw

Но шрифт как ни странно не меняется, он равняется тому что установлен в системе, т.е. в параметрах системы меняю шрифт, на статусбаре он меняется, но программно не меняется. Проблема в том что размер окна ограничен, и длина панелей на баре тоже, при слишком большом размере шрифта, текст не влезает. Как устранить данную проблему?

p.s. прога под линукс
ronin
постоялец
 
Сообщения: 174
Зарегистрирован: 27.01.2010 00:14:46

Re: Шрифты

Сообщение Maxizar » 28.03.2010 20:30:52

Возможно вот так:

Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ComCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    StatusBar1: TStatusBar;
    procedure Button1Click(Sender: TObject);
    procedure StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
      const Rect: TRect);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
     StatusBar1.Font.Size:=8; // Будет менять шрифт всей понели
end;

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin

    StatusBar.Canvas.Font.Size := 6;
    StatusBar.Canvas.Font.Pitch := fpFixed;


    StatusBar.Font.Size:=Random(15); // Будет менять шрифт всей понели
                                     //При перерисовке бара увидишь что будет
                                     //при этом первая панель будет ок :)
                                     //я сделал три панели и тока в одной из них выстовил
                                     //psOwnerDraw (в 1-ой)- вот для нее будет работать код ниже
    //Panel background color
    StatusBar.Canvas.Brush.Color:=clRed;
    StatusBar.Canvas.FillRect(Rect);
    //Panel Text

   StatusBar.Canvas.TextRect(Rect,Rect.Left+10,Rect.Top+5,
   Panel.Text) ;

end;

end.

Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Шрифты

Сообщение ronin » 29.03.2010 22:27:12

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

поставил в StatusBar1DrawPanel ShowMessage, сообщений так и не увидел, почему не отрабатывается данное событие? может я чё то не так делаю?

Добавлено спустя 15 часов 47 минут 52 секунды:
в системе посмотрел, при изменении шрифта (размера) меняется длина/высота кнопок, контролов, а кое-где наблюдается указанный мною эффект - обрезается название

основной вопрос - оставить этот момент на совести пользователя и проставить во всёи приложении шрифт по умолчанию (системный) или стоит программно обрабатывать и регулировать размер шрифта, что бы текст на контролах не заползал за пределы и не пропадал? если это так, то как быть со статусбаром?
ronin
постоялец
 
Сообщения: 174
Зарегистрирован: 27.01.2010 00:14:46


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

Рейтинг@Mail.ru