Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  135

•  TDictionary Custom Sort  3 315

•  Fast Watermark Sources  3 065

•  3D Designer  4 824

•  Sik Screen Capture  3 320

•  Patch Maker  3 535

•  Айболит (remote control)  3 637

•  ListBox Drag & Drop  2 996

•  Доска для игры Реверси  81 554

•  Графические эффекты  3 927

•  Рисование по маске  3 231

•  Перетаскивание изображений  2 613

•  Canvas Drawing  2 735

•  Рисование Луны  2 561

•  Поворот изображения  2 166

•  Рисование стержней  2 161

•  Paint on Shape  1 564

•  Генератор кроссвордов  2 226

•  Головоломка Paletto  1 764

•  Теорема Монжа об окружностях  2 214

•  Пазл Numbrix  1 682

•  Заборы и коммивояжеры  2 052

•  Игра HIP  1 279

•  Игра Go (Го)  1 224

•  Симулятор лифта  1 471

•  Программа укладки плитки  1 214

•  Генератор лабиринта  1 542

•  Проверка числового ввода  1 352

•  HEX View  1 490

•  Физический маятник  1 355

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Многострочный заголовок у TBitBtn 2



Я создал удобный компонент, инкапсулирующий обычную кнопку, но с возможностью многострочного заголовка. В *действительности* - это TBitBtn, чей Glyph *нарисован* в виде заголовка с переносом текста. Реальный заголовок невидим. Это работает! Попробуйте с этим поэкспериментировать и сообщите мне о ваших новых находках. Я был удивлен, что это свойство оказалось легко *подавить*. Тем более, что это свойство public/published, а не какой-то кот в мешке. Все это так, но вы можете перекрыть свойство другим с таким же именем и с атрибутом READ ONLY. И вы можете ссылать на свойство предка, как, например, "Inherited Glyph". ООП!


unit C_wrapb;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Buttons;

type
  TWrapBtn = class(TBitBtn)
  private
    { Private declarations }
    function GetGlyph: string;
    function GetMargin: Integer;
    function GetSpacing: Integer;
    function GetKind: TBitBtnKind;
    function GetLayout: TButtonLayout;
    function GetNumGlyphs: TNumGlyphs;
    procedure CMTextChanged(var Message: TMessage);
      message CM_TEXTCHANGED;
    procedure CMFontChanged(var Message: TMessage);
      message CM_FONTCHANGED;
    procedure WMSize(var Msg: TWMSize);
      message WM_SIZE;
    procedure CaptionGlyph;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property Glyph: string read GetGlyph;
    property Margin: Integer read GetMargin;
    property Spacing: Integer read GetSpacing;
    property Kind: TBitBtnKind read GetKind;
    property Layout: TButtonLayout read GetLayout;
    property NumGlyphs: TNumGlyphs read GetNumGlyphs;
  end;

procedure Register;

implementation

procedure TWrapBtn.CaptionGlyph;
var
  GP: TBitmap;
  R: TRect;
  Buff: array[0..255] of Char;
begin
  GP := TBitmap.Create;
  try
    with GP do
    begin
      Canvas.Font := Self.Font;
      StrPCopy(Buff, Caption);
      inherited Margin := 0;
      inherited Spacing := GetSpacing;
      Width := Self.Width - GetSpacing;
      Height := Self.Height - GetSpacing;
      R := Bounds(0, 0, Width, 0);
      DrawText(Canvas.Handle, Buff, StrLen(Buff), R,
        DT_CENTER or DT_WORDBREAK or DT_CALCRECT);
      OffsetRect(R, (Width - R.Right) div 2,
        (Height - R.Bottom) div 2);
      DrawText(Canvas.Handle, Buff, StrLen(Buff), R,
        DT_CENTER or DT_WORDBREAK);
    end;
    inherited Glyph := GP;
    inherited NumGlyphs := 1;
  finally
    GP.Free;
  end;
end;

function TWrapBtn.GetGlyph: string;
begin
  Result := '(Н/Д)';
end;

procedure TWrapBtn.CMTextChanged(var Message: TMessage);
begin
  inherited;
  CaptionGlyph;
end;

procedure TWrapBtn.CMFontChanged(var Message: TMessage);
begin
  inherited;
  CaptionGlyph;
end;

procedure TWrapBtn.WMSize(var Msg: TWMSize);
begin
  inherited;
  CaptionGlyph;
end;

function TWrapBtn.GetMargin: Integer;
begin
  Result := 0;
end;

function TWrapBtn.GetSpacing: Integer;
begin
{$IFDEF Win32}
  Result := 12;
{$ELSE}
  Result := 6;
{$ENDIF}
end;

function TWrapBtn.GetKind: TBitBtnKind;
begin
  Result := bkCustom;
end;

function TWrapBtn.GetLayout: TButtonLayout;
begin
  Result := blGlyphLeft;
end;

function TWrapBtn.GetNumGlyphs: TNumGlyphs;
begin
  Result := 1;
end;

procedure Register;
begin
  RegisterComponents('FAQ', [TWrapBtn]);
end;

end.








Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте