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

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

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Компонент ListView , в котором эл-нты списка через строчку отображаются разными цветами
    Проблема в том что, при добавлении на форму компонента, в ObjectInspector цвета FirstColor и SecondColor черные, т.е. не по умолчанию. Также, даже если их изменить в ObjectInspector при запуске программы они все равно остаются черные.
    Для FirstColor я оставил как есть, а для SecondColor я добавил процедуру изменяющую значение второго цвета, но все равно не работает.

    Вот собственно код:
    ExpandedWrap disabled
      unit ColoredListView;
       
      interface
       
      uses
        SysUtils, Classes, Controls, ComCtrls, Windows, Graphics;
       
      type
        TColoredListView = class(TListView)
        private
          { Private declarations }
          FColor1 : TColor;
          FColor2 : TColor;
          procedure SetColor2(Value:TColor);
        protected
          { Protected declarations }
        public
          { Public declarations }
          constructor Create(AOwner: TComponent); override;
          destructor Destroy; override;
          procedure OnDrawItem(Sender: TCustomListView;
        Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
        published
          { Published declarations }
          property FirstColor : TColor read FColor1 write FColor1 default $00DEEAD7;
          property SecondColor : TColor read FColor2 write SetColor2 default $00C9DDBD;
        end;
       
      procedure Register;
       
      implementation
       
      {$R ColoredListView.dcr}
       
      procedure Register;
      begin
        RegisterComponents('Samples', [TColoredListView]);
      end;
       
      constructor TColoredListView.Create(AOwner: TComponent);
      begin
        inherited;
        Color:=FColor2;
        OnCustomDrawItem:=OnDrawItem;
      end;
       
      destructor TColoredListView.Destroy;
      begin
        inherited;
      end;
       
      procedure TColoredListView.SetColor2(Value:TColor);
      begin
        FColor2:=Value;
      end;
       
      procedure TColoredListView.OnDrawItem(Sender: TCustomListView;
        Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
      var
          i:word;
      begin
        if item = nil then
         EXIT;
        i := Item.Index;
        if trunc((i) / 2) < (i / 2) then
         sender.canvas.brush.Color := FColor1
        else
         sender.canvas.brush.Color := FColor2;
      end;
       
       
      end.
      ExpandedWrap disabled
        unit ColoredListView;
         
        interface
         
        uses
          SysUtils, Classes, Controls, ComCtrls, Windows, Graphics, Math;
         
        const
          clFirst  = $00DEEAD7;
          clSecond = $00C9DDBD;
         
        type
          TColoredListView = class(TListView)
          private
            { Private declarations }
            FColor1 : TColor;
            FColor2 : TColor;
            procedure SetColor1(Value:TColor);
            procedure SetColor2(Value:TColor);
          protected
            { Protected declarations }
          public
            { Public declarations }
            constructor Create(AOwner: TComponent); override;
            procedure OnDrawItem(Sender: TCustomListView;
          Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
          published
            { Published declarations }
            property FirstColor : TColor read FColor1 write SetColor1 default clFirst;
            property SecondColor : TColor read FColor2 write SetColor2 default clSecond;
          end;
         
        procedure Register;
         
        implementation
         
        {$R ColoredListView.dcr}
         
        procedure Register;
        begin
          RegisterComponents('Samples', [TColoredListView]);
        end;
         
        constructor TColoredListView.Create(AOwner: TComponent);
        begin
          inherited;
          FColor1:=clFirst;
          FColor2:=clSecond;
          Color:=FColor2;
          OnCustomDrawItem:=OnDrawItem;
        end;
         
        procedure TColoredListView.SetColor1(Value:TColor);
        begin
          if FColor1<>Value then
          begin
            FColor1:=Value;
            Invalidate;
          end;
        end;
         
        procedure TColoredListView.SetColor2(Value:TColor);
        begin
          if FColor2<>Value then
          begin
            FColor2:=Value;
            Invalidate;
          end;
        end;
         
        procedure TColoredListView.OnDrawItem(Sender: TCustomListView;
          Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
        begin
          if Assigned(Item) then
            Sender.Canvas.Brush.Color:=IfThen(Odd(Item.Index),FColor1,FColor2);
        end;
         
        end.
        Спасибо!
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0219 ]   [ 16 queries used ]   [ Generated: 1.05.24, 19:45 GMT ]