- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Windows, Classes, Messages, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure WMDisplayChange(var Message: TMessage); message WM_DISPLAYCHANGE;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
DevMode : TDeviceMode;
begin
i:=0;
{$IFOPT R+}
{$DEFINE CKRANGE}
{$R-} //range-checking of
{$ENDIF}
while EnumDisplaySettings(nil,i,DevMode) do begin
with Devmode do
ListBox1.Items.Add(Format('%dx%d %d Colors',[dmPelsWidth,dmPelsHeight,1 shl dmBitsperPel]));
Inc(i);
end;
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+} //range-checking on
{$ENDIF}
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
Button1.Enabled := Listbox1.ItemIndex >= 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
DevMode : TDeviceMode;
liRetValue : Longint;
begin
{$IFOPT R+}
{$DEFINE CKRANGE}
{$R-} //range-checking of
{$ENDIF}
if EnumDisplaySettings(nil,Listbox1.ItemIndex,Devmode) then
liRetValue := ChangeDisplaySettings(DevMode,0);
SendMessage(HWND_BROADCAST,
WM_DISPLAYCHANGE,
SPI_SETNONCLIENTMETRICS,
0);
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+} //range-checking on
{$ENDIF}
case liRetValue of
DISP_CHANGE_SUCCESSFUL: ShowMessage('DISP_CHANGE_SUCCESSFUL: The settings change was successful.');
DISP_CHANGE_RESTART : ShowMessage('DISP_CHANGE_RESTART: The computer must be restarted in order for the graphics mode to work.');
DISP_CHANGE_BADFLAGS : ShowMessage('DISP_CHANGE_BADFLAGS: An invalid set of flags was passed in.');
DISP_CHANGE_FAILED : ShowMessage('DISP_CHANGE_FAILED: The display driver failed the specified graphics mode');
DISP_CHANGE_BADMODE : ShowMessage('DISP_CHANGE_BADMODE: The graphics mode is not supported');
DISP_CHANGE_NOTUPDATED: ShowMessage('DISP_CHANGE_NOTUPDATED: Unable to write settings to the registry.');
end;
end;
procedure TForm1.WMDisplayChange(var Message: TMessage);
begin
ShowMessage('Changes in display detected!');
inherited;
end;
initialization
{$I unit1.lrs}
end.
так же не откажусь если кто то поможет доработать программку а именно добавить туда возможность изменения частоты монитора и вывод информации о видео карте,перерыл весь интернет но ничего конкретного не нашел как это все осуществить средствами Lazarus в Ubuntu.
Ps:Заранее всем спасибо.