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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 21:24   #1
Zloi_tapoG
Новичок
Джуниор
 
Регистрация: 05.11.2009
Сообщений: 1
По умолчанию новый компонент

прокоментируйте пожалуйста подробней код компонента:
Код:
 {
Автор компонента: Алексей Смышляев. 
Написан 21.06.2003. 
Компонент основан на компоненте GRMHint.
Позволяет задавать шрифт и цвет подсказок.
Удачи в использовании. 
Сайт автора: www.alois.com.ru
E-mail автора: alois1981@mail.ru
}
 
unit AloisHint;
 
interface
 
uses
  SysUtils, WinTypes, WinProcs, Messages,
  Classes, Graphics, Controls, Forms, Dialogs;
 
type
  TAloisHint = class(TComponent)
  private
   FSeparate_str: Char;
   ScreenSize: Integer;
   FActive: Boolean;
   FOnShowHint: TShowHintEvent;
   FColor:TColor;
   FFont:TFont;
   FOnFontChange : TNotifyEvent;
   procedure SetFont(Value: TFont); virtual;
   function GetFont:TFont; virtual;
  protected//устнавливаем свойства компонента
    procedure SetActive(Value: Boolean);
    procedure SetSeparate_str(Value: char);
    procedure NewHintInfo(var HintStr: string;
    var CanShow: Boolean;
    var HintInfo: THintInfo);
  public
 
  published
    constructor Create(aowner: Tcomponent); override;
 
    destructor destroy; override;
 
    property Font: TFont read GetFont write SetFont;
    property Active: Boolean read FActive write SetActive;
    property Separate_str: Char read FSeparate_str write SetSeparate_str;
    property Color:TColor read FColor write FColor;
    property OnFontChange:TNotifyEvent read     FOnFontChange write FOnFontChange;
  end;
 
procedure Register;
 
implementation
 
constructor TAloisHint.Create(AOwner: TComponent);
begin
inherited Create(AOwner);//вызываем предка
FActive := True;//устанавливаем значения по умолчанию
FSeparate_str := '*';
FColor:=clWindow;
Application.OnShowHint := NewHintInfo;
ScreenSize := GetSystemMetrics(SM_CYSCREEN);
FFont := TFont.Create;
FFont.Style := [];
FFont.Name := 'Arial';
FFont.Size := 8;
end;
 
destructor TAloisHint.destroy;//освобождаем память 
begin
  FFont.Destroy;
  inherited destroy;
end;
 
procedure TAloisHint.SetActive(Value: Boolean);
begin
FActive := Value;
end;
 
procedure TAloisHint.SetSeparate_str(Value: Char);
begin
FSeparate_str := Value;
end;
 
procedure TAloisHint.NewHintInfo(var HintStr: string;//процедура 
//при которой надпись движется вместе со стрелкой)
var CanShow: Boolean;
var HintInfo: THintInfo);
var 
I: Byte;
a:integer;
begin
if FActive then
begin
I := Pos(FSeparate_str, HintStr);
while I > 0 do
begin
HintStr[I] := #13;
I := Pos(FSeparate_str, HintStr);
end;
if HintInfo.HintPos.Y+10 > ScreenSize then
HintInfo.HintPos.Y := ScreenSize-11;
hintinfo.CursorRect.Top:=999;
hintinfo.HintColor:=FColor;
for a := 0 to Application.ComponentCount - 1 do
if Application.Components[a] is THintWindow then
with THintWindow(Application.Components[a]).Canvas do
begin
Font.Name:=FFont.Name;
Font.Color:=FFont.Color;
Font.Style:=FFont.Style;
Font.Size:=FFont.Size;
Font.Charset:=FFont.Charset;
Font.PixelsPerInch:=FFont.PixelsPerInch;
Font.Height:=FFont.Height;
end;
end;
end;
 
procedure TAloisHint.SetFont(Value: TFont);
begin
if Assigned(Value) then
FFont.Assign(Value);
if Assigned(FOnFontChange) then OnFontChange(self);
end;
 
function TAloisHint.GetFont:TFont;
begin
Result:=FFont;
end;
 
procedure Register;
begin
  RegisterComponents('AloisPack', [TAloisHint]);
end;
 
end.

Последний раз редактировалось Stilet; 30.10.2010 в 21:33.
Zloi_tapoG вне форума Ответить с цитированием
Старый 30.10.2010, 16:22   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

а что обратится к автору слабо?
E-mail автора: alois1981@mail.ru
ZuBy вне форума Ответить с цитированием
Старый 30.10.2010, 17:04   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Все можно сделать гораздо проще.
В примере перехватывается событие Application.OnShowHint и изменяется шрифт Hint'а.
Код:
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{Private declarations}
public
procedure MyShowHint(var HintStr: string; var CanShow: Boolean;var HintInfo: THintInfo);
{Public declarations}
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.MyShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo);
var i : integer;
begin
for i := 0 to Application.ComponentCount - 1 do
if Application.Components[i] is THintWindow then
with THintWindow(Application.Components[i]).Canvas do
begin
Font.Name:= 'Arial';
Font.Size:= 18;
Font.Style:= [fsBold];
HintInfo.HintColor:= clWhite;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnShowHint := MyShowHint;
end;
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Компонент-предок, компонент-родитель amico Помощь студентам 1 23.09.2015 21:20
Как установить новый компонент? -=Alex=- Общие вопросы Delphi 16 11.06.2010 21:04
Как самому написать новый компонент Yury Общие вопросы Delphi 2 11.05.2007 21:25