Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-103
deleon
2002-03-21 12:29
2002.04.01
Как в Design-Time перебрать по циклу все формы проекта?


3-51
pm
2002-03-07 14:26
2002.04.01
Скопировать строку в таблицу


4-354
Romul
2002-01-31 10:44
2002.04.01
Save OpenDialog через API


3-25
xcb
2002-03-05 18:30
2002.04.01
HyTech


4-349
chernoruk
2002-01-30 22:29
2002.04.01
Handle баттона





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский