Avatar billede labomba Nybegynder
14. januar 2000 - 13:31 Der er 6 kommentarer og
1 løsning

Skærmens bitdybde i windows

Ved hjælp af et API kald kan man på følgende måde sætte en ny windowsopløsning:



procedure SetWinRes(HardMaxX, HardMaxY, HardBPP: DWord);
var
WinRes : TDeviceMode;
begin
EnumDisplaySettings(nil, 0, WinRes);
WinRes.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL;
WinRes.dmPelsWidth :=HardMaxX;
WinRes.dmPelsHeight:=HardMaxY;
WinRes.dmBitsPerPel:=HardBPP;
ChangeDisplaySettings(WinRes, 0);
end;



Dette er jo fint nok, men er der nogen der ved hvordan man læser hvilken farvedybde, bits pr. pixel, windows kører med?
Skærmens vidde og bredde kan læses med Screen.Width og Screen.Height men ikke farvedybden.


Avatar billede michaelras Nybegynder
14. januar 2000 - 14:38 #1
Du har jo selv skrevet svaret.... i ovenstående eksempel kan du læse farvedybden af den pågældende opløsning i WinRes.dmBitsPerPel (efter kaldet til EnumDisplaySettings(nil, 0, WinRes);)

Michael
Avatar billede sjensen Nybegynder
14. januar 2000 - 15:14 #2
Det er ikke helt korrekt, michaelras. Det er rigtigt at man i winres.dmbitsperpel kan læse bits pr. pixel, men hvilken af de mulit devicesettings der er den rigtige kan han med ovenstående eksempel ikke være sikker på.

Jeg gør sådan i mione programmer:

først kalder jeg:

procedure getcolorscount;
var h : hDC;
    i : integer;
begin
  try
    h      := getDC(0);
    i      := getdevicecaps(h,planes);
    cbits  := getdevicecaps(h,bitspixel);
    ccolors := 1 shl (i * cbits);
  finally
    releaseDC(0,h);
  end;
end;

og derefter er:

getcolorscount;
  if ccolors < 2 then
  begin
    skm_typ.caption := inttostr(cbits)+ ' bit';
  end else
  begin
    skm_typ.caption := inttostr(ccolors)+' ('+inttostr(cbits)+ ' bit)';
  end;

Dette viser i en label (skm_typ) f.eks: '16777891 (24bit)'

sjensen
Avatar billede sjensen Nybegynder
14. januar 2000 - 15:17 #3
Jeg glemte lige at sige:

Kaldet til EnumDisplaySettings skal udføres med en værdi stigende med 1 fra 0, indtil den returnerer en 0-værdi. Da der kan være flere end en displaysetting kan man ikke være sikker på hvilken der er benyttet. Kaldet viser KUN DE mulige settings (dem man normalt kan vælge under indstillinger i skærm). Ikke den der er valgt.

sjensen
Avatar billede sjensen Nybegynder
14. januar 2000 - 15:20 #4
Ups ! Nok en forglemmelse vedr. første svar:

//globale def.

var
cbits, ccolors : integer;

Avatar billede labomba Nybegynder
15. januar 2000 - 00:34 #5
OK, jeg prøver lige en gang...
Avatar billede labomba Nybegynder
15. januar 2000 - 00:35 #6
OK sjensen, jeg prøver lige en gang...
Avatar billede labomba Nybegynder
17. januar 2000 - 20:22 #7
OK, det virker, tak for hjælpen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester