Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компонент из TWinControl и его Font property, трабла 
:(
    Опции темы
SilentRoach
Дата 28.5.2006, 04:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 18.4.2006

Репутация: нет
Всего: нет



Добрый день!

Пишу компонент. Наследник TWinControl. В нем используется стандартный TLabel. (Не надо говорить что проще сделать наследний от TLabel, это не соответствует цели, этот компонент внутри разрабатываемого компонента - не первостепенен).
Есть, значится, приватная переменная FFont: TFont и property Font: TFont read FFont write SetFont;
На Create создаю шрифт, на Destroy освобождаю.
На SetFont шрифту внутреннего компонента (TLabel) делаю так FLabel.Font.Assign(Value); т.е. передаю шрифт.

Всё ок, компилируется, дизайнится. 
Но! Изменяю шрифт со стандартного на жирный, к примеру. Компилирую, запускаю. Шрифт - стандартный.
Он не сохраняется  smile 

Лучшее до чего я додумался - делать repaint в SetFont или invalidate. Судя по тому, что не помогает - я балбес.
Исправьте, пожалуйста, глупого smile 
PM MAIL   Вверх
Coder
Дата 28.5.2006, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 5
Всего: 11



покажи код, как именно изменяешь шрифт 
PM MAIL   Вверх
Snowy
Дата 28.5.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вообще-то у TWinControl уже есть property Font.
Но, если тебе нужно еще одно, пропиши так:
Код

 property Font: TFont read FFont write SetFont stored true;

И в процедуре установки фонта установи ParentFont в False. 
PM MAIL   Вверх
SilentRoach
Дата 28.5.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 18.4.2006

Репутация: нет
Всего: нет



Snowy, попробовал со stored и ParentFont, не вышло ничего smile
а насчет уже имеющегося Font'а в TWinControl - сорри, не доглядел. но как его тогда использовать для своих целей-то?
нужно ловить какое-то сообщение и изменять Font Label'а исходя из того, что оно послало?

Добавлено @ 15:42 
тьфу, дурак я smile
поставил ParentFont := true; у Label'а.
все, проблема решена. спасибо smile

Добавлено @ 15:48 
Теперь, если я располагаю компонент на вкладке PageControl и меняю вкладку компонент исчезает  smile 
Привожу код. Помогите, плиз smile

Код

unit RBevelledLabel;

interface

uses
  Controls, Classes, ExtCtrls, Graphics, Windows, Messages,
  RLabel;

type
  TRBevelledLabel = class(TWinControl)
  private
    FLabel: TRLabel;
    FBevel: TBevel;

    FAutoSize: boolean;
    procedure SetLabelAutoSize(const Value: boolean);
        
    function GetCaption: string;
    procedure SetCaption(const Value: string);

    procedure InnerSize;
  protected
    procedure CreateParams(var params: TCreateParams); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Caption: string read GetCaption write SetCaption;
    property AutoSize: boolean read FAutoSize write SetLabelAutoSize default true;

    property Font;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyComponents', [TRBevelledLabel]);
end;

{ TRBevelledLabel }

constructor TRBevelledLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  FAutoSize := true;

  FLabel := TRLabel.Create(Self);
  FLabel.Parent := Self;
  FLabel.ParentFont := true;

  FBevel := TBevel.Create(Self);
  FBevel.Parent := Self;
  FBevel.Shape := bsTopLine;
  FBevel.Height := 2;

  InnerSize;
end;

procedure TRBevelledLabel.CreateParams(var params: TCreateParams);
begin
  inherited CreateParams(params);
  params.ExStyle := params.ExStyle or WS_EX_TRANSPARENT;
end;

destructor TRBevelledLabel.Destroy;
begin
  if FBevel <> nil then
    FBevel.Free;
    
  if FLabel <> nil then
    FLabel.Free;

  inherited;
end;

function TRBevelledLabel.GetCaption: string;
begin
  Result := FLabel.Caption;
end;

procedure TRBevelledLabel.InnerSize;
begin
  FBevel.Width := FLabel.Width;
  FBevel.Top := FLabel.Height + 1;

  Width := FLabel.Width;
  Height := FBevel.Top + FBevel.Height;
end;

procedure TRBevelledLabel.SetLabelAutoSize(const Value: boolean);
begin
  FAutoSize := Value;
  InnerSize;
end;

procedure TRBevelledLabel.SetCaption(const Value: string);
begin
  FLabel.Caption := Value;
  InnerSize;
end;

end.
  

Это сообщение отредактировал(а) SilentRoach - 28.5.2006, 15:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0892 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.