dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

devmode

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Tue Nov 21, 2006 7:49 pm    Post subject: devmode

ir tā sagadījies, ka devmode struktūra delfos ir nepilnīga(trūksts dmDisplayOrientation),ok pamēģināju delphi 2005 un tas pats!!! Pats mēģināju uzrakstīt savu rekordu, bet neveiksmīgi.. kādi varētu būt risinājumi?
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Tue Nov 21, 2006 9:36 pm    Post subject:

Elementārs risinājums - uzrakstīt pareizu recordu.

Kas tev tieši nesanāca?

Ja mana vecā atmiņa neviļ Delphi sintaksē (kā nekā - vismaz 4 gadus neesmu neko delphos rakstījis) un freepaskālu man slinkums instalēt, tad nu sanāk kautkā šādi:
Code:
const
  DMDO_DEFAULT = 0;
  DMDO_90      = 1;
  DMDO_180     = 2;
  DMDO_270     = 3;

type
  TMyDevModeUnion1 = record
    case Integer of
      1: (
           dmOrientation: SmallInt;
           dmPaperSize: SmallInt;
           dmPaperLength: SmallInt;
           dmPaperWidth: SmallInt;
           dmScale: SmallInt;
           dmCopies: SmallInt;
           dmDefaultSource: SmallInt;
           dmPrintQuality: SmallInt;
         );
       2: (
            dmPosition: POINTL;
          );
       3: (
            dmDisplayOrientation: LongWord;
          );
       4: (
            dmDisplayFixedOutput: LongWord;
          );
  end;

  TMyDevModeUnion2 = record
    case Integer of
      1: ( dmDisplayFlags: LongWord; );
      2: ( dmNup: LongWord; );
  end;

  TMyDevMode = record
    dmDeviceName: array [1..CCHDEVICENAME] of Char;
    dmSpecVersion: Word;
    dmDriverVersion: Word;
    dmSize: Word;
    dmDriverExtra: Word;
    dmFields: LongWord;
    union1: TMyDevModeUnion1;
    dmColor: SmallInt;
    dmDuplex: SmallInt;
    dmYResolution: SmallInt;
    dmTTOption: SmallInt;
    dmCollate: SmallInt;
    dmFormName: array [1..CCHFORMNAME] of Char;
    dmLogPixels: Word;
    dmBitsPerPel: LongWord;
    dmPelsWidth: LongWord;
    dmPelsHeight: LongWord;
    union2: TMyDevModeUnion2;
    dmDisplayFrequency: LongWord;
    dmICMMethod: LongWord;
    dmICMIntent: LongWord;
    dmMediaType: LongWord;
    dmDitherType: LongWord;
    dmReserved1: LongWord;
    dmReserved2: LongWord;
    dmPanningWidth: LongWord;
    dmPanningHeight: LongWord;
  end;


Jā un atceries, ka mainīgie (tai skaitā arī record) - tie ir parastu baitu virknīte atmiņā. Tāpēc sliktākajā gadījumā mode: array[1..152] of char. un padod šito tur kur vajag devmodi, un pēc tam izvelc tos 4 vajadzīgos baitus no 44 baita sākuma.


Last edited by bubu on Fri Dec 01, 2006 12:39 am; edited 1 time in total
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Nov 30, 2006 9:29 pm    Post subject:

Un kā? Strādāja?
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Thu Nov 30, 2006 11:09 pm    Post subject:

biju nedaudz piemirsis ....

mēģināju izmantot tavu rakstīto rekordu un pēc tam arī parastu char masīvu, bet nekā, izmet erroru:
types of actual and formal var parameters must be identical...
cik es saprotu, kompilators neparko neņems pretī paštaisītus tipus
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Dec 01, 2006 12:39 am    Post subject:

Tak vienkārši - vaina ir tipu nesaderībā, ne jau paštaisītajos tipos un kompilētājā.
Paņem un nokāsto, i nekādu problēmu:

var a: TMyDevMode;
p: PDevMode;
...
p = @a;
EnumDisplaySettings(0, 0, p);

Kautgan man jau liekas, ka šādi arī vajadzētu strādāt: EnumDisplaySettings(0, 0, @a);

Īsti neatceros, bet ja EnumDisplaySettings trešo parametru sagaida pēc vērtības, nevis pēc adreses (tb ar var keywordu), tad ir variants abus mainīgos atmiņā likt pēc vienas adreses:
var a: TMyDevMode;
b: DevMode absolute a;
...
EnumDisplaySettings(0, 0, b);
// tagad izmantojam a..

Cits variants būtu pašam ieimportēt EnumDisplaySettings fju no dlļa ar tādiem parametru tipiem kā vien gribās.


btw, ieraudzīju dažas kļūdiņas, updeitoju kodu pirmajā postā.
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Fri Dec 01, 2006 6:11 pm    Post subject:

nostrādāja šis variants:
Code:

var a: TMyDevMode;
b: DevMode absolute a;


nedaudz patestēju recordu, it kā strādā, bet dmDisplayOrientation notestēt neizdevās, jo drauveri nepiedāvā režīmu ar rotāciju, es pieņemu, ka strādā Very Happy . thx x 10

neliels offtopic:
Tas ir savādi, ka Borland nespēj vai negrib updeitot devmode struktūru, kā nekā delphi2005, ir samērā jauns produkts
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Dec 01, 2006 6:45 pm    Post subject:

Ja gribi, tad atsūti exampli, varu notestēt uz sava ļaptopa.
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sat Dec 02, 2006 12:50 pm    Post subject:

bubu wrote:
Ja gribi, tad atsūti exampli, varu notestēt uz sava ļaptopa.

tas būtu ļoti jauki. (tikko nosūtīju)Cik man zināms, tad testēšanai labi noder tieši Intel integrētās videokartes.
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Dec 02, 2006 12:58 pm    Post subject:

Uz kurieni tu nosūtīji. Vēl neesmu neko nekur saņēmis.
Un man nav intelis, man ir ATI Mobility Radeon x1600, bet tam displejs arī labi grozās.
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sat Dec 02, 2006 4:10 pm    Post subject:

http://www.houseofbits.com/heaven/devmodeTest.zip
man liekas, ka ar ATI nevarēs notestēt...
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Dec 02, 2006 4:57 pm    Post subject:

Bet enumerēšana tak neatgriež displeja rotāciju, ne?
Vismaz EnumDisplaySettings dokumentācijā rakstīts:
Code:
The EnumDisplaySettings function sets values for the following five DEVMODE members:

    * dmBitsPerPel
    * dmPelsWidth
    * dmPelsHeight
    * dmDisplayFlags
    * dmDisplayFrequency

Programma parāda 0.
Un tev tur liels bugs - pirms izsauc EnumDisplaySettings, DevMode struktūrā ir jābūt uzstādītam dmSize mainīgajam uz struktūras kopējo izmēru (sizeof).

Bet es tiko paeksperimentēju ar gcc, un secināju:
ja DevMode mainīgajā uzstāda dmFields = DM_DISPLAYORIENTATION; (DM_DISPLAYORIENTATION=0x80). Tad šis atgriezīs tikai tās modes, kuras atbilst uzstādītajai dmDisplayOrientations vērtībai.
Tb ja tu grbi enumerēt tikai modes, kuras nav pagrieztas nekur, tad uzstādi dmFalgs=$80;un dmDisplayOrientation=0.
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sat Dec 02, 2006 5:50 pm    Post subject:

wow, nu milzīgs paldies Very Happy
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group