Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.02;
Скачать: CL | DM;

Вниз

Как (или где) поймать изменение вводимых 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
4-4165
Ajax
2003-07-30 09:42
2003.10.02
Работа с текстом в чужих окнах


3-3768
KDS
2003-09-11 18:15
2003.10.02
SUBSTR и сложение строк в SQL


1-3916
WondeRu
2003-09-22 10:03
2003.10.02
Шо за месаг такой в winNTs 0B000h и 0B001h


1-3959
stud
2003-09-20 12:43
2003.10.02
как передать фокус компонентам по порядку их следования


1-3859
MasterK
2003-09-19 09:25
2003.10.02
Как ограничить тип переменной, т.е. Double->Real?