Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TStrings как свойство объекта


Автор: ~FoX~ 14.9.2010, 09:38
возникла надобность состряпать грид с возможностью задавать заголовки в дизайн тайме...
Собственно в дизайн тайме все нормально работает, т.е. свойство в инспекторе появляется, в него можно заколотить список заголовков и они даже корректно появляются (куда они денутся))))). 
А вот при запуске приложения все заголовки чистые...
Если вынести FCaptionList в public  и в ран тайме его подергать, то он содержит все что нужно, но заголовки все равно пустые....
Ткните носом в кривизну рук )))))
Код

unit StringGridCaption;

interface

uses
  SysUtils, Classes, Controls, Grids, Windows;

type
  TStringGridCaption = class(TStringGrid) //понаследовали

  private
    { Protected declarations }
    FCaptionList: TStrings; //структура свойства
    procedure SetCaptionList(Value: TStrings); //устанавливаем
    function GetCaptionList: TStrings; //получаем

  protected
    { Protected declarations }

  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;  //конструктор
    destructor Destroy; override; //деструктор

  published
    { Published declarations }
    property CaptionList: TStrings read GetCaptionList write SetCaptionList; //собственно само свойство  end;


implementation

constructor TStringGridCaption.Create(AOwner: TComponent); //конструктор
begin
  FCaptionList := TStringList.Create; //создали лист для свойства
  inherited Create(AOwner);

  DefaultRowHeight := 21; //установили дефолтные значения
  DefaultColWidth := 32;
end;


procedure TStringGridCaption.SetCaptionList(Value: TStrings); //устанавливаем капшены столбцов
begin
  FCaptionList.Assign(Value); //просто для примера
//..................
  Rows[0].Assign(FCaptionList); //установили заголовки столбцов
//..................
end;

function TStringGridCaption.GetCaptionList: TStrings;
begin
  Result := FCaptionList; //получили заголовки обратно
end;

destructor TStringGridCaption.Destroy; //диструктор
begin
  FCaptionList.Free; //не забываем уничтожать все лишнее
  inherited;
end;

end.

Автор: pseud 14.9.2010, 10:17
Цитата(~FoX~ @  14.9.2010,  09:38 Найти цитируемый пост)
Ткните носом в кривизну рук )))))

при запуске приложения твои строки уже хранятся в FCaptionList и событие SetCaptionList не происходит

Добавлено через 5 минут и 40 секунд
может так (пальцем в небо)...
Код

type
  TStringGridCaption = class(TStringGrid) //понаследовали
  .........
  protected
    procedure Paint; override;
  .........

procedure TStringGridCaption.Paint;
begin
  if not FColumnsIsAssigned then
  begin
    Rows[0].Assign(FCaptionList); //установили заголовки столбцов
    FColumnsIsAssigned := True;
  end;

  inherited;
end;

Автор: ~FoX~ 14.9.2010, 10:30
Цитата(pseud @  14.9.2010,  11:17 Найти цитируемый пост)
при запуске приложения твои строки уже хранятся в FCaptionList и событие SetCaptionList не происходит

Вот до этого я допер )))) Только пытался использовать OnDrawCell плачевно получилось ))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)