Тэг ‘программирование’

Как изменить разрешение экрана (Win32 API)

В свое время вставала задача программно изменить разрешение экрана монитора в windows.

Для изменения разрешения экрана есть специальная функция WIN32 API с именем ChangeDisplaySettings в неё необходимо передать указатель на структуру типа DEVMODE, где указывается желаемое разрешение. Естественно, что Ваш монитор и видеокарта должны это разрешение поддерживать.

Естественно, хорошим тоном будет предварительное сохранение предыдущих настроек экрана и возврат после окончания работы программы (или той части программы, где изменяется разрешение) .

// Screen.cpp : Defines the entry point for the console application.
//
#include “stdafx.h”
#include “windows.h”
void main(){
DEVMODE dm;
memset(&dm,0,sizeof(DEVMODE));
dm.dmSize=sizeof(DEVMODE);
dm.dmPelsWidth=800;
dm.dmPelsHeight=600;    dm.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY;    ChangeDisplaySettings(&dm,CDS_UPDATEREGISTRY);
}

form.top=screen.height/2-form.height/2
form.left=screen.width/2-form.width/2

// Еще один вариант получения информации о мониторе

procedure TForm1.Button1Click(Sender: TObject);
Var    TC,BPP,CP,VR,x:  integer; x2:real;
begin
BPP:=GetDeviceCaps(Form1.Canvas.Handle,BITSPIXEL);
CP:=GetDeviceCaps(Form1.Canvas.Handle,PLANES);
x2:=intpower(2,BPP);
x2:=intpower(x2,CP); TC:=round(x2);
Label1.Caption:=’Бит на пиксел: ‘+IntToStr(BPP);
if (TC<3) then  Label2.Caption:=’Монохромный дисплей ‘ else
Label2.Caption:=’Число цветов: ‘+IntToStr(TC);
end;

//
VR:=GetDeviceCaps(Form1.Canvas.Handle,VREFRESH);

// непосредственно.. Изменить разрешение монитора
procedure Display( X, Y : Word );
var
dm : TDEVMODE;
begin
ZeroMemory( @dm, sizeof( TDEVMODE ) );
dm.dmSize := sizeof ( TDEVMODE );
dm.dmPelsWidth := X;
dm.dmPelsHeight := Y;
dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
ChangeDisplaySettings( dm, 0 );
end;
// установить разрешение монитора

procedure SetScreen(BPP: byte; width, height, FR: integer);
var
D: TDevMode;
h: HWND;
begin
h:=0;
D.dmDeviceName:=’DISPLAY’;
D.dmBitsPerPel:=BPP;
D.dmDisplayFrequency:=FR;
D.dmPelsWidth:=Width;
D.dmPelsHeight:=Height;
D.dmFields:=DM_BITSPERPEL+DM_PELSWIDTH+DM_PELSHEIGHT+DM_DISPLAYFREQUENCY;
D.dmSize:=SizeOf(D);
if ChangeDisplaySettings(D,CDS_TEST)=DISP_CHANGE_SUCCESSFUL then
ChangeDisplaySettings(D,CDS_UPDATEREGISTRY)
else
MessageBox(h,’Этот режим не поддерживается видеокартой.’,
‘Ошибка изменения режима!’, MB_ICONWarning);
end;

Вызывается так: SetScreen(глубина цвета, разрешение по горизонтали, разрешение по вертикали, частота в герцах);
Например:
SetScreen(16,800,600,80); {16 бит цвет, 800х600, 80Гц.}

* Найдено на форумах, опробовано и сведено воедино давненько. Просьба отписаться, если работает. :)

Опубликовано Октябрь 5, 2008 | автор: levik  |  Комментарии (2) »

Настройки компилятора Borland Builder

Если приходилось сталкиваться с тем, что программа, созданная в Borland Builder запускается на своем компьютере, но при переносе на другой - ругается на отсутствие файлов ( vcl60.bpl).

Все дело в том, что при настройках по умолчанию (на этапе разработки программы так гораздо удобнее - экономия времени и ресурсов компьютера) скомпилированная программа Borland C++ Builder использует библиотеки Borland (Run Time Packages), в которых содержатся многие используемые функции. Естественно, если на компьютере не установлен Builder или другой продукт, содержащий эти библиотеки, программа не сможет корректно выполниться.

Для компиляции окончательного варианта программы (который будет использоваться на любых компьютерах) следует:

  • Перейти в управление свойствами проекта: Project - Options (Shift+Ctrl+F11);
  • на вкладке Packages снимаем галочку Build with runtime packages;
  • на вкладке Compiler нажимаем кнопочку Release (с зеленым человечком);

На всякий случай можно побродить по вкладкам (Linker и Compiler) и посмотреть, чем отличается режим Release и Full debug (кнопочка рядом с Release) .

После таких манипуляций программа, скомпилированная в Borland Builder будет выполняться на любом компьютере (естественно, с операционной системой Windows, которая поддерживает использованные в программе возможности)

Опубликовано Январь 22, 2008 | автор: levik  |  Нет комментариев »