создание компонента

  • Автор темы Автор темы ZloitapoG
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Z

ZloitapoG

добавьте пожалуйста как можно больше пояснений к коду компонента delphi
Код:
{
Автор компонента: Алексей Смышляев. 
Написан 21.06.2003. 
Компонент основан на компоненте GRMHint.
Позволяет задавать шрифт и цвет подсказок.
Удачи в использовании. 
Сайт автора: [url]www.alois.com.ru[/url]
E-mail автора: [email]alois1981@mail.ru[/email]
}

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.
 
Вы, если чегь не понятно, спрашивайте.
 
вот подробнее вопрос:

Код:
{
Автор компонента: Алексей Смышляев. 
Написан 21.06.2003. 
Компонент основан на компоненте GRMHint.
Позволяет задавать шрифт и цвет подсказок.
Удачи в использовании. 
Сайт автора: [url="http://www.alois.com.ru"]www.alois.com.ru[/url]
E-mail автора: [email=alois1981@mail.ru]alois1981@mail.ru[/email]
}

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;//что значит слово 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;//что за тип данных byte?
a:integer;
begin
if FActive then
begin
I := Pos(FSeparate_str, HintStr);//что присваем к I?
while I > 0 do
begin
HintStr[I] := #13;
I := Pos(FSeparate_str, HintStr);
end;
if HintInfo.HintPos.Y+10 > ScreenSize then// что такое HintInfo ?
HintInfo.HintPos.Y := ScreenSize-11;
hintinfo.CursorRect.Top:=999;что такое CursorRect? что значит 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.
 
FSeparate_str: Char;//зачем нужно это свойство
procedure SetFont(Value: TFont); virtual;//что значит слово virtual
procedure TAloisHint.SetActive(Value: Boolean);//процедура чего?
procedure TAloisHint.SetSeparate_str(Value: Char);//процедура чего?
I := Pos(FSeparate_str, HintStr);//что присваем к I?
if HintInfo.HintPos.Y+10 > ScreenSize then// что такое HintInfo ?
hintinfo.CursorRect.Top:=999;что такое CursorRect? что значит 999?
for a := 0 to Application.ComponentCount - 1 do//непонятно условие
with THintWindow(Application.Components[a]).Canvas do//совсем не понятно
Это все вопросы касаемые азов, тутн не объяснять надо, а брать учебник и читать. Что касается HintInfoб CursorRect, смотрите в справке, там все расписано.

FOnFontChange : TNotifyEvent;//для чего это событие
Оно надо, чтобы по средствам его както указывать новые строки, значит по каким то техническим причинам, автор выкрутился так.
FSeparate_str := '*';//почему *?
Вот когда прочитаете, то поймете, что такое "по умолчанию", и вопрос сам собой уйдет.


Вощем то тут все просто, прочитайте книжку по делфи
 
коментарии которые в самом начале мои...ну и на этом спасибо
 
ничего :what?:
вдруг я ошибаюсь...и предупреждаю что коменты мои а не автора
 
FSeparate_str: Char
исмвол для разделения(чего незна)

FOnFontChange : TNotifyEvent;//для чего это событие
Событие(процедура) которая вызывается дальше(напишу длее)

FSeparate_str := '*';//почему *?
как почему в принципе фиолетово,автору так понравилось

procedure TAloisHint.SetActive(Value: Boolean);//процедура чего?
меняет свойство Active(property Active: Boolean read FActive write SetActive)

procedure TAloisHint.SetSeparate_str(Value: Char);//процедура чего?
меняем символ разделения( property Separate_str: Char read FSeparate_str write SetSeparate_str;)

procedure TAloisHint.NewHintInfo(var HintStr: string;//процедура
//при которой надпись движется вместе со стрелкой)
незнаю

I: Byte;//что за тип данных byte?
ты ... открой учебник по паскалю. имеет значения от 0(или 1) до 255

I := Pos(FSeparate_str, HintStr);//что присваем к I?
ты ... открой учебник по паскалю.
функция Pos определяет позициию FSeparate_str в HintStr


if HintInfo.HintPos.Y+10 > ScreenSize then// что такое HintInfo ?
свойство

hintinfo.CursorRect.Top:=999;что такое CursorRect? что значит 999?
верхняя точка имеет позуцию по "у" 999

for a := 0 to Application.ComponentCount - 1 do//непонятно условие
ComponentCount - колическто компонентов

with THintWindow(Application.Components[a]).Canvas do//совсем не понятно
Знаеш что такое Canvas ?, если нет то

procedure TAloisHint.SetFont(Value: TFont);
begin
...
if Assigned(FOnFontChange) then OnFontChange(self);
если задано событие FOnFontChange то вызываем его FOnFontChange
 
О!!!
спасибо)
не подскажите как вам можно повысить репутацию?:welcome:
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!