Форум: "Основная";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c