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

Вниз

ChekListBox и Record   Найти похожие ветки 

 
Yakudza ©   (2002-03-17 20:19) [0]

Есть такая запись:

type Rec = record
Name : String;
send : boolean;
end

Каким образом можно "связать" ChekListBox c записью.
То есть что бы при изминении состояния флажка в ChekListBox менялось значение send на True или False соответсвенно.
Буду благодарен за любую помощь.


 
Anatoly Podgoretsky ©   (2002-03-17 20:26) [1]

OnClick?


 
Yakudza ©   (2002-03-17 20:28) [2]

Да


 
Song ©   (2002-03-17 22:03) [3]

Var Ch:Rec;

....


Procedure CheckListBox1Click(Sender:....
Begin
Ch.Send:=TCheckListBox(Sender).Checked;
End;

Это то?


 
Yakudza ©   (2002-03-18 12:35) [4]

Не совсем..
Я не правильно обьяснил, что я хочу сделать.
А нужно вот что:
...
type
TRecipient = record
ID : Integer;
FirstName : String;
LastName : String;
Send : boolean;
end;
...
var
Rlist : array of TRecipient;
...
Вот я добавляю из базы данные:

procedure TfrmSend.GreateList;
var
i,j : integer;
begin
SetLength(Rlist,DM.tblWarden.RecordCount);
DM.tblWarden.First;
j := 0;
for i := 0 toDM.tblWarden.RecordCount -1 do
begin
Rlist[j].ID := DM.tblWarden.FieldByName("ID").Value;
Rlist[j].FirstName := DM.tblWarden.FieldByName("FirstName").Value;
Rlist[j].LastName := DM.tblWarden.FieldByName("LastName").Value;
Inc(j,1);
DM.tblWarden.Next;
end;
end;

Зетем содержимое масива я вывожу что бы пользоваель мог выбирать:
procedure TfrmSend.ShowList;
var
i : integer;
begin
chbList.Items.Clear;
for i := 0 to DM.tblWarden.RecordCount -1 do
begin
chbList.Items.Add(RList[i].FirstName+" "+RList[i].LastName);
end;
Inc(i,1);
end;

Так вот мне нужно что бы когда пользователь переключает флажок, то значение Rlist.send менялось бы на соответсвующее. Но ведь это масив из записей, вот я и спрашиваю как можно "связать" все это.

Спасибо.


 
Song ©   (2002-03-18 12:58) [5]

Надо обрабатывать onMouseDown

procedure TForm1.CheckListBox2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var t:Integer;
begin
IF Button=mbLeft then
With TCheckListBox(Sender) Do
Begin
t:=ItemAtPos(Point(X,Y),True);
IF t<>-1 then RList[t].Send:=Checked[t];
End;
End;

При необходимости добавьте ещё какие-либо проверки.


 
Song ©   (2002-03-18 13:00) [6]

2Yakudza ©
Красиво у Вас получилось выделять операторные скобки. Неужели вручную с помощью тегов делали? :o


 
MBo ©   (2002-03-18 13:09) [7]

кроме того, если соответствие между номером в списке и номером элемента массива неоднозначное, можно хранить в Items.Objects
номер элемента массив с приведением tobject(nmasselem)


 
Yakudza ©   (2002-03-18 16:36) [8]

>MBo
А можно подробней пожалуйста ?
я просто не могу понять каким образом определять что чекбокс соответствует записи в масиве.


 
Yakudza ©   (2002-03-18 16:38) [9]

>Song © (18.03.02 13:00)
Ну да ! Что б курасиво было :))


 
MBo ©   (2002-03-18 16:45) [10]

а тебе это надо?
т.е. если ты заполняешь ListBox именно так, как в (18.03.02 12:35), то пятая строчка=>Rlist[4] и Song все написал


 
MBo ©   (2002-03-18 16:54) [11]

может, все держать в CheckListBox?
type
TRecipient = object //можно и record оставить,
ID : Integer; // больше писанины с ^ просто
FirstName : String;
LastName : String;
Send : boolean;
end;
...

procedure TfrmSend.GreateList;
var
i,j : integer;
R:TRecipient;
begin
DM.tblWarden.First;
j := 0;
for i := 0 toDM.tblWarden.RecordCount -1 do
begin
R:=TRecipient.Create;
R.ID := DM.tblWarden.FieldByName("ID").Value;
R.FirstName := DM.tblWarden.FieldByName("FirstName").Value;
R.LastName := DM.tblWarden.FieldByName("LastName").Value;
CheckListBox.Items.AddObject(R.RList[i].FirstName+" "+RList[i].LastName,R);
DM.tblWarden.Next;
end;
end;



 
Yakudza ©   (2002-03-18 17:01) [12]

Понял!

>MBo © (18.03.02 13:09)
Вот эб этом если можно подробней - .... можно хранить в Items.Objects номер элемента массив с приведением tobject(nmasselem)


 
MBo ©   (2002-03-18 17:08) [13]

в последнем постинге просто сами записи-объекты хранятся.

а про приведение:
CheckListBox.Items.AddObject(строка,TObject(номер));

и наоборот
t:=ItemAtPos(Point(X,Y),True);
IF t<>-1 then
n:=Integer(CheckListBox.Items.Objects[t]);
RList[n].Send:=Checked[t];
все-таки я не вижу у тебя необходимости в этом, разве что ListBox
пересортируешь



 
Yakudza ©   (2002-03-18 19:39) [14]

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


 
Yakudza ©   (2002-03-19 16:52) [15]

>MBo © (18.03.02 16:54)
R:=TRecipient.Create;
А как это .... разве так можно, это же не обьект.


 
MBo ©   (2002-03-19 17:05) [16]

так в начале у меня написано - object - для простоты внесения в список Objects


 
Yakudza ©   (2002-03-19 18:01) [17]

Вот здесь ругаеться.
R:=TRecipient.Create;


 
Anatoly Podgoretsky ©   (2002-03-19 20:37) [18]

А такого метода у object нет, это не класс, к тому де его не надо создавать - это статический объект.


 
MBo ©   (2002-03-20 05:37) [19]

рву волоса на груди :(
о чем думал, то и написал.
надо TRecipient = class
...



Страницы: 1 вся ветка

Текущий архив: 2002.04.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
1-247
AlexanderS
2002-03-20 23:31
2002.04.01
Как получить значение переменной окружения TEMP?


7-337
Pagan
2001-12-28 11:52
2002.04.01
Номер сетевой платы


3-55
kaif
2002-03-07 14:19
2002.04.01
можно ли обрезать строку без использования UDF?


1-224
Алена
2002-03-20 10:05
2002.04.01
свойство типа TCollection


3-40
nlo
2002-03-07 06:34
2002.04.01
Grant на столбец