Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

StringGrid [D6, Win95/98]


Ven ©   (2002-09-25 11:57:00) 

Привет мастера. Как проверить все Cells в StringGrid и позмолить их редактирование преама в StringGrid. Если написать:

for(y=0; y <LIN ;y++)
for(x=0; x < COLON ;x++)
if(StringGrid1->Cells[x][y].IsEmpty())
{
StringGrid1->Col=x;
StringGrid1->Row=y;
StringGrid1->EditorMode=true;
FocusControl(StringGrid1);
}


то остановится только на последнем исправление, Подскажите как сделати чтоб исправить их по порятку.


troits   (2002-09-25 17:26:00) [1]

>Ven (25.09.02 17:12)
Еще надо отслеживать переход на другую ячейку мышью, утрату компонентом фокуса ....


Ven   (2002-09-25 17:12:00) [2]

Спосибо всем за советы но сделал я так :

void TForm1::SearchBadInGrid(int x, int y)
{
for( ; (y < LIN )?(!StringGrid1->Cells[x][y].IsEmpty()):false ; y++)
{
for(; (x < COLON)?(!StringGrid1->Cells[x][y].IsEmpty()):false; x++);

if(x==LIN )
x=0;
else
break;
}

if(y < LIN)
CorectedGrid(x,y);
}

void TForm1::CorectedGrid(const int x,const int y)
{
StringGrid1->Col=x;
StringGrid1->Row=y;
StringGrid1->EditorMode=true;
FocusControl(StringGrid1);
}

void __fastcall TForm1::StringGrid1KeyPress(TObject *Sender, char &Key)
{
if(Key == "\n" || Key == "\r" || Key == "\t")
{ SearchBadInGrid(StringGrid1->Col, StringGrid1->Row); return;}
}
//--------------------------------------------

если у кого есть другие идеи напишите vladr@basa.md


Ven   (2002-09-25 16:08:00) [3]

onExit срабатывыает при выходе из StringGrid
но не после редактирования Cells.


NP-237   (2002-09-25 13:47:00) [4]

Вешай проверку на onExit StringGrid
и не позволяй выходить пока все не заполнено
При запуске выполняй onExit принудительно.


Ven   (2002-09-25 13:40:00) [5]

А без таймер (только как временое решение) знает кто.


troits   (2002-09-25 13:19:00) [6]

Действительно не работает.
Есть вариант: кладем на форму таймер и на событие OnTimer

procedure TForm1.Timer1Timer(Sender: TObject);
const
BoolStr : array [Boolean] of string = ("False", "True");
begin
if not StringGrid1.EditorMode then FindEmpty;
end;

procedure TForm1.FindEmpty;
var
X, Y: Integer;
begin
for Y := 0 to StringGrid1.RowCount - 1 do
for X := 0 to StringGrid1.ColCount - 1 do
if StringGrid1.Cells[X, Y] = "" then
begin
StringGrid1.Col := X;
StringGrid1.Row := Y;
StringGrid1.EditorMode := True;
FocusControl(StringGrid1);
break;
end;
end;


MBo   (2002-09-25 12:42:00) [7]

troits © (25.09.02 12:29)
не устраивает?


Ven   (2002-09-25 12:36:00) [8]

Можна и так но хателась преама в StringGrid.


gek   (2002-09-25 12:32:00) [9]

может так

for(y=0; y <LIN ;y++)
for(x=0; x < COLON ;x++)
if(StringGrid1->Cells[x][y].IsEmpty())
{
StringGrid1->EditorMode=true;
FocusControl(StringGrid1);
if InputQuery("enter data","enter data",s) {
Cells[x][y]=s;
}
continue;
}


Ven   (2002-09-25 12:32:00) [10]

Тогда зациклица


troits   (2002-09-25 12:29:00) [11]

Может, на OnSetEditText запускать опять цикл?


Ven   (2002-09-25 12:28:00) [12]

Тогда будет только первая.


troits   (2002-09-25 12:25:00) [13]

:) 5 баллов.


Ven   (2002-09-25 12:24:00) [14]

Тогда будет только первая


MBo   (2002-09-25 12:21:00) [15]

Вставь break после focuscontrol


Ven   (2002-09-25 12:19:00) [16]

Нужно проверите все Cells и исправить пустые. Код нписаныи выше останавливается на последнем исправление, а нижно чтобы он позволял исправить все пустые Cells.


MBo   (2002-09-25 12:07:00) [17]

Я не понял, что ты хочешь сделать.
Для разрешения редактирования надо в Options goEditing поставить True. Для программной записи Cells[x,y]:=somestring;


Наверх

Титульная страница Поиск, карта сайта Написать письмо