Форум: "Начинающим";
Текущий архив: 2011.07.24;
Скачать: [xml.tar.bz2];
ВнизМного вопросов по StringGrid Найти похожие ветки
← →
Лариса (2011-04-20 20:25) [0]Помогите, люди добрые!
Пишу программку, основным компонентом которой является StringGrid. Возникли проблемки, к которым не знаю, как подступиться.
Итак:
1) возможно ли сделать так, чтобы часть ячеек стринггрида были разрешены для редактирования пользователем, а часть - недоступны. Например, в первом столбце можем редактировать данные, а во втором - не можем
2) в ячейки вводятся цифры от 1 до 11 (чтобы было понятнее - программа составляет расписание уроков в школе). То есть, вводим номера классов. В зависимости от того, какую цифру ввели - производим определенные действия. Я использую OnSetEditText для обработки события ввода. Но проблема в следующем: если вводятся цифры от 1 до 9 - все нормально. если пытаюсь ввести 10 или 11 - то программа воспринимает только первую введенную единицу. Как сделать так, чтобы программа обрабатывала ввод двухзначного числа?
3) опять все тот же обработчик OnSetEditText. Если хочу стереть введенную до этого цифру, то могу это сделать только пробелом. Если пытаюсь нажать backspact или delete - программа вылетает по ошибке
4) ну, и на закуску. Нужно раскрашивать произвольные ячейки. по onDrawCell ведь раскрашивается та ячейка, в которую ткнули курсором. А мне надо, чтобы закрашивалась ячейка с номером строки и столбца, которые я задам программно.
Научите блондинку уму-разуму и благодарность моя не будет знать границ
← →
Dimka Maslov © (2011-04-20 20:45) [1]Вот тут как раз и обсуждают ЭТО
http://delphimaster.net/view/15-1303194418/
← →
Лариса (2011-04-20 20:59) [2]
> Вот тут как раз и обсуждают ЭТО
>
> http://delphimaster.net/view/15-1303194418/
это точно правильная ссылка? я по ней попадаю на обсуждение пиара сайтов
← →
sniknik © (2011-04-20 21:09) [3]> это точно правильная ссылка?
за цитирую для тебя свой пост, оттуда... дабы без сомнений
sniknik © (19.04.11 10:37) [3]
> Интересно, дальше больше будет?
хуже, намного хуже. заметил что на форумах спрашивают? ведь ищут то не "правила сложения" например, а конкретно свой случай, т.е. "статью как складывать пять плюс три, ну в крайнем случае плюс четыре еще"...
а спрос как известно рождает предложение.
← →
Amoeba_ (2011-04-20 21:14) [4]
> возможно ли сделать так, чтобы часть ячеек стринггрида были
> разрешены для редактирования пользователем, а часть - недоступны.
>
Да!
Используем компонент TApplicationEvents и создаем ему обработчик события onIdle.procedure TForm1.appEventIdle(Sender: TObject; var Done: Boolean);
begin
with StringGrid do
if Col = 1 then
Options := Options - [goEditing]
else
Options := Options + [goEditing];
end;
← →
Amoeba_ (2011-04-20 21:18) [5]
> Нужно раскрашивать произвольные ячейки. ... мне надо, чтобы закрашивалась ячейка с номером строки и столбца, которые я задам программно.
http://stringgrid-delphi.ru/ondrawcell.php
Читать до полного просветления
← →
Dimka Maslov © (2011-04-20 21:20) [6]
> это точно правильная ссылка? я по ней попадаю на обсуждение
> пиара сайтов
Они как раз там пиарят сайт про стринг-грид... В самом первом посте. Правда прямой ссылки как таковой там нет http://stringgrid-delphi.ru
← →
Dimka Maslov © (2011-04-20 21:23) [7]
> Используем компонент TApplicationEvents и создаем ему обработчик
> события onIdle.
лучше сделать то же самое в обработчике события OnSelectCell самого стринггрида.
← →
sniknik © (2011-04-20 21:33) [8]за цитирую пожалуй еще пару постов из другой ветки...
sniknik © (18.04.11 19:35) [4]
> При желании на его основе можно сделать очень хорошую таблицу.
не не нужно, лучше вообще с ним не связываться, плохая идеология не подходящая для работы с более менее большими объемами данных. (а они очень быстро становятся большими, там где этого совсем не ждешь...)
Ega23 © (18.04.11 19:49) [5]
TDBGridEh + TClientDataSet
хотя насчет именно TClientDataSet не согласен, мне милее TADODataSet, а TDBGridEh не использую т.к. не стандартный, предлагать же TDBGrid "начинающему но с претензиями"... ;( не...,
но как идея это гораздо лучше "допиливания" стринггрида (если пилить то "благодарный материал").
← →
Лариса (2011-04-20 21:34) [9]
> Они как раз там пиарят сайт про стринг-грид... В самом первом
> посте. Правда прямой ссылки как таковой там нет http://stringgrid-
> delphi.ru
я просмотрела этот сайт. не нашла там то, что мне нужно
← →
Dimka Maslov © (2011-04-20 21:44) [10]Начнём с того, что не надо использовать OnSetEditText, он нужен тогда и только тогда, когда содержимое ячейки и редактируемый текст суть две большие разности. Надо просто оставить в покое процесс редактирования ячейки.
Ежели требуется ограничить ввод только цифрами -- для этих целей подойдут OnGetEditMask (устанавливаем value в 00) и OnKeyPress
← →
Amoeba_ (2011-04-21 00:09) [11]
> я просмотрела этот сайт. не нашла там то, что мне нужно
А это что? Чукча не читатель?
Нужно было лишь немного осмыслить приведенный пример (см. ниже) и творчески переработать его под свою задачу:
> В качастве простого примера рассмотрим закрашивание одной
> ячейки с индексами (1, 1):
>
> procedure TForm1.StringGrid1DrawCell(Sender: TObject;
> ACol, ARow: Integer; Rect: TRect;
> State: TGridDrawState);
> begin
> StringGrid1.Canvas.Brush.Color:=clRed;
> if ((ACol=1)and(ARow=1)) then
> StringGrid1.Canvas.FillRect(Rect);
> end;
>
> Нужно иметь в виду, что при закрашивании ячейки её текстовое
> содержимое тоже будет закрашено, поэтому если его нужно
> сохранить, то текст тоже нужно отрисовать дополнительно.
> Содержимое обработчика события OnDrawCell в этом случае
> будет выглядеть так:
>
> with StringGrid, StringGrid1.Canvas do
> if ((ACol=1)and(ARow=1)) then
> begin
> FillRect(Rect);
> TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
> end;
Что еще нехватает?
← →
Германн © (2011-04-21 01:30) [12]
> Dimka Maslov © (20.04.11 21:44) [10]
>
> Начнём с того, что не надо использовать OnSetEditText
Автор Лариса, он же bmed (решайте сами он это или она) сначала задаёт свои вопросы на исходниках, а потом дублирует их тут. А на исходниках во время его первого вопроса как раз обсуждали вопрос по событию OnSetEditText именно в таком ключе.
← →
И. Павел © (2011-04-21 08:16) [13]
> 4) ну, и на закуску. Нужно раскрашивать произвольные ячейки.
> по onDrawCell ведь раскрашивается та ячейка, в которую
> ткнули курсором. А мне надо, чтобы закрашивалась ячейка
> с номером строки и столбца, которые я задам программно.
Когда нужно раскрасить ячейку, просто вызовите StringGrid.Refresh (это приведет к тому, что будет вызван OnDrawCell для всех видимых ячеек), а в OnDrawCell смотрите - если сейчас обрабатывается нужная вам ячейка - раскрашивайте ее. Другого способа в StringGrid, кажется, нет.
> 3) опять все тот же обработчик OnSetEditText. Если хочу
> стереть введенную до этого цифру, то могу это сделать только
> пробелом. Если пытаюсь нажать backspact или delete - программа
> вылетает по ошибке
Приведите текст ошибки (и, желательно, класс ошибки) и код обработчика OnSetEditText.
← →
И. Павел © (2011-04-21 08:22) [14]
> Автор Лариса, он же bmed (решайте сами он это или она)
Автор - она. Гугл подтверждает :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.07.24;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c