Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизКак (или где) поймать изменение вводимых Items Найти похожие ветки
← →
dataMaster (2003-09-19 10:53) [0]Всем привет! Пишу потомка от TRadioGroup с возможностью переноса строк в Items по заданному разделителю. Код:
unit dmRadioGroupML;
interface
uses
Windows, SysUtils, Classes, Controls, StdCtrls, ExtCtrls;
type
TdmRadioGroupML = class(TRadioGroup)
private
{ Private declarations }
FItemSeparator : string;
procedure SetLines;
protected
{ Protected declarations }
procedure CreateWnd ; override;
procedure DestroyWnd; override;
public
{ Public declarations }
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property ItemSeparator:string read FItemSeparator write FItemSeparator;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("My", [TdmRadioGroupML]);
end;
procedure TdmRadioGroupML.SetLines;
// процедура установки многострочности в Items
var
k : integer;
begin
FItemSeparator:= Trim(FItemSeparator);
for k:=0 to Items.Count-1 do
begin
Items[k]:=StringReplace(Items[k],
ItemSeparator,
#13#10,
[rfReplaceAll]+[rfIgnoreCase]);
SetWindowLong(TRadioButton(Controls[Items.IndexOf(Items[k])]).Handle,
GWL_STYLE,
GetWindowLong(TRadioButton(Controls[Items.IndexOf(Items[k])]).Handle,
GWL_STYLE) or BS_MULTILINE);
end;
end;
constructor TdmRadioGroupML.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
end;
destructor TdmRadioGroupML.Destroy;
begin
inherited Destroy;
end;
procedure TdmRadioGroupML.CreateWnd;
begin
inherited CreateWnd;
SetLines;
end;
procedure TdmRadioGroupML.DestroyWnd;
begin
inherited Destroy;
end;
end.
Проблема состоит в том, что при тестировании компонента в программе кодом
procedure TForm1.FormCreate(Sender: TObject);var
Rgm:TdmRadioGroupML;
begin
Rgm:=TdmRadioGroupML.Create(Form1);
with Rgm do begin
Parent:=Form1;
ItemSeparator:="@";
with Items do begin
Add("1@2@3");
Add("1@2");
Add("1@2@3");
end;
end;
end;
строки переносятся только после первогоAdd("1@2@3");
. Вторая и третья командыAdd("1@2");
иAdd("1@2@3");
не обрабатываются. Не подскажете, что неправильно?
← →
dataMaster (2003-09-19 12:32) [1]Неужели никто не поможет?
← →
willys (2003-09-19 13:44) [2]SetLines у тебя вызывается при создании дескриптора компонента. т.е. всего один раз... а тебе надо перехватывать изменение Items.
← →
dataMaster (2003-09-19 13:56) [3]2willys
И как это сделать?
← →
dataMaster (2003-09-19 18:12) [4]Помогите кто-нибудь.
← →
BOA_KAA (2003-09-19 19:10) [5]Создать обработчик события, которое будет возникать при изменении Items.Count. Или я неправильно вопрос понял?
← →
REA (2003-09-19 22:43) [6]При создании там используется код:
FItems := TStringList.Create;
TStringList(FItems).OnChange := ItemsChange;
Это можно было бы использовать, если бы что-либо было в protected части, а так проще выдрать код компонента целиком и сделать свой обработчик ItemsChange.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c