Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2007, 12:49   #1
~LiS~
Пользователь
 
Регистрация: 10.11.2007
Сообщений: 14
По умолчанию Проблема с ShowMessage

С кнопки SpeedButton запускаеться If. Что то вроде If a=b then a+b esle ShowMessage(' А не равно Б') ; ...Когда идёт выбор второй части(ShowMessage(' А не равно Б')), на Форме вылетает сообщение и нельзя совершать никаких действий пока не нажмёшь кнопку Ок. У меня теперь почему то можно и при повторном нажатии на SpeedButton появляеться аналогичное сообщение! Вопрос:Как сделать что бы было как раньше?
Может быть решение очевидно, но я его не вижу! Поэтому прошу всех кто может... помогите!
~LiS~ вне форума Ответить с цитированием
Старый 11.11.2007, 12:56   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Наверно используешь компоненты сторонних разработчиков, какие-нибудь скины. К примеру в AlphaControls с определенной периодичностью такой глюк появляется.
_Dmitry вне форума Ответить с цитированием
Старый 11.11.2007, 14:03   #3
~LiS~
Пользователь
 
Регистрация: 10.11.2007
Сообщений: 14
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
Наверно используешь компоненты сторонних разработчиков, какие-нибудь скины. К примеру в AlphaControls с определенной периодичностью такой глюк появляется.
Всё сделанно с помощь стандартных компонент.
~LiS~ вне форума Ответить с цитированием
Старый 11.11.2007, 14:06   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Так вы приведите свой обработчик. Или снова вызывать экстрасенса?
mihali4 вне форума Ответить с цитированием
Старый 11.11.2007, 14:07   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

этот вариант возможен если ты используешь функцию dll в которой вызывается сообщение не с помощью showmessage а с помощью api функции. Либо ты используешь не showmessage )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 11.11.2007, 15:52   #6
~LiS~
Пользователь
 
Регистрация: 10.11.2007
Сообщений: 14
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Так вы приведите свой обработчик. Или снова вызывать экстрасенса?
Гм.. Если вы не против я просил бы вас скачать всю программу по адресу http://ifolder.ru/4089420 . В настройках я уверен. на других проектах работает. А этот переделывать с нуля времени у меня уже нет.
Файл - архивный. Отсутствие вирусов 100%!!!
Очень прошу помочь!!!

Последний раз редактировалось ~LiS~; 11.11.2007 в 16:48.
~LiS~ вне форума Ответить с цитированием
Старый 11.11.2007, 18:34   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Скачал. Начал смотреть.
Сразу - бред в файле проекта:
Код:
begin
  Application.Initialize;
  F := TF.Create(Application);
  F.Show;
  F.Update;
  while   f.PB.Position <> f.PB.Max  do
  Application.ProcessMessages ;
  Application.Title := 'Плющев А.А.';
  Application.CreateForm(TFormOsn, FormOsn);
  F.Hide;
  F.Free;
  Application.CreateForm(TFormOsn, FormOsn);
  Application.Run;
end.
Дальше - ShowMessage закомментированы, вместо них вставлены MessageDlg... И что? Если вы хотели бы, чтобы диалоги отрабатывали так же, как простой показ сообщений, то... увы!
Я бы вам посоветовал связку таймер+панель, там ничего нажимать не придется.
Буду смотреть дальше...

Так. Криминала не нашел.
Дело вкуса, конечно, но конструкцию типа
Код:
Var
  i, ButtonSelected: Integer;

begin
 If MDIChildCount <> 0 Then
  ButtonSelected := MessageDlg('Вы действительно хотите удалить все MDI окна?',
      mtConfirmation, mbYesNo, 0)
    Else
   ShowMessage('Не открыто ни одного окна!');
  If ButtonSelected = 4 Then
    exit
  Else
  For i := 0 to MDIChildCount-1 Do
    MDIChildren[i].Close;
end;
я бы оформил по-другому:
Код:
var i: integer;
begin
 if MDIChildCount=0 then
begin
ShowMessage('Не открыто ни одного окна!');
exit;
end;
if MessageDlg('Вы действительно хотите удалить все MDI окна?',
mtConfirmation, mbYesNo, 0)=mbYes then
  For i := 0 to MDIChildCount-1 Do
    MDIChildren[i].Close;
end;

Последний раз редактировалось mihali4; 11.11.2007 в 18:47.
mihali4 вне форума Ответить с цитированием
Старый 11.11.2007, 22:27   #8
~LiS~
Пользователь
 
Регистрация: 10.11.2007
Сообщений: 14
По умолчанию

Да... В файле проекта бред. Спасибо, поправил!
вопрос: в MessageDlg не предусмтренна функция заморозки формы и всех её функций до продтверждения сообщения?(скрин 1).
В нижепредставленной процедуре ShowMessage не заккоментирован но работает не так как надо.(Или я просто что не недопонял?). Вместо одного окна ShowMessage и последующей заморозки формы у меня при нажатии кнопки "Изменить название окон MDI"( при отстствии окон) выводиться сообщение о невозможности их (Не открыто ни одного дочернего окна!') и при повторном нажатии кнопки "Изменить название окон MDI" появляеться ещё одно такое же окно поверх старого!(Скрин 2). Я в недоумении!
Код:
Var
  i, ButtonSelected: Integer;

begin
 If MDIChildCount <> 0 Then
  ButtonSelected := MessageDlg('Вы действительно хотите удалить все MDI окна?',
      mtConfirmation, mbYesNo, 0)
    Else
   ShowMessage('Не открыто ни одного окна!');
  If ButtonSelected = 4 Then
    exit
  Else
  For i := 0 to MDIChildCount-1 Do
    MDIChildren[i].Close;
end;
Скрин 1.
1.jpg

Скрин 2.
2.jpg

3. Ваше оформление конструкции признаю более грамотным!!!
Прошу не обращать внимание на возможно неграмотное объяснение проблемы.

Последний раз редактировалось ~LiS~; 11.11.2007 в 23:05.
~LiS~ вне форума Ответить с цитированием
Старый 12.11.2007, 12:59   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Значит я все- таки угадал ))
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 12.11.2007, 13:38   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
при повторном нажатии кнопки "Изменить название окон MDI" появляеться ещё одно такое же окно поверх старого
Проблему можно решить двояко:
1-й вариант - перевести свойство кнопки Enabled в False первой строчкой в обработчике кнопки, а последней строчкой восстанавливать Enabled в True.
2-й вариант, мой любимый. Добавляем таймер, допустим, на полторы секунды. Для вывода сообщений используем плавающую панель. Плавающая потому, что мы при выводе любого сообщения можем задать ей: координаты, размер, параметры шрифта, цвет самой панели...
Согласитесь, сообщение об успешном завершении операции резонно выдать в виде зеленого прямоугольника с желтым текстом, а при неудаче - красный прямоугольник.
То есть измененный в соответствии с этим предложенный мной ранее вариант будет выглядеть так:
Код:
var i: integer;
begin
 if MDIChildCount=0 then
begin
PanelShow.Color:=clRed;
PanelShow.Font.Color:=clYellow;
PanelShow.Caption:=('Не открыто ни одного окна!');
PanelShow.Visible:=True;
TimerShow.Enabled:=PanelShow.Visible;
exit;
end;
if MessageDlg('Вы действительно хотите удалить все MDI окна?',
mtConfirmation, mbYesNo, 0)=mbYes then
  For i := 0 to MDIChildCount-1 Do
    MDIChildren[i].Close;
PanelShow.Color:=clGreen;
PanelShow.Font.Color:=clYellow;
PanelShow.Caption:=('Окна успешно удалены');
PanelShow.Visible:=True;
TimerShow.Enabled:=PanelShow.Visible;
end;

//в обработчике таймера:
TimerShow.Enabled:=False;
PanelShow.Visible:=TimerShow.Enabled;
При этом никаких ненужных и лишних телодвижений делать не придется. Сообщение отработает и само уберется.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ShowMessage DM_bite Помощь студентам 14 12.09.2008 01:02
Одновременно делать 2 действия(showmessage и ShellEzecute) Ozerich Общие вопросы Delphi 2 29.08.2008 08:16
Как в Showmessage Михаил Юрьевич Общие вопросы Delphi 2 03.07.2008 06:00
Изменение параметров ListView через ShowMessage Romanbl4 Компоненты Delphi 5 29.06.2007 15:46
странная ошибка с ShowMessage UMmi Общие вопросы Delphi 3 22.11.2006 06:20