Magistr(ru) |
Отправлено: 15.07.2003, 03:54 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 20
|
Этот код при нажатии на Button2 ищет(от курсора вниз) первое подходящее значение в Table1Name. При Button3: Table1->Next() и дальше тоже самое.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//чтобы не мельтешило
Table1->DisableControls();
//запоминаем текущую запись
TBookmark Bookmark = Table1->GetBookmark();
try
{
//проверяем , что искомый код модифицирован
//и допустим, что Modified — признак модификации
if (Table1->Modified)
Table1->First();
while(!Table1->Eof)
{
if(Table1Name->AsString==Edit1->Text)
{
Table1Name->FocusControl();
return;
}
Table1->Next();
}
ShowMessage("Указанное слово больше не найдено");
//Вернем как было
Table1->GotoBookmark(Bookmark);
}
__finally
{
Table1->FreeBookmark(Bookmark);
Table1->EnableControls();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Table1->Next();
Table1->DisableControls();
//запоминаем текущую запись
TBookmark Bookmark = Table1->GetBookmark();
try
{
//проверяем , что искомый код модифицирован
//и допустим, что Modified — признак модификации
if (Table1->Modified)
Table1->First();
while(!Table1->Eof)
{
if(Table1Name->AsString==Edit1->Text)
{
Table1Name->FocusControl();
return;
}
Table1->Next();
}
ShowMessage("Указанное слово больше не найдено");
//Вернем как было
Table1->GotoBookmark(Bookmark);
Table1->First();
}
__finally
{
Table1->FreeBookmark(Bookmark);
Table1->EnableControls();
}
}
При этом задействовано две кнопки. Как зделать так, чтобы можно было использовать только одну кнопку?
|
|
Георгий |
Отправлено: 15.07.2003, 19:29 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
при использовании только одной кнопки алгоритм будет такой:
жмём на эту кнопку и входим в режим поиска
последующии нажатия находят следующую запись
как больше записей нет — переходим в состояние готовности поиска
как это делается — это будет классический конечный автомат (кстати — я удивлён почему по сих пор никто не ответил на этот простой вопрос)
CODE | обработчик нажатия нашей новой кнопки:
static int CurrentState=0;//пусть ноль будет обозначать нулевое состояние
switch (CurrentState)
case 0:
this->Button2->Click();
CurrentState=(Удалось найти)?(1):(0);
break;
case 1:
this->Button3->Click();
CurrentState=(Удалось найти)?(1):(0);
break;
default:
CurrentState=0;//защита от вспышек на солнце
break; | Ну как тебе эта идея? |
|
Bond |
Отправлено: 16.07.2003, 15:50 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 142
|
при редактировании строки поиска — состояние поиска первого елемента, а при нажатии кнопки или нажатию клавиши ВВОД в строке поиска — состояние поиска следующего:
CODE |
//------------------------------
int FindState; //текущее состояние поиска
enum {fsFirst, fsNext};
//------------------------------
//FindEdit->OnChange
...
FindState = fsFirst;
...
//------------------------------
//FindEdit->OnPressKey
...
FindHandler();
...
//------------------------------
//FindButton->OnClick
...
FindHandler();
...
//------------------------------
//FindHandler
...
switch (FindState)
{
case fsFindFirst:
FindState = fsNext;
... //формируем строку поиска и делаем поиск первого
break;
case fsFindNext:
... //делаем поиск следующего
break;
default:
FindState = fsNext;
}
//------------------------------
|
можешь при смене состояния поиска побаловаться с FindButton->Caption
|
|
Guest |
Отправлено: 24.07.2003, 21:46 |
|
Не зарегистрирован
|
QUOTE (Георгий @ 15/07/2003, 20:31) | при использовании только одной кнопки алгоритм будет такой:
жмём на эту кнопку и входим в режим поиска
последующии нажатия находят следующую запись
как больше записей нет — переходим в состояние готовности поиска
как это делается — это будет классический конечный автомат (кстати — я удивлён почему по сих пор никто не ответил на этот простой вопрос)
CODE | обработчик нажатия нашей новой кнопки:
static int CurrentState=0;//пусть ноль будет обозначать нулевое состояние
switch (CurrentState)
case 0:
this->Button2->Click();
CurrentState=(Удалось найти)?(1):(0);
break;
case 1:
this->Button3->Click();
CurrentState=(Удалось найти)?(1):(0);
break;
default:
CurrentState=0;//защита от вспышек на солнце
break; | Ну как тебе эта идея? |
что-то не получается... |
|
Георгий |
Отправлено: 24.07.2003, 23:24 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
а что именно не получается?
если речь идёт о том, что я как код написал — то нет ничего удивительного — в виде кода я только идею обрисовал и this->Button2->Click() не надо понимать буквально |
|