View previous topic :: View next topic |
Author |
Message |
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Thu Nov 30, 2006 9:29 pm Post subject: |
|
Un kā? Strādāja? |
|
Back to top |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: 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ā . 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Dec 01, 2006 6:45 pm Post subject: |
|
Ja gribi, tad atsūti exampli, varu notestēt uz sava ļaptopa. |
|
Back to top |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: Sat Dec 02, 2006 5:50 pm Post subject: |
|
wow, nu milzīgs paldies |
|
Back to top |
|
|
|