Подскажите пожалуйста, как можно в линуксе получить список всех поддерживаемых разрешений экрана?
Ubuntu 10.04, Lazarus 0.9.28.
Модератор: Модераторы
Хм... Xorg в данном случае не рулит. У меня в Xorg.conf прописана только максимальное разрешение для моего монитора, однако я могу запустить квагу и выбрать например 640x480. Хотелось бы программное решение
:roll: предложу пользоваться нормальными ос
coyot.rush
И в чём же, по вашему, эта копипаста заключается?
Win7 - нет такой операционной системы. есть Windows Seven
B4rr4cuda писал(а):Ух ты! холивар)))
immortal1977, можно запустить xrandr без параметров и отпарсить вывод.. все поддерживаемые монитором(ами) разрешения будут выведены в столбец, вместе с частотами и прочей инфой.
.wOvAN писал(а):предложу пользоваться нормальными ос.
да еще включен по дефолту TwinView
uses
X, XLib, XUtil, XRandr;
type
zglPResolutionList = ^zglTResolutionList;
zglTResolutionList = record
Count : Integer;
Width : array of Integer;
Height : array of Integer;
end;
var
scr_ResList : zglTResolutionList;
scr_Display : PDisplay;
scr_ModeCount : LongInt;
scr_ModeList : PXRRScreenSize;
wnd_Root : TWindow;
procedure scr_GetResList;
var
i : Integer;
tmp_Settings : PXRRScreenSize;
function Already( Width, Height : Integer ) : Boolean;
var
j : Integer;
begin
Result := FALSE;
for j := 0 to scr_ResList.Count - 1 do
if ( scr_ResList.Width[ j ] = Width ) and ( scr_ResList.Height[ j ] = Height ) Then Result := TRUE;
end;
begin
tmp_Settings := scr_ModeList;
for i := 0 to scr_ModeCount - 1 do
begin
if not Already( tmp_Settings.Width, tmp_Settings.Height ) Then
begin
INC( scr_ResList.Count );
SetLength( scr_ResList.Width, scr_ResList.Count );
SetLength( scr_ResList.Height, scr_ResList.Count );
scr_ResList.Width[ scr_ResList.Count - 1 ] := tmp_Settings.Width;
scr_ResList.Height[ scr_ResList.Count - 1 ] := tmp_Settings.Height;
end;
INC( tmp_Settings );
end;
end;
// Где-то в коде
scr_Display := XOpenDisplay( nil );
wnd_Root := DefaultRootWindow( scr_Display );
scr_ModeList := XRRSizes( scr_Display, XRRRootToScreen( scr_Display, wnd_Root ), @scr_ModeCount );
scr_GetResList();
// Потом список дергаем из scr_ResList
uses
X, XLib, XUtil, xf86vmode, UnixType;
type
zglPResolutionList = ^zglTResolutionList;
zglTResolutionList = record
Count : Integer;
Width : array of Integer;
Height : array of Integer;
end;
var
scr_ResList : zglTResolutionList;
scr_Display : PDisplay;
scr_Default : cint;
scr_ModeCount : LongWord;
scr_ModeList : PPXF86VidModeModeInfo;
procedure scr_GetResList;
var
i : Integer;
tmp_Settings : TXF86VidModeModeInfo;
function Already( Width, Height : Integer ) : Boolean;
var
j : Integer;
begin
Result := FALSE;
for j := 0 to scr_ResList.Count - 1 do
if ( scr_ResList.Width[ j ] = Width ) and ( scr_ResList.Height[ j ] = Height ) Then Result := TRUE;
end;
begin
for i := 0 to scr_ModeCount - 1 do
begin
tmp_Settings := PXF86VidModeModeInfo( Ptr( scr_ModeList^ ) + i * SizeOf( TXF86VidModeModeInfo ) )^;
if not Already( tmp_Settings.hdisplay, tmp_Settings.vdisplay ) Then
begin
INC( scr_ResList.Count );
SetLength( scr_ResList.Width, scr_ResList.Count );
SetLength( scr_ResList.Height, scr_ResList.Count );
scr_ResList.Width[ scr_ResList.Count - 1 ] := tmp_Settings.hdisplay;
scr_ResList.Height[ scr_ResList.Count - 1 ] := tmp_Settings.vdisplay;
end;
end;
end;
// Где-то в коде
scr_Display := XOpenDisplay( nil );
scr_Default := DefaultScreen( scr_Display );
XF86VidModeGetAllModeLines( scr_Display, scr_Default, @scr_ModeCount, @scr_ModeList );
scr_GetResList();
// Потом список дергаем из scr_ResList
Даже не знаю как вас благодарить - после небольшой доработки вашего кода напильником, все заработало. Огромное спасибо.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44