Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
ВнизStringGrid Найти похожие ветки
← →
Ven (2002-09-25 11:57) [0]Привет мастера. Как проверить все 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);
}
то остановится только на последнем исправление, Подскажите как сделати чтоб исправить их по порятку.
← →
MBo (2002-09-25 12:07) [1]Я не понял, что ты хочешь сделать.
Для разрешения редактирования надо в Options goEditing поставить True. Для программной записи Cells[x,y]:=somestring;
← →
Ven (2002-09-25 12:19) [2]Нужно проверите все Cells и исправить пустые. Код нписаныи выше останавливается на последнем исправление, а нижно чтобы он позволял исправить все пустые Cells.
← →
MBo (2002-09-25 12:21) [3]Вставь break после focuscontrol
← →
Ven (2002-09-25 12:24) [4]Тогда будет только первая
← →
troits (2002-09-25 12:25) [5]:) 5 баллов.
← →
Ven (2002-09-25 12:28) [6]Тогда будет только первая.
← →
troits (2002-09-25 12:29) [7]Может, на OnSetEditText запускать опять цикл?
← →
Ven (2002-09-25 12:32) [8]Тогда зациклица
← →
gek (2002-09-25 12:32) [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:36) [10]Можна и так но хателась преама в StringGrid.
← →
MBo (2002-09-25 12:42) [11]troits © (25.09.02 12:29)
не устраивает?
← →
troits (2002-09-25 13:19) [12]Действительно не работает.
Есть вариант: кладем на форму таймер и на событие 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;
← →
Ven (2002-09-25 13:40) [13]А без таймер (только как временое решение) знает кто.
← →
NP-237 (2002-09-25 13:47) [14]Вешай проверку на onExit StringGrid
и не позволяй выходить пока все не заполнено
При запуске выполняй onExit принудительно.
← →
Ven (2002-09-25 16:08) [15]onExit срабатывыает при выходе из StringGrid
но не после редактирования Cells.
← →
Ven (2002-09-25 17:12) [16]Спосибо всем за советы но сделал я так :
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
← →
troits (2002-09-25 17:26) [17]>Ven (25.09.02 17:12)
Еще надо отслеживать переход на другую ячейку мышью, утрату компонентом фокуса ....
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c