Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1302498254
pavlodar
2011-04-11 09:04
2011.07.24
swf 2 exe со своим флеш плеером


2-1303058118
prodex
2011-04-17 20:35
2011.07.24
Ошибка при вызове CreateBlobStream


8-1214048535
Al
2008-06-21 15:42
2011.07.24
Как сделать в функции динамическую переменную?


11-1230465048
p.s.
2008-12-28 14:50
2011.07.24
Нестандартная форма (Форма окна по bmp)


15-1302086638
Jan
2011-04-06 14:43
2011.07.24
реально ли в рантайме поменять classname формы или я делаю не так





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский