Показать сообщение отдельно
  #39  
Старый 29.04.2009, 15:36
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

А можно как-то перевести эту программу в режим "work offline"? А то когда подключен Интернет, она постоянно кушает трафичек. Хоть и немного наверное, но непрерывно... Меня это очень злит, и я вырубаю прогу!! =(
В общем, по поводу Spin'а. Есть возможность достичь нужной реакции не щелкая по кнопкам вверх-вниз, а просто посылая Edit'у, связанному со Spin'ом, сообщение WM_KEYDOWN, поскольку Edit обрабатывает это сообщение должным образом, в отличие от сообщения WM_SETTEXT. Тот факт, что в Edit вводятся дробные числа заставляет немножко по-разному создавать виртуальные коды клавиш для цифр и для точки-разделителя, но это, думаю, пустячок. Только код чуть-чуть загромождается, но главное — работает.
Вот процедурка, заносящая в нужный Edit со Spin-стрелочками новое значение:
Код:
procedure SetNewValue(EditHandle: HWND; NewValue: Real);
var
  NewValueStr: string;
  i: Integer;
  VKeyCode: Integer;
begin
  NewValueStr := FormatFloat('0.00000', NewValue);
  SendMessage(EditHandle, WM_SETFOCUS, 0, 0);
  SendMessage(EditHandle, EM_SETSEL, 0, -1);
  for i := 1 to Length(NewValueStr) do
  begin
    if NewValueStr[i] = DecimalSeparator then VKeyCode := VK_DECIMAL 
    else VKeyCode := Ord(NewValueStr[i]);
    PostMessage(EditHandle, WM_KEYDOWN, VKeyCode, 0);
  end;
  SendMessage(EditHandle, WM_KILLFOCUS, 0, 0);
end;
Поясняю. Процедура получает параметры:
  • EditHandle — дескриптор Edit'а, сопряженного с объектом Up-Down (он так по-правильному, вроде, называется...)
  • NewValue — новое значение, которое вы хотите установить в Edit'е.
Поскольку там вводится пять знаков после запятой, то поэтому и строка, которую я записываю в Edit, формируется с помощью задания формата '0.00000' в функции FormatFloat. Ну а остальное, кажется, не требует особых разъяснений... Фокус в нужный Edit устанавливается затем, что иначе сообщение WM_KEYDOWN не будет обрабатываться должным образом (обязательно Edit должен иметь фокус ввода клавиатуры). Ну а потом, убираем фокус, чтобы не оставлять ненужных последствий своей деятельности в окне...
Ответить с цитированием