Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Как узнать количество PixelsPerInch?   Найти похожие ветки 

 
46_55_41_44 ©   (2004-11-12 13:34) [0]

Как узнать это программно? У меня например разрешение экрана 1280х1024. (В ручную можно узнать нажав на кнопке Advanced - Font size: Small fonts, Large fonts, Other...  В моем случае Small fonts - Normal size 96 dpi)...
Как можно узнать это программно?

Заранее спасибо за любую помощь!!!


 
Юрий Зотов ©   (2004-11-12 13:43) [1]

Screen.PixelsPerInch
GetDeviceCaps


 
46_55_41_44 ©   (2004-11-12 14:04) [2]

Спасибо...
Можно ли сделать, чтобы при изменении разрешения экрана размер форм масштабировался автоматически?


 
46_55_41_44 ©   (2004-11-12 14:09) [3]

То есть, чтобы скажем если поменять разрешение с 1280х1024 на 1024х768, чтобы размеры формы поменялись автоматически?


 
uny ©   (2004-11-12 14:13) [4]

if screen.width=1024 then form1.width:=сколько надо


 
Юрий Зотов ©   (2004-11-12 14:18) [5]

Вообще-то, если Вы ничего не трогали, то форма и так должна масштабироваться сама. Но можно и обрабатывать WM_SETTINGCHANGE.


 
46_55_41_44 ©   (2004-11-12 14:43) [6]

>Юрий Зотов ©   (12.11.04 14:18) [5]

Проблема вообще-то в том, если например перенести программку на комп с меньшим dpi формы занимающие не очень много места - занимают половину экрана - можно-ли этого как-то избежать?


 
Юрий Зотов ©   (2004-11-12 14:52) [7]

> 46_55_41_44 © (12.11.04 14:43) [6]

Есть событие OnCreate. Что мешает задавать в нем размеры формы, ориентируясь на установки экрана?


 
46_55_41_44 ©   (2004-11-12 15:06) [8]

MyForm.PixelsPerInch := Screen.PixelsPerInch;

вот это я прописал... Хотя не знаю на сколько правильно и будет ли работать..

Да кстати...
> Юрий Зотов ©   (12.11.04 14:18) [5]
Я ничего не трогал, но все же -
Если поменять разрешение ничего автоматически не меняется... и не должно помоему... А указывать всем компонентам формы width и height волокита, что если этих компенент сотни. Можно-ли автоматизировать этот процесс...
Я щас посмотрю, что можно сделать с помощью
WM_SETTINGCHANGE. А вы советуйте пожалуйста... что можно сделать...
Еще раз спасибо за сотрудничество! :)


 
Юрий Зотов ©   (2004-11-12 15:14) [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:18) [10]

а отслеживать динамику можно в обработчике WM_SETTINGCHANGE
До этой части все так как вы написали...
Можно пример WM_SETTINGCHANGE... честно говоря у меня проблемы с Message... не пользовался... небольшой примерчик... дальше сам сделаю!


 
46_55_41_44 ©   (2004-11-12 15:21) [11]

И еще...
насколько я понял WM_WININICHANGE = WM_SETTINGCHANGE...
Я нашел такую функцию Application.UpdateFormatSettings...
Но она не делает того, что надо...


 
Юрий Зотов ©   (2004-11-12 15:49) [12]

> 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 16:10) [13]

>Юрий Зотов ©   (12.11.04 15:49)
Сделал что было написано в [12]
Вставил туда всего-лишь ShowMessage("OK") чтобы удостовериться, что компилятор срабатывает и прыгает :) в эту процедурку... Но сколько я не меняю параметры экрана ничего не происходит...


 
46_55_41_44 ©   (2004-11-12 16:13) [14]

Почему???


 
Amoeba ©   (2004-11-12 16:13) [15]


> 46_55_41_44 ©   (12.11.04 16:10) [13]

В таком случае "код в студию!"


 
46_55_41_44 ©   (2004-11-12 16:37) [16]

private
   { Private declarations }
   procedure WMSettingChange(var Message: TMessage); message WM_SETTINGCHANGE;
.....

procedure TMainForm.WMSettingChange(var Message: TMessage);
begin
 inherited;
 showmessage("ok");
end;

.........


 
grom   (2004-11-12 19:55) [17]

private{Private declarations}
 procedure WMDISPLAYCHANGE(var Msg: TWMDISPLAYCHANGE);message WM_DISPLAYCHANGE;

procedure TForm1.WMDISPLAYCHANGE(var Msg: TWMDISPLAYCHANGE);//*
begin
Caption :=IntToStr(Msg.Height);
end;
попробуй так



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
1-1100542247
the_ram
2004-11-15 21:10
2004.11.28
Компонет для прожега в Delphi


1-1100256613
qp
2004-11-12 13:50
2004.11.28
Освобождение памяти


4-1097946522
Viper
2004-10-16 21:08
2004.11.28
Мышь


3-1099175813
Apophis
2004-10-31 02:36
2004.11.28
Сортировка в DBGrid...


6-1095423432
Uran
2004-09-17 16:17
2004.11.28
Как зарегестрировать ActiveX Server на клиенте