![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать количество PixelsPerInch? [D7]
46_55_41_44 © (2004-11-12 13:34:00)Как узнать это программно? У меня например разрешение экрана 1280х1024. (В ручную можно узнать нажав на кнопке Advanced - Font size: Small fonts, Large fonts, Other... В моем случае Small fonts - Normal size 96 dpi)...
Как можно узнать это программно?
Заранее спасибо за любую помощь!!!
grom (2004-11-12 19:55:00) [1]private{Private declarations}
procedure WMDISPLAYCHANGE(var Msg: TWMDISPLAYCHANGE);message WM_DISPLAYCHANGE;
procedure TForm1.WMDISPLAYCHANGE(var Msg: TWMDISPLAYCHANGE);//*
begin
Caption :=IntToStr(Msg.Height);
end;
попробуй так
46_55_41_44 (2004-11-12 16:37:00) [2]private
{ Private declarations }
procedure WMSettingChange(var Message: TMessage); message WM_SETTINGCHANGE;
.....
procedure TMainForm.WMSettingChange(var Message: TMessage);
begin
inherited;
showmessage('ok');
end;
.........
Amoeba (2004-11-12 16:13:00) [3]
> 46_55_41_44 © (12.11.04 16:10) [13]
В таком случае "код в студию!"
46_55_41_44 (2004-11-12 16:13:00) [4]Почему???
46_55_41_44 (2004-11-12 16:10:00) [5]>Юрий Зотов © (12.11.04 15:49)
Сделал что было написано в [12]
Вставил туда всего-лишь ShowMessage('OK') чтобы удостовериться, что компилятор срабатывает и прыгает :) в эту процедурку... Но сколько я не меняю параметры экрана ничего не происходит...
Юрий Зотов (2004-11-12 15:49:00) [6]> 46_55_41_44 © (12.11.04 15:18) [10]
type
TForm1 = class(TForm)
...
private
procedure WMSettingChange(var Message: TMessage); message WM_SETTINGCHANGE;
...
end;
procedure TForm1.WMSettingChange(var Message: TMessage);
begin
inherited;
... // Делаем, что нужно.
end;
46_55_41_44 (2004-11-12 15:21:00) [7]И еще...
насколько я понял WM_WININICHANGE = WM_SETTINGCHANGE...
Я нашел такую функцию Application.UpdateFormatSettings...
Но она не делает того, что надо...
46_55_41_44 (2004-11-12 15:18:00) [8]а отслеживать динамику можно в обработчике WM_SETTINGCHANGE
До этой части все так как вы написали...
Можно пример WM_SETTINGCHANGE... честно говоря у меня проблемы с Message... не пользовался... небольшой примерчик... дальше сам сделаю!
Юрий Зотов (2004-11-12 15:14:00) [9]> 46_55_41_44 © (12.11.04 15:06) [8]
> MyForm.PixelsPerInch := Screen.PixelsPerInch;
Не нужно этого. Тем самым Вы как раз мешаете формы автомасштабироваться.
> А указывать всем компонентам формы width и height волокита,
> что если этих компенент сотни.
Существуют Align, Anchors, Constraints и TPanel. Нужно добиться того, чтобы при ручном ресайзе формы в design-time она всегда имела нормальный вид. После этого останется только привязать ее размеры к размеру экрана (в OnCreate), а отслеживать динамику можно в обработчике WM_SETTINGCHANGE.
46_55_41_44 (2004-11-12 15:06:00) [10]MyForm.PixelsPerInch := Screen.PixelsPerInch;
вот это я прописал... Хотя не знаю на сколько правильно и будет ли работать..
Да кстати...
> Юрий Зотов © (12.11.04 14:18) [5]
Я ничего не трогал, но все же -
Если поменять разрешение ничего автоматически не меняется... и не должно помоему... А указывать всем компонентам формы width и height волокита, что если этих компенент сотни. Можно-ли автоматизировать этот процесс...
Я щас посмотрю, что можно сделать с помощью
WM_SETTINGCHANGE. А вы советуйте пожалуйста... что можно сделать...
Еще раз спасибо за сотрудничество! :)
Юрий Зотов (2004-11-12 14:52:00) [11]> 46_55_41_44 © (12.11.04 14:43) [6]
Есть событие OnCreate. Что мешает задавать в нем размеры формы, ориентируясь на установки экрана?
46_55_41_44 (2004-11-12 14:43:00) [12]>Юрий Зотов © (12.11.04 14:18) [5]
Проблема вообще-то в том, если например перенести программку на комп с меньшим dpi формы занимающие не очень много места - занимают половину экрана - можно-ли этого как-то избежать?
Юрий Зотов (2004-11-12 14:18:00) [13]Вообще-то, если Вы ничего не трогали, то форма и так должна масштабироваться сама. Но можно и обрабатывать WM_SETTINGCHANGE.
uny (2004-11-12 14:13:00) [14]if screen.width=1024 then form1.width:=сколько надо
46_55_41_44 (2004-11-12 14:09:00) [15]То есть, чтобы скажем если поменять разрешение с 1280х1024 на 1024х768, чтобы размеры формы поменялись автоматически?
46_55_41_44 (2004-11-12 14:04:00) [16]Спасибо...
Можно ли сделать, чтобы при изменении разрешения экрана размер форм масштабировался автоматически?
Юрий Зотов (2004-11-12 13:43:00) [17]Screen.PixelsPerInch
GetDeviceCaps