घर
Top.Mail.Ru Yandeks.Metrika
मंच: "मुख्य";
वर्तमान संग्रह: 2002.04.01;
डाउनलोड करें: [xml.tar.bz2];

नीचे

अंतर्निहित चेकबॉक्स TStringGrid के साथ समस्या! इसी तरह की शाखाएँ खोजें


kolobok   (2002-03-21 12:33) [0]

Может, кто мне поможет ? У меня такая проблема:
Хочу, чтобы в компоненте TStringGrid в третьей колонке содержались CheckBox"ы
для того чтобы включить/выключить действие описанное в строке.
Проблема же конкретно заключается в следующем:
// Программно создаю TCheckBox
cbOne:=TCheckBox.Create(StringGrid1);
// объявляю родителя CheckBox"а
cbOne.Parent:=StringGrid1;
// в левом верхнем углу он появился.
// Если теперь начать по нему щёлкать, то от него никакой реакции
// Если объявить родителем Form1 или Button1 - никаких проблем
// Пробовал в обработчике OnClick менять Checked, получил бесконечный цикл
// Видимо программное изменение состояния вызывает событие Click->OnClick и далее...
// Немного изловчился и стал обрабатывать событие OnMouseDown для StringGrid1
// В этом обработчике по координатам мыши вычисляется координата ячейки и
// проверяется условие (та ячейка в которой сидит CheckBox или не та), если она
// тогда:
cbOne.Checked:= not cbOne.Checked;
// Работает только, если попадаешь в ячейку. Попадаешь в CheckBox - никакой реакции.

Можно конечно и так приспособиться, но хочется, чтобы всё работало как надо !
И ещё: нет ли у кого хорошего примерчика как в компонент встроить подобное управление типа кнопок, переключателей, выключателей и т.д.
Буду признателен, если вышлете на мыло kolobok11@hotbox.ru



Song   (2002-03-21 12:49) [1]

Может у него Enabled отрицательно? Или выставить самому принудительно..



kolobok   (2002-03-21 13:04) [2]

С Enabled всё в порядке. Я же говорю, стоит только родителем объявить форму или кнопку и всё работает.

С уважением для Song.



Song   (2002-03-21 13:10) [3]

подожди сам попробую



kolobok   (2002-03-21 13:19) [4]

Попробуй Song. По форуму вижу, что человек ты поднаторевший в этом деле, наверняка помочь сможешь. Заранее спасибо.

kolobok11@hotbox.ru



MBo   (2002-03-21 13:21) [5]

प्रक्रिया TForm1.FormCreate (प्रेषक: TObject);
var cb:TCheckBox;
i: पूर्णांक;
शुरू करना
for i:=1 to SG1.RowCount-1 do begin
cb:=TCheckBox.Create(self);
cb.Parent:=self;
cb.width:=12;
cb.tag:=I;
cb.Caption:="";
cb.color:=SG1.Color;
cb.Visible:=(i in [SG1.TopRow..SG1.TopRow+SG1.VisibleRowCount-1]);
cb.onClick:=CheckBox1Click;
SG1.Cols[3].Objects[i]:=cb;
अंत;
अंत;

प्रक्रिया TForm1.CheckBox1 क्लिक करें (प्रेषक: TObject);
शुरू करना
if TCheckBox(Sender).Checked then
Sg1.Cells[3,TCheckBox(Sender).Tag]:="Ку-Ку"
अन्य
Sg1.Cells[3,TCheckBox(Sender).Tag]:="Тссс...";
अंत;

procedure TForm1.SG1DrawCell(Sender: TObject; ACol, ARow: Integer;
अनुपात: TRect; राज्य: TGridDrawState);
शुरू करना
if (ACol=3) and (ARow>0) then begin
TCheckBox(SG1.Cols[3].Objects[ARow]).top:=SG1.top+Rect.Top+5;
TCheckBox(SG1.Cols[3].Objects[ARow]).left:=SG1.left+Rect.right-12;
अंत;
अंत;

procedure TForm1.SG1TopLeftChanged(Sender: TObject);
var i: पूर्णांक;
शुरू करना
for i:=1 to SG1.RowCount-1 do
TCheckBox(SG1.Cols[3].Objects[i]).Visible:=
(SG1.LeftCol<=3) and (i in [SG1.TopRow..SG1.TopRow+SG1.VisibleRowCount-1]);
अंत;



Song   (2002-03-21 13:26) [6]

Не получается потому, что на TCheckBox не передаётся фокус ввода. TStringGrid - компонент сам составной, ограничение скорей связано с этим. Если только родителся делать на Form1 или на Self (это одно и тоже будет в данном случае). А координаты назначать чекбоксу самому.



Song   (2002-03-21 13:27) [7]

О-о-о, :)) Я гляжу MBo тебя уже выручил. :)) Оперативен, как всегда. :o



kolobok   (2002-03-21 14:26) [8]

Спасибо МВо за решение, но поскольку разобраться в этом в данный момент слёту не могу, прошу в двух словах объяснить неучу что происходит.

С уважением, kolobok.



MBo   (2002-03-21 14:41) [9]

при создании CheckBox родителем ему назначается форма, а поскольку он позже грида появился, рисуется сверху. В других случаях можно делать BringToFront.
созданный CheckBox вносится в список Objects столбца (можно и в отдельный, но этот-то уже существует)(Cols типа TStrings), Tag -номер строки. OnClick - общий.

С рисованием, видимостью и отработкой клика понятно или объяснить?



kolobok   (2002-03-21 14:58) [10]

МВо, лучше объясни кратенько. Я же говорю - Я НЕУЧ!
А ты, я вижу, МАСТАК! Пару дней подумаю и разберусь наверняка, будет мне наука. А про тебя в хелпе проги упомяну - если доделаю.

साभार, kolobok.



MBo   (2002-03-21 15:13) [11]

клик - приводим Sender к типу TCheckBox (в общем случае, если событие может быть вызвано объектом другого типа, надо проверять if Sender is TCheckBox), чтобы использовать свойства Checkbox-a

рисование - если колонка нужная, из координат ячейки (в гриде)находим положение чекбокса. Прибавляем коорд. грида, так как положение чекбокса дается относ. родителя - формы.

видимость - если ячейка видна, то и checkBox.
Для колонки можно сделать, как и для ряда,(с поддиапазоном) если они могут быть широкими и только 2 нефикс. помещаются.

Ты конкретнее спрашивай, что именно неясно.



kolobok   (2002-03-21 15:35) [12]

Спасибо МВо!
Теперь я разобрался, с твоей помощью конечно.
Не знаешь ли существует Delphi 6.0 rus या नहीं?

kolobok.



MBo   (2002-03-21 15:49) [13]

никаких D русских нет. Бывают левые русификации, которые
debug-window Watches переводят как Часики



पन्ने: 1 पूरी शाखा

मंच: "मुख्य";
वर्तमान संग्रह: 2002.04.01;
डाउनलोड करें: [xml.tar.bz2];

ऊपर









मेमोरी: 0.6 एमबी
समय: 0.026 c
3-3
andyfirst
2002-03-05 14:44
2002.04.01
अनुरोध त्रुटि


4-354
Romul
2002-01-31 10:44
2002.04.01
एपीआई के माध्यम से OpenDialog सहेजें


3-22
Dimonka
2002-03-06 10:39
2002.04.01
अनुरोध में त्रुटि!


1-243
पीईसी
2002-03-20 09:44
2002.04.01
पाठ


1-160
यूरी भट
2002-03-22 13:05
2002.04.01
क्लिपबोर्ड





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский