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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2010, 05:25   #1
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию Open/Save Dialog & Mouse Move event

Столкнулся с такой проблемой: открываю диалог, двойным кликом выбираю файл, и всё бы хорошо только вот если под местом клика в этот момент был какой-то компонент, для него вызывается MouseMove. И из-за этого разваливается вообще всё, т.к. то что написано в MouseMove должно выполнятся только после вызова соответствующего MouseDown.(просто в MouseDown создаётся объект, а в MouseUp он уничтожается). У меня там стоит проверка типа if ([ssLeft, ssRight] * Shift <> []) (написанная ещё до того, как я добавил диалоги), но после двойного клика в диалоге не просто вызывается MouseMove, там ещё и ssLeft передаётся в параметре Shift.
Подскажите, если кто знает, как с этим справиться?
megachuhancer вне форума Ответить с цитированием
Старый 22.01.2010, 07:38   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Попробуй так
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog1.Execute;
end;

procedure TForm1.Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  ShowMessage('');
  Button2.OnMouseMove := nil;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Button2.OnMouseMove := Button2MouseMove;
end
Баламут вне форума Ответить с цитированием
Старый 22.01.2010, 08:03   #3
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Нее, кажется не пойдёт. Ведь после:
Код:
Button2.OnMouseMove := nil;
выполнение Button2MouseMove будет продолжаться. И я ещё нашёл новую проблему. После MouseDown'а конечно же, вызывается MouseUp. Но это уже совсем не годится. Но я кажется решил проблему. Решение простое, но я почему-то долго не мог его придумать. А как спросил у кого-то - сразу придумал. В общем, так:
Код:
procedure TfrmMain.FormCreate(Sender: TObject);
...
begin
   InSafeSection := False;
...
end;

procedure TfrmMain.PaintBoxMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   InSafeSection := True;
...
end;

procedure TfrmMain.PaintBoxMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
...
   if (([ssLeft, ssRight] * Shift <> []) ...) and (InSafeSection) then
      ...
...
end;

procedure TfrmMain.PaintBoxMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
...
   InSafeSection := False;
end;
Но всё равно спасибо, конечно

Последний раз редактировалось megachuhancer; 22.01.2010 в 08:06.
megachuhancer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Open&Close в С++ sabov Помощь студентам 8 11.12.2009 23:30
Mouse Move и Live у 20-ти лэйблов Marsel737 Общие вопросы Delphi 9 22.11.2009 14:34
save diolog & webbrawser Анастасия123456789 Помощь студентам 1 19.03.2009 08:27
Иконки New, Open, Save amelie Win Api 2 07.08.2008 17:20
Помогите с макросами на Save As и Open Leanna Microsoft Office Excel 3 04.11.2007 21:14