Dmitri |
Отправлено: 19.06.2003, 18:13 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
В DBnavigator (компонент с палитры DataControl) есть кнопка "Удалить запись" (выглядит как минус). Так вот, когда нажимаешь на нее, выскакивает окошко: Confirm: Delete record? OK/Cancel.
КАК русифицировать этот MessageBox? ОЧЕНЬ надо, т.к. пользователи жалуются на английский язык в программе.
|
|
Asher |
Отправлено: 19.06.2003, 19:14 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Если народ ни чего не придумает, то на крайний случай есть вот такая штука OgreGUI
QUOTE |
В общем случае, данная программа предназначена для перевода программ, софта или игрушек на родной язык (локализация). Часто для этой цели используются редакторы ресурсов. Но дело в том, что редакторы ресурсов не позволяют править тексты, находящиеся в теле программы. В результате, во время работы программы, появляются текстовые сообщения на чужеземном языке.
Данная программа и предназначена для того, чтобы править тексты находящиеся в теле программы, а также править и ресурсы. Вообще-то этим текстом может все, что угодно: сообщения, меню, копирайты, пути файлов и реестра, импортируемые и экспортируемые функции, данные ресурсов и т.д.
Но, это не простая замена текста в файле — в программе используются специальные алгоритмы, которые позволяют править тексты, увеличивая их длину. К примеру, надпись "Save" очень легко исправить на "Сохранить в файл...". Обычно этого сделать нельзя т.к. наращивая длину текста, Вы неизбежно затрете текст/данные/код, который следует сразу за этим текстом.
В целом, программа позволяет Вам править строки двух типов: перемещаемые и фиксированные. Перемещаемые строки отличаются от фиксированных тем, что известны ссылки эту такую строку. Т.е. когда Вы подправили строку, ее длина увеличилась, то требуется "переселить" строку в другое место. Если ссылки на строку неизвестны, то "переселить" строку нельзя — программа не узнает об этом. В результате, у фиксированной строки появляется такое ограничение как фиксированная максимальная длина.
|
если надо, могу мыльнуть, так как он даже пополам рубленный чего-то не прицепляется
|
|
Asher |
Отправлено: 19.06.2003, 20:53 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Можно еще глянуть сюда Алексей Агафонов
|
|
Гость_Nick |
Отправлено: 20.06.2003, 13:10 |
|
Не зарегистрирован
|
Можно присвоить
DBNavigator->ConfirmDelete = False;
А в обработчике нажатия кнопки самому спрашивать подтверждение. |
|
Dmitri |
Отправлено: 21.06.2003, 13:37 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
Интересно, где ты видел обработчик кнопки "Delete record"???
|
|
Admin |
Отправлено: 23.06.2003, 08:15 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
По всей видимости имелся ввиду обработчик события BeforeAction
Мы можем поставить в DBNavigator:
DBNavigator->ConfirmDelete = False;
и в обработчике BeforeAction перехватывать это событие
CODE |
void __fastcall TForm1::DBNavigator1BeforeAction(TObject *Sender,
TNavigateBtn Button)
{
if(Button == nbDelete){
if(Application->MessageBox("Удалить запись ?",
"Подтвердите удаление", MB_YESNO)== IDYES){
Table1->Delete();
}
else try{ //
}
catch(...){}
}
}
|
Однако что делать, чтобы запись не удалялась — непонятно,
в любом случае запись будет удалена,
и зачем нужен такой обработчик BeforeAction,
в котором невозможно отказаться от выполнения Action
тоже неясно.
|
|
Гость_Nick |
Отправлено: 23.06.2003, 11:36 |
|
Не зарегистрирован
|
Я извиняюсь.
Я сделал так.
Убрал кнопку с DBNavigator и обрабатывал нажатие
клавишь Ctrl+Del
|
|
Admin |
Отправлено: 23.06.2003, 13:46 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Да это понятно, но хотелось бы не убирая кнопки,
именно нажимая кнопку -, иначе тогда DBNavigator
вообще не нужен.
Конечно явно этому обработчику
BeforeAction не хватает некого флага типа
bool isAction, и если isAction = false, то дальнейшая обработка
не выполняется
Что-то Borland тут явно не додумал.
|
|
Гость_Nick |
Отправлено: 24.06.2003, 09:17 |
|
Не зарегистрирован
|
Посмотрел исходники.
Сообщения определены в VCL\dbConst.pas
Можно наверно руссифицировать и перекомпилировать.
У меня сейчас не так много времени.
|
|
Admin |
Отправлено: 24.06.2003, 16:28 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Нашел частично обходной способ это реализовать.
Для этого в Table1 устанавливаем CachedUpdates в true
и в DBNavigator ConfirmDelete в false.
CODE |
void __fastcall TForm1::DBNavigator1Click(TObject *Sender,
TNavigateBtn Button)
{
if(Button == nbDelete)
{
if(Application->MessageBox("Удалить запись ?",
"Подтвердите удаление", MB_YESNO)== IDYES)
{
Table1->ApplyUpdates();
Table1->CommitUpdates();
}
else Table1->CancelUpdates();
}
}
|
|
|
Admin |
Отправлено: 24.06.2003, 16:40 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Также можно сделать и так:
(CachedUpdates у Table оставить в false, поместите на форму компонент
Database1 и свяжите с Table1, установите TransIsolation в tiDirtyRead)
CODE |
//---------------------------------------------------------------------------
void __fastcall TForm1::DBNavigator1Click(TObject *Sender,
TNavigateBtn Button)
{
if(Button == nbDelete)
{
if(Application->MessageBox("Удалить запись ?",
"Подтвердите удаление", MB_YESNO)== IDYES)
{
Database1->Commit();
}
else {
Database1->Rollback();
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBNavigator1BeforeAction(TObject *Sender,
TNavigateBtn Button)
{
if(Button == nbDelete)
{
Database1->StartTransaction();
}
}
//-----------------------------------------------------
|
|
|
Admin |
Отправлено: 04.08.2003, 09:05 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Что-то я торможу. Все намного проще.
Ставите ConfirmDelete = false
void __fastcall TForm1::DBNavigator1BeforeAction(TObject *Sender,
TNavigateBtn Button)
{
if(Button == nbDelete && Application->MessageBox("Удалить запись ?",
"Подтвердите удаление", MB_YESNO)!= IDYES)
Abort();
}
//---------------------------------------------------------------------------
|
|