А можно как-то перевести эту программу в режим "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 должен иметь фокус ввода клавиатуры). Ну а потом, убираем фокус, чтобы не оставлять ненужных последствий своей деятельности в окне...