На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Компонент, типа TImage
    Учусь создавать собственные визуальные компоненты. Задача: создать компонент потомок TGraphicControl, представляющий собой любую статичную картинку на форме, представленный соответствующей картинкой на панели компонентов. Инсталировать в среду я вроде понял как. У меня сама суть не получается. Вот в этом юните описан компонент
    ExpandedWrap disabled
      unit MyGraphicControl;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, ExtCtrls;
       
      type
        TMyGraphicControl = class(TGraphicControl)
        private
          FPicture: TPicture;
          procedure SetPicture(value: TPicture);
        protected
        public
          Constructor Create(AOwner: TComponent); override;
        published
          property Picture: TPicture read FPicture write SetPicture;
        end;
       
      procedure Register;
       
      implementation
       
      Constructor TMyGraphicControl.Create(AOwner: TComponent);
      begin
        inherited Create(AOwner);
        FPicture := TPicture.Create;
        Height := 105;
        Width := 105;
      end;
       
      procedure Register;
      begin
        RegisterComponents('Samples', [TMyGraphicControl]);
      end;
       
      procedure TMyGraphicControl.SetPicture(Value: TPicture);
      begin
        FPicture.Assign(Value);
      end;
       
      end.


    А вот здесь я с ним работаю:
    ExpandedWrap disabled
      unit Unit1;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, ExtCtrls, MyGraphicControl;
       
      type
        TForm1 = class(TForm)
          procedure FormCreate(Sender: TObject);
        private
          { Private declarations }
        public
          MyGraphicControl1: TMyGraphicControl;
        end;
       
      var
        Form1: TForm1;
       
      implementation
       
      {$R *.dfm}
       
      procedure TForm1.FormCreate(Sender: TObject);
      begin
        MyGraphicControl1:=TMyGraphicControl.Create(self);
        MyGraphicControl1.Picture.LoadFromFile('BitMap1.bmp');
      end;
       
      end.


    Но картинка не отображается...
      если размеры картинки не совпададут, ничего не будет...
        DroN_S, не понял. Т.е. надо писать
        ExpandedWrap disabled
          Constructor TMyGraphicControl.Create(AOwner: TComponent);
          begin
            inherited Create(AOwner);
            FPicture := TPicture.Create;
            Height := <высота картинки>;
            Width := <ширина картинки>;
          end;


        Иначе картинка не появится?
          Ну описали свойство для хранения графики.. А где же вывод? :o
          Нужно ещё переопределить виртуальный метод
          ExpandedWrap disabled
            procedure TGraphicControl.Paint;
            begin
            end;

          который изначально пустой.
          Выход: дописываем новый метод, и его имплементацию:
          ExpandedWrap disabled
            ...
            type
              TMyGraphicControl = class(TGraphicControl)
              private
                FPicture: TPicture;
                procedure SetPicture(value: TPicture);
              protected
                procedure Paint; override;
              public
                Constructor Create(AOwner: TComponent); override;
              published
                property Picture: TPicture read FPicture write SetPicture;
              end;
            ...
            implementation
            ...
            procedure TMyGraphicControl.Paint;
            begin
                if Assigned(FPicture) then
                    Canvas.StretchDraw(ClientRect, FPicture.Bitmap);
            end;

          Теперь всё отрисовывается. ;)
            Цитата SerCh @
            MyGraphicControl1:=TMyGraphicControl.Create(self); MyGraphicControl1.Picture.LoadFromFile('BitMap1.bmp');

            И еще Parent надо задать.
              Цитата s-mike @
              И еще Parent надо задать

              Точно, просто я в DesignTime создавал, и картинку грузил даблкликом.. ;)
              В DesignTime тоже отрисовывается.
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0242 ]   [ 16 queries used ]   [ Generated: 3.05.24, 16:11 GMT ]