![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;