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


Автор: Ak47black 9.9.2006, 21:29
Подскажите кто работал или знает как правильно иснользовать TStringList при написании своего компонента, я использую следуюший код
Код

  protected
    FContent: TStringList;
    procedure set_FContent(Value: TStringList);
    ...
  published
    property Content: TStringList read FContent write FContent;
    ...

procedure TXP_Bar.set_FContent(Value: TStringList);
begin
  FContent:=Value;
end; 
...
constructor TXP_Bar.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FContent:= TStringList.Create;
end;

Когда программа запушена то обрашение к этому полю ошибок неприводит, но когда я пытаюсь редактировать в редактаре форм у меня получаються разные ошибки.
Примерно такого типа
Код

---------------------------
Error
---------------------------
Access violation at address 40005A0C in module 'rtl70.bpl'. Read of address 0D8425DB.
---------------------------
OK   
---------------------------

Автор: Matematik 9.9.2006, 21:56
никогда такого не далал
попробуй объявить TStrings, а создавай StringList

Добавлено @ 21:57 
так например в мемо делается

Автор: Matematik 9.9.2006, 22:38
так посмотри как в  мемо делается

Автор: Alexeis 10.9.2006, 02:04
Ak47black, код нормальный здесть ошибок нет. Надо дебагить пошагово и искать строку с ошибкой, иначе счастья не видать.

Автор: Ak47black 10.9.2006, 08:35
Цитата(alexeis1 @ 10.9.2006,  02:04)
Ak47black, код нормальный здесть ошибок нет. Надо дебагить пошагово и искать строку с ошибкой, иначе счастья не видать.

Если эта ошибка была-бы во время выполнения программы то проблем нету и мне понятно как отлаживать (при выполнении работает без ошибок  smile ) , но ошибка появляется когда я работаю в редактаре и устанавливаю в поле Content какой-нибудь текст  smile .
У меня Delphi 7.
Цитата

попробуй объявить TStrings, а создавай StringList

Тоже самое.
А дебагить это не тоже самое что и отладка програмы?  smile 

Автор: Matematik 10.9.2006, 09:15
Код

property Content: TStringList read FContent write set_FContent;


Добавлено @ 09:16 
ВОт попытался сделать на подобии TMemo, заработало

Код

unit TestComponent;

interface

uses
  SysUtils, Classes, Dialogs;

type
  TCustomTestComponent = class(TComponent)
  private
    { Private declarations }
    FContent: TStrings;
  protected
    procedure SetLines(Value: TStrings);
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Content: TStrings read FContent write SetLines;
    procedure Show;
  end;

  TTestComponent = class(TCustomTestComponent)
  published
    property Content;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TTestComponent]);
end;

{ TTestComponent }

constructor TCustomTestComponent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FContent := TStringList.Create;
end;

destructor TCustomTestComponent.Destroy;
begin
  FContent.Free;
  inherited;
end;

procedure TCustomTestComponent.SetLines(Value: TStrings);
begin
  FContent.Assign(Value);
end;

procedure TCustomTestComponent.Show;
begin
  ShowMessage(FContent.Text);
end;

end.


Добавлено @ 09:17 
Если что-то не получается, то смотрю как в VCL сделано.

Автор: Ak47black 10.9.2006, 12:23
 Matematik Спасиба огромное за код. Помогло !. +

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