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

Тема в разделе "Delphi - Компоненты", создана пользователем ZloitapoG, 28 окт 2010.

Статус темы:
Закрыта.
  1. ZloitapoG

    ZloitapoG Гость

    добавьте пожалуйста как можно больше пояснений к коду компонента delphi
    Код (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.
     
  2. etc

    etc Гость

    Вы, если чегь не понятно, спрашивайте.
     
  3. ZloitapoG

    ZloitapoG Гость

    вот подробнее вопрос:

    Код (Text):
    {
    Автор компонента: Алексей Смышляев.
    Написан 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.
     
  4. etc

    etc Гость

    Это все вопросы касаемые азов, тутн не объяснять надо, а брать учебник и читать. Что касается HintInfoб CursorRect, смотрите в справке, там все расписано.

    Оно надо, чтобы по средствам его както указывать новые строки, значит по каким то техническим причинам, автор выкрутился так.
    Вот когда прочитаете, то поймете, что такое "по умолчанию", и вопрос сам собой уйдет.


    Вощем то тут все просто, прочитайте книжку по делфи
     
  5. ZloitapoG

    ZloitapoG Гость

    коментарии которые в самом начале мои...ну и на этом спасибо
     
  6. etc

    etc Гость

    И что?
     
  7. ZloitapoG

    ZloitapoG Гость

    ничего :what?:
    вдруг я ошибаюсь...и предупреждаю что коменты мои а не автора
     
  8. etc

    etc Гость

    А кто автор компонетна? Вы?
     
  9. ZloitapoG

    ZloitapoG Гость

    нет конечно
     
  10. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    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 ?, если нет то http://www.codenet.ru/progr/delphi/stat/gdi.php

    procedure TAloisHint.SetFont(Value: TFont);
    begin
    ...
    if Assigned(FOnFontChange) then OnFontChange(self);
    если задано событие FOnFontChange то вызываем его FOnFontChange
     
  11. ZloitapoG

    ZloitapoG Гость

    О!!!
    спасибо)
    не подскажите как вам можно повысить репутацию?:welcome:
     
  12. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
  13. ZloitapoG

    ZloitapoG Гость

    эх....у меня маловато сообщений
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей