Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/30: Рейтинг темы: голосов - 30, средняя оценка - 4.90
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744

Выбор в MessageDlg (задача на пару секунд)

18.07.2011, 17:33. Показов 6261. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, почему Button1 сдвигается в обоих случаях?


C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int userRosponse = MessageDlg("Сдвинуть клавишу?", mtInformation,
                 TMsgDlgButtons() << mbYes << mbNo, 0);
 
    if (userRosponse == mbNo)
        return;
    else
        Button1->Left+=100;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2011, 17:33
Ответы с готовыми решениями:

Отсчитать пару секунд
Привет. Подскажите, как отсчитать определенный интервал секунд? Например, у меня есть приложение и, скажем, через 30 секунд должно...

Всплывающее окно на пару секунд
Всем добрый день! Подскажите пожалуйста, как можно вызвать всплывающую Panel на 3 секунды, с плавным появлением и плавным исчезновением? ...

Компьютер виснет на пару секунд
Администраторы и другие форумчане, я серьёзно не знаю куда было написать эту проблему, так как не знаю из-за чего такое может быть, сильно...

17
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
18.07.2011, 17:38
Потому что результат возвращается в mr (ModalResult) а не mb (MsgDlgBtn)

C++
1
 if (userRosponse == mrNo)
mr - ModalResult

mrNone 0 None. Used as a default value before the user exits.
mrOk idOK The user exited with OK button.
mrCancel idCancel The user exited with the CANCEL button.
mrAbort idAbort The user exited with the ABORT button.
mrRetry idRetry The user exited with the RETRY button.
mrIgnore idIgnore The user exited with the IGNORE button.
mrYes idYes The user exited with the YES button.
mrNo idNo The user exited with the NO button.
mrAll mrNo + 1 The user exited with the ALL button.

mrNoToAll mrAll + 1 The user exited with the NO TO ALL button.
mrYesToAll mrNoToAll + 1 The user exited with the YES TO ALL button.
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
18.07.2011, 17:40  [ТС]
Спасибо! Наконец-то задача решена..
А вообще это надежный способ? Есть более серьезный метод?
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
18.07.2011, 17:42
Вообще MessageDlg это WinAPI, а значит сама винда вызывает этот диалог при надобности (Заменить при копировании например).
Наверно лучше нет ничего ИМХО
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
18.07.2011, 17:43  [ТС]
А Можно как-нибудь в MessageDlg CheckBox установить?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
18.07.2011, 17:45
Цитата Сообщение от Fuckall666 Посмотреть сообщение
А Можно как-нибудь в MessageDlg CheckBox установить?
Зачем?
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
18.07.2011, 17:47
Всмысле, Зачем? Глупый вопрос. Если человек спрашивает, значит надо!
Ставить хуки перед появлением...наверно...щас попробую у себя...
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
18.07.2011, 17:50
Fuckall666, создаешь MessageDlg и создаешь на ней
C++
1
CheckBox->Parent(MessageDlg)
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
18.07.2011, 17:58
QVO, Глупость сказали, попробуйте сами вначале.

Добавлено через 4 минуты
Что-то типо этого:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
...
 
TIMERPROC SuperHook() //Конечно же это никакой не Hook =)
{
 KillTimer(Application->Handle,12345); //1 раз =)
 HWND hMsg=FindWindow(0,"Information");if(!hMsg)return 0; //Узнаем handle нашего окна с вопросом
 HWND hWndButton = CreateWindowEx(0, "BUTTON", "&Push Me", WS_CHILD, 0, 0,
        80, 25, hMsg, 0, HInstance, 0); //Попробуем что-нибудь на нём создать... 
  if(hWndButton)ShowWindow(hWndButton,SW_SHOW); //если получилось, покажем! 
  else return 0; //нет, жаль =(
 return 0; //...
} //Вот так работает, кнопка создаётся поверх диалога! Успех!!! НАДО ЭКСПЕРЕМИНТИРОВАТЬ!
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 SetTimer(Application->Handle,12345,100,(TIMERPROC)SuperHook); //Сработает сразу после появления
        int userRosponse = MessageDlg("Сдвинуть клавишу?", mtInformation,
                                 TMsgDlgButtons() << mbYes << mbNo, 0);
 
        if (userRosponse == mrNo)
                return;
        else
                Button1->Left+=100;
}
 
...
Меня вопрос заинтересовал...буду пробовать.
Осталось сменить кнопку на CheckBox
И перехватывать его состояние...
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
18.07.2011, 18:15  [ТС]
Matrica, Спасибо за помощь. А в каком билдере работает? Мой XE 5 ошибок выдал в связи с несоответствием типов..
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
18.07.2011, 18:17
В шестёрке (Builder6) всё ОК
2
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
18.07.2011, 18:24  [ТС]
Matrica, Это просто чудеса какие-то............ Я такого еще не видел нигде...............

Как же научиться этому всему? Целыми днями читаю, но ничего подобного не встречал..
1
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
18.07.2011, 18:26
Matrica, умник что ли?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
TModalResult CheckMessageDialog(AnsiString Message, AnsiString Caption,
  AnsiString CheckBoxCaption, bool *Checked,
  TMsgDlgType DlgType, TMsgDlgButtons Buttons)
{
   TForm *Dialog=CreateMessageDialog(Message, DlgType, Buttons);
   if (!Caption.IsEmpty()) Dialog->Caption = Caption;
 
   int LeftEdge=Dialog->ClientWidth;
   int TopEdge =Dialog->ClientHeight;
   if (Dialog->ControlCount>0) {
     for (int i = 1; i < Dialog->ControlCount; i++) {
       TControl *Ctrl=Dialog->Controls[i];
       if (Ctrl->Left < LeftEdge) LeftEdge=Ctrl->Left;
       if (Ctrl->Top  < TopEdge)  TopEdge =Ctrl->Top;
     }
   } else {
     LeftEdge=10;
     TopEdge=10;
   }
 
   TCheckBox * CheckBox = new TCheckBox(Dialog);
   CheckBox->Parent  = Dialog;
   CheckBox->Caption = CheckBoxCaption;
   CheckBox->Checked = *Checked;
   CheckBox->Left    = LeftEdge;
   CheckBox->Top     = Dialog->ClientHeight;
   CheckBox->Width   = Dialog->Canvas->TextWidth(CheckBox->Caption)+30;
 
   Dialog->ClientHeight = Dialog->ClientHeight + CheckBox->Height + TopEdge;
 
   if (CheckBox->Width + LeftEdge*2 > Dialog->ClientWidth)
     Dialog->ClientWidth = CheckBox->Width + LeftEdge*2;
 
   TModalResult Result = Dialog->ShowModal();
   *Checked = CheckBox->Checked;
 
   delete Dialog;
   Dialog=NULL;
   
   return Result;
}
C++
1
2
3
4
5
6
bool checkv=true;  //checkbox  value
TModalResult res= CheckMessageDialog("Are you sure you want to do whatever you were supposed to do?",
                "The caption","Don't show this message again",&checkv,mtConfirmation,
                TMsgDlgButtons() << mbYes << mbNo  << mbIgnore);
 
ShowMessage("Check box " + AnsiString(checkv ? "checked":"not cheked") + "\n dialog result:" + AnsiString(res));
2
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
18.07.2011, 18:40
QVO, ну зачем же так грубо? Я не говорил что мой код верный! Я сразу признал что это Fuckall666, чистая импровизация!!!

QVO, А ваш код грамотен и красив. Большое вам спасибо (просто вы могли привести его сразу).
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
18.07.2011, 18:44  [ТС]
QVO, Это то что нужно.. Спасибо огромное! Я даже весь код практически сразу понял...(А я полный ламер)
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
18.07.2011, 18:44
Matrica, это не мой код. А грубо потому что я подсказал направление, а вы назвали этот путь глупостью.
0
18.07.2011, 18:47

Не по теме:

QVO, извиняюсь, просто я первый раз вижу такой путь, в силу малого опыта. Более не буду.

0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.07.2011, 18:48
Цитата Сообщение от Fuckall666 Посмотреть сообщение
XE 5 ошибок выдал в связи с несоответствием типов..
можно пробовать так
C++
1
2
3
4
5
6
7
8
//...
HWND hWndButton = CreateWindowEx(0, L"BUTTON", L"&Push Me",
                                 WS_CHILD, 0, 0,80, 25,
                                 hMsg, 0, HInstance, 0); //Попробуем что-нибудь на нём создать... 
//...
  int userRosponse = MessageDlg(L"Сдвинуть клавишу?", mtInformation,
                                TMsgDlgButtons() << mbYes << mbNo, 0);
//...
и, в общем случае, принято приводить тексты ошибок и строки, к которым они относятся (именно строки, а не номера строк, которые , как правило не совпадают).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2011, 18:48
Помогаю со студенческими работами здесь

Компьютер подвисает на пару секунд
Началось всё с того, что слетел windows (7 ulimate x64). После переустановки комп начал жутко подлагивать, зависать на пару секунд, затем...

Компьютер работает пару секунд и выключается
Разбирал недавно компьютер полностью. Соответсвенно наносил термопасту на процессор. После все подключил. Но компьютер работает секунд 5-7...

Доступная ссылка через пару секунд
Подскажите как сделать чтобы была доступна ссылка через пару секунд ? к примеру через 10 секунд . &lt;#a...

Подвисает на пару секунд ПК в определённый момент
Проблема такая: Когда включен стрим на твиче и играю в heartstone, то во время игры может повиснуть на секунду комп, но после стрим идёт, а...

Гаснет экран (на пару секунд) и зависание!
1) Во время игры (пример: WoW, Takedown, Insurgency - без разнице!) Отключается изображение на 1-2сек. и на пару минут все становится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru