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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2015, 16:07   #1
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
Вопрос Как заставить мышь реагировать на настройку "На кнопке, выбираемой по умолчанию"

Установил в системе в настройках мыши флаг: "На кнопке, выбираемой по умолчанию"
Безымянный.jpg
Но в моих прогах на делфи это не работает. Пробовал:
- Show
- ShowModal
- тоже для разных BorderStyle
- MessageDlg
- ShowMessage (ну понятно что зря, но мало-ли)
...

Короче, никак.
А вот с MessageBox всё работает (еще бы). Но мне МАЛА меседжбокса. Хочу MessageDlgPosHelp и в своих окнах.

Вопрос: Как заставить работать позиционирование мыши в диалоговых окнах, если оно включино?
Sibedir вне форума Ответить с цитированием
Старый 29.12.2015, 17:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ИМХО на VCLных диалогах Делфи это не сработает в принципе...
Другое дело, если ты сделаешь свою форму, на нее поместишь кнопку и задашь ее как кнопку по умолчанию. Может и сработает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.12.2015, 17:42   #3
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Работать будет, я так понял, если на API.
Я могу ручками, но как узнать, что флаг в системы установлен?
Sibedir вне форума Ответить с цитированием
Старый 29.12.2015, 17:44   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Я тоже так думаю, что Microsoft не заботился и не собирается о VCL. Есть у мелкософта родное диалоговое окно MessageBox, вот на него и работает эта настройка Windows.

Цитата:
Сообщение от Sibedir Посмотреть сообщение
но как узнать, что флаг в системы установлен?
RegMon, не?

Последний раз редактировалось Stilet; 29.12.2015 в 19:45.
FaTaL вне форума Ответить с цитированием
Старый 29.12.2015, 18:05   #5
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
RegMon, не?
и как это поможет? я профан в этом деле, но тема интересна.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 29.12.2015, 18:20   #6
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,776
По умолчанию

У нужных кнопок свойство Default = True стоит?
Vapaamies вне форума Ответить с цитированием
Старый 29.12.2015, 20:27   #7
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Да. Одна нопка всегда дефаулт. Но тут дело не только в кнопке. Видимо в api есть специальный механизм вызова диалогов. Буду енто делать сам.
Sibedir вне форума Ответить с цитированием
Старый 29.12.2015, 20:42   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от Dvoishnik Посмотреть сообщение
и как это поможет? я профан в этом деле, но тема интересна.
Проверить какой ключ отвечает за эту опцию. И если она храниться в реестре, то сойдёт для проверки.
FaTaL вне форума Ответить с цитированием
Старый 30.12.2015, 00:34   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Хочу MessageDlgPosHelp
А вот тут странно.
Сия функция не от Дельфи, а от Винды. Почему в ней не работает тот флажок непонятно.
northener вне форума Ответить с цитированием
Старый 30.12.2015, 05:57   #10
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

MessageDlgPosHelp - это обёртка над CreateMessageDialog. Это к Винде не относится.

Код:
type
  TForm1 = class(TForm)
    //...
    procedure FormCreate(Sender: TObject);
  private
    procedure OnActiveFormChange(Sender: TObject);
  end;

implementation

//...

function SnapToDefaultButton: Boolean;
var
  Snap: BOOL;
begin
  Result := SystemParametersInfo(SPI_GETSNAPTODEFBUTTON, 0, @Snap, 0) and Snap;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.OnActiveFormChange := OnActiveFormChange;
end;

procedure TForm1.OnActiveFormChange(Sender: TObject);
var
  Form: TCustomForm;
  Pt: TPoint;
begin
  Form := Screen.ActiveCustomForm;
  if (Form <> nil) and (Form.ActiveControl <> nil) then
    if SnapToDefaultButton and (Form.ActiveControl is TButton) then
    begin
      Pt := Form.ActiveControl.ClientOrigin;
      Inc(Pt.X, Form.ActiveControl.ClientWidth div 2);
      Inc(Pt.Y, Form.ActiveControl.ClientHeight div 2);
      Mouse.CursorPos := Pt;
    end;
end;
?

Последний раз редактировалось Filka; 30.12.2015 в 07:07.
Filka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить MS VS E "Петь" на Русском? Xe[N]o Visual C++ 9 27.11.2010 10:08
Продолжения темы про настройку апача для "локального" ииспользования vedro-compota PHP 23 24.07.2010 10:21
настроить при открытии Excel 2003 в окошке "Тип файлов" вывод пункта "Все файлы (*.*)" по умолчанию? Unior Microsoft Office Excel 2 01.03.2009 02:42
Как добавить "значение по умолчанию" в базе Access? bafy БД в Delphi 6 13.02.2009 12:29
Как прописать в ключ "(По умолчанию)" UnD)eaD)Snake Общие вопросы Delphi 4 16.08.2007 12:00