Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2011, 12:28   #1
Diablero
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 42
По умолчанию Автозаполнение ячейка StringGrid по окончании её редактирования

Приветствую! У меня возникла задача обеспечить следующее поведение таблицы TStringGrid: после окончания редактирования ячейки, если в последней текст равен пустой строке, в ячейку должен подставляться символ '0'. Специального события, которое срабатывает в интересующий меня момент я не нашёл, а погуглив, понял, что его у грида нет в принципе. Может быть кто-нибудь сталкивался с подобной задачей и реализовывал её окольными путями? И какое событие срабатывает у грида, если он теряет фокус ввода?
Diablero вне форума Ответить с цитированием
Старый 08.02.2011, 12:51   #2
kotopezzz
Пользователь
 
Регистрация: 04.02.2011
Сообщений: 18
По умолчанию

По поводу присваивания ячейки '0':

if stringgrid1.cells[i,j]='' then
stringgrid1.cells[i,j]:='0';
попробуй.
kotopezzz вне форума Ответить с цитированием
Старый 08.02.2011, 12:56   #3
Diablero
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 42
По умолчанию

Так это понятно! Нужно, чтобы нули подставлялись на автомате как только ячейка фокус ввода теряет
Diablero вне форума Ответить с цитированием
Старый 08.02.2011, 13:02   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

onDrawCell разве не то? Ну и примерно следующий код
Код:
  if StringGrid1.Cells[aCol, aRow] = ''
  then StringGrid1.Cells[aCol, aRow] := '0';
Баламут вне форума Ответить с цитированием
Старый 08.02.2011, 13:29   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Diablero, ну или задействовать событие .OnSelectCell
только надо помнить, что событие возникает ПЕРЕД установкой фокуса на ячейку.
поэтому завести где-нибудь глобальные переменные. и туда записывать ACol, ARow - той ячейки, где были перед сменой фокуса.

если сложно понять - могу набросать простенький пример..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.02.2011, 13:44   #6
Diablero
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Баламут Посмотреть сообщение
onDrawCell разве не то? Ну и примерно следующий код
Код:
  if StringGrid1.Cells[aCol, aRow] = ''
  then StringGrid1.Cells[aCol, aRow] := '0';
Вроде работает, спасибо Если не выплывут какие-то побочные эффекты, остановлюсь на этом способе.
Diablero вне форума Ответить с цитированием
Старый 08.02.2011, 13:46   #7
Diablero
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Diablero, ну или задействовать событие .OnSelectCell
только надо помнить, что событие возникает ПЕРЕД установкой фокуса на ячейку.
поэтому завести где-нибудь глобальные переменные. и туда записывать ACol, ARow - той ячейки, где были перед сменой фокуса.

если сложно понять - могу набросать простенький пример..
Если не затруднит... буду благодарен
Diablero вне форума Ответить с цитированием
Старый 08.02.2011, 13:54   #8
Diablero
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 42
По умолчанию

И ещё такой вопрос, связанный с ячейками StringGrid: можно ли сделать программно, чтобы для какой-то из ячеек сработал эффект, который возникает при двойном клике на ней. То есть чтоб текст подсвечивался и был готов для редактирования?
Diablero вне форума Ответить с цитированием
Старый 08.02.2011, 15:21   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
если сложно понять - могу набросать простенький пример..
пример оказался даже проще, чем я ожидал
Код:
на событии OnSelectCell

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if StringGrid1.Cells[ StringGrid1.Col, StringGrid1.Row ] = '' then
     StringGrid1.Cells[ StringGrid1.Col, StringGrid1.Row ] := '0';
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.02.2011, 15:29   #10
Diablero
Пользователь
 
Регистрация: 31.01.2011
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
пример оказался даже проще, чем я ожидал
Код:
на событии OnSelectCell

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if StringGrid1.Cells[ StringGrid1.Col, StringGrid1.Row ] = '' then
     StringGrid1.Cells[ StringGrid1.Col, StringGrid1.Row ] := '0';
end;
Спасибо!
То есть, как я понял, в ACel и ARow хранится положение не ячейки, для которой срабатывает событие OnSelectCell, а той ячейки, которая была выбрана до этого?
Diablero вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ячейка с накоплением Ольга Ларина Microsoft Office Excel 10 27.10.2018 03:04
StringGrid ячейка как активная ссылка Aleksandr69 Общие вопросы Delphi 4 31.05.2011 14:39
Двойной сигнал при окончании работы .bat программы Эллире Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 01.11.2010 12:47
Ячейка с текстом, ячейка без текста. segail Microsoft Office Excel 5 16.09.2009 21:55
Как вывести сообщение когда в столбце уже заполнена последняя ячейка StringGrid ARXangel Общие вопросы Delphi 5 18.03.2009 08:24