Delphi – Promena grafičkih parametara

Kada razvijate Windows softver, koji će biti distribuiran na veliki broj kompjutera, često je korisno da dati softver poseduje rutinu koja će da nam omogući, ne samo očitavanje aktuelnih podešavanja vezanih za grafičku karticu i monitor, već i mogućnost podešavanja ovih parametara (naravno, u okviru mogućnosti hardvera). Za ovo nam mogu poslužiti dve Windows API funkcije:

  • EnumDisplaySettings – funkcija kojom očitavamo listu dostupnih modova podešavanja (u zavisnosti od hardvera).
  • ChangeDisplaySettings – funkcija za promenu parametara grafičkog prikaza.

Informaciju o svim dostupnim modovima grafičkog podsistema možemo dobiti višestrukim pozivom funkcije EnumDisplaySettings. A evo i kako može da izgleda funkcija za očitavanje parametara; pa pre dodavanja koda, postavite na praznu formu Delphi-ja jednu kontrolu ListBox:


procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
Graf_mod : TDevMode;
begin
i:=0;
while EnumDisplaySettings(nil,i,Graf_mod) do
begin
with Graf_mod do
ListBox1.Items.Add
(Format(‘%dx%d %d boja’,
[dmPelsWidth,dmPelsHeight,1 shl dmBitsperPel]));
Inc(i);
end;

end;


Ova funkcija, između ostalog, zahteva varijablu tipa TDevMode u koju će se smeštati moguća podešavanja, a sastavljena je od brojki koje predstavljaju: rezoluciju u pikselima (dmPelsWidth, dmPelsHeight), broj boja (dmBitsPerPel), frekvenciju vertikalnog osvežavanja (dmDisplayFrequency) i dr. Funkcija očitava jedan po jedan mod, i dodaje ih u ListBox.

Jednom kada smo utvrdili sve moguće grafičke modove, promena moda je vrlo laka. Za promenu ćemo iskoristiti funkciju ChangeDisplaySettings, koja može biti upotrebljena i za promenu ključeva u Registry bazi. U postojeći projekat dodajte jedno komandno dugme i dodajte sledeći kod:


procedure TForm1.Button1Click(Sender: TObject);
var
Graf_mod : TDeviceMode;
liRetValue : Longint;
begin
if EnumDisplaySettings
(nil,Listbox1.ItemIndex,Graf_mod) then
liRetValue := ChangeDisplaySettings
(Graf_mod, CDS_UPDATEREGISTRY);

SendMessage(HWND_BROADCAST,
WM_DISPLAYCHANGE,
SPI_SETNONCLIENTMETRICS,
0);
end;


Zapazite samo na kraju deklaraciju SendMessage, koja služi za obaveštavanje svih trenutno otvorenih prozora, o promeni grafičkih parametara.

Pratite Krstaricu na www.krstarica.com