1unit win31;
2
3{$MODE objfpc}
4
5{$if defined(FPC_MM_COMPACT) or defined(FPC_MM_LARGE) or defined(FPC_MM_HUGE)}
6  {$define VAR_PARAMS_ARE_FAR}
7{$endif}
8
9interface
10
11uses
12  wintypes;
13
14const
15  GFSR_SYSTEMRESOURCES = $0000;
16  GFSR_GDIRESOURCES    = $0001;
17  GFSR_USERRESOURCES   = $0002;
18
19{****** LogParamError/LogError values *}
20
21{ Error modifier bits }
22
23  ERR_WARNING           = $8000;
24  ERR_PARAM             = $4000;
25
26  ERR_SIZE_MASK         = $3000;
27  ERR_BYTE              = $1000;
28  ERR_WORD              = $2000;
29  ERR_DWORD             = $3000;
30
31{****** LogParamError() values *}
32
33{ Generic parameter values }
34  ERR_BAD_VALUE         = $6001;
35  ERR_BAD_FLAGS         = $6002;
36  ERR_BAD_INDEX         = $6003;
37  ERR_BAD_DVALUE        = $7004;
38  ERR_BAD_DFLAGS        = $7005;
39  ERR_BAD_DINDEX        = $7006;
40  ERR_BAD_PTR           = $7007;
41  ERR_BAD_FUNC_PTR      = $7008;
42  ERR_BAD_SELECTOR      = $6009;
43  ERR_BAD_STRING_PTR    = $700a;
44  ERR_BAD_HANDLE        = $600b;
45
46{ KERNEL parameter errors }
47  ERR_BAD_HINSTANCE     = $6020;
48  ERR_BAD_HMODULE       = $6021;
49  ERR_BAD_GLOBAL_HANDLE = $6022;
50  ERR_BAD_LOCAL_HANDLE  = $6023;
51  ERR_BAD_ATOM          = $6024;
52  ERR_BAD_HFILE         = $6025;
53
54{ USER parameter errors }
55  ERR_BAD_HWND          = $6040;
56  ERR_BAD_HMENU         = $6041;
57  ERR_BAD_HCURSOR       = $6042;
58  ERR_BAD_HICON         = $6043;
59  ERR_BAD_HDWP          = $6044;
60  ERR_BAD_CID           = $6045;
61  ERR_BAD_HDRVR         = $6046;
62
63{ GDI parameter errors }
64  ERR_BAD_COORDS        = $7060;
65  ERR_BAD_GDI_OBJECT    = $6061;
66  ERR_BAD_HDC           = $6062;
67  ERR_BAD_HPEN          = $6063;
68  ERR_BAD_HFONT         = $6064;
69  ERR_BAD_HBRUSH        = $6065;
70  ERR_BAD_HBITMAP       = $6066;
71  ERR_BAD_HRGN          = $6067;
72  ERR_BAD_HPALETTE      = $6068;
73  ERR_BAD_HMETAFILE     = $6069;
74
75
76{**** LogError() values *}
77
78{ KERNEL errors }
79  ERR_GALLOC            = $0001;
80  ERR_GREALLOC          = $0002;
81  ERR_GLOCK             = $0003;
82  ERR_LALLOC            = $0004;
83  ERR_LREALLOC          = $0005;
84  ERR_LLOCK             = $0006;
85  ERR_ALLOCRES          = $0007;
86  ERR_LOCKRES           = $0008;
87  ERR_LOADMODULE        = $0009;
88
89{ USER errors }
90  ERR_CREATEDLG2        = $0041;
91  ERR_CREATEDLG         = $0040;
92  ERR_REGISTERCLASS     = $0042;
93  ERR_DCBUSY            = $0043;
94  ERR_CREATEWND         = $0044;
95  ERR_STRUCEXTRA        = $0045;
96  ERR_LOADSTR           = $0046;
97  ERR_LOADMENU          = $0047;
98  ERR_NESTEDBEGINPAINT  = $0048;
99  ERR_BADINDEX          = $0049;
100  ERR_CREATEMENU        = $004a;
101
102{ GDI errors }
103  ERR_CREATEDC          = $0080;
104  ERR_CREATEMETA        = $0081;
105  ERR_DELOBJSELECTED    = $0082;
106  ERR_SELBITMAP         = $0083;
107
108type
109{ Debugging support (DEBUG SYSTEM ONLY) }
110  LPWINDEBUGINFO = ^WINDEBUGINFO; far;
111  WINDEBUGINFO = record
112    flags: UINT;
113    dwOptions: DWORD;
114    dwFilter: DWORD;
115    achAllocModule: array [0..7] of char;
116    dwAllocBreak: DWORD;
117    dwAllocCount: DWORD;
118  end;
119  PWinDebugInfo = ^TWinDebugInfo;
120  TWinDebugInfo = WINDEBUGINFO;
121
122const
123{ WINDEBUGINFO flags values }
124  WDI_OPTIONS           = $0001;
125  WDI_FILTER            = $0002;
126  WDI_ALLOCBREAK        = $0004;
127
128{ dwOptions values }
129  DBO_CHECKHEAP         = $0001;
130  DBO_BUFFERFILL        = $0004;
131  DBO_DISABLEGPTRAPPING = $0010;
132  DBO_CHECKFREE         = $0020;
133
134  DBO_SILENT            = $8000;
135
136  DBO_TRACEBREAK        = $2000;
137  DBO_WARNINGBREAK      = $1000;
138  DBO_NOERRORBREAK      = $0800;
139  DBO_NOFATALBREAK      = $0400;
140  DBO_INT3BREAK         = $0100;
141
142{ DebugOutput flags values }
143  DBF_TRACE             = $0000;
144  DBF_WARNING           = $4000;
145  DBF_ERROR             = $8000;
146  DBF_FATAL             = $c000;
147
148{ dwFilter values }
149  DBF_KERNEL            = $1000;
150  DBF_KRN_MEMMAN        = $0001;
151  DBF_KRN_LOADMODULE    = $0002;
152  DBF_KRN_SEGMENTLOAD   = $0004;
153  DBF_USER              = $0800;
154  DBF_GDI               = $0400;
155  DBF_MMSYSTEM          = $0040;
156  DBF_PENWIN            = $0020;
157  DBF_APPLICATION       = $0008;
158  DBF_DRIVER            = $0010;
159
160{ ExitWindows values }
161  EW_REBOOTSYSTEM = $43;
162
163{ Predefined Resource Types }
164  OBM_UPARROWI    = 32737;
165  OBM_DNARROWI    = 32736;
166  OBM_RGARROWI    = 32735;
167  OBM_LFARROWI    = 32734;
168
169type
170{ GDI typedefs, structures, and functions }
171  PSIZE = ^SIZE;
172  NPSIZE = ^SIZE; near;
173  LPSIZE = ^SIZE; far;
174  SIZE = record
175    cx: SmallInt;
176    cy: SmallInt;
177  end;
178  TSize = SIZE;
179
180const
181{ Drawing bounds accumulation APIs }
182  DCB_RESET      = $0001;
183  DCB_ACCUMULATE = $0002;
184  DCB_DIRTY      = DCB_ACCUMULATE;
185  DCB_SET        = DCB_RESET or DCB_ACCUMULATE;
186  DCB_ENABLE     = $0004;
187  DCB_DISABLE    = $0008;
188
189{ Color support }
190  COLOR_INACTIVECAPTIONTEXT = 19;
191  COLOR_BTNHIGHLIGHT        = 20;
192
193{ Font support }
194{ OutPrecision values }
195  OUT_TT_PRECIS      = 4;
196  OUT_DEVICE_PRECIS  = 5;
197  OUT_RASTER_PRECIS  = 6;
198  OUT_TT_ONLY_PRECIS = 7;
199
200{ ClipPrecision values }
201  CLIP_LH_ANGLES = $10;
202  CLIP_TT_ALWAYS = $20;
203  CLIP_EMBEDDED  = $80;
204
205{ tmPitchAndFamily values }
206  TMPF_TRUETYPE = $04;
207
208type
209  PPANOSE = ^PANOSE;
210  LPPANOSE = ^PANOSE; far;
211  PANOSE = record
212    bFamilyType: BYTE;
213    bSerifStyle: BYTE;
214    bWeight: BYTE;
215    bProportion: BYTE;
216    bContrast: BYTE;
217    bStrokeVariation: BYTE;
218    bArmStyle: BYTE;
219    bLetterform: BYTE;
220    bMidline: BYTE;
221    bXHeight: BYTE;
222  end;
223  TPanose = PANOSE;
224
225  POUTLINETEXTMETRIC = ^OUTLINETEXTMETRIC;
226  LPOUTLINETEXTMETRIC = ^OUTLINETEXTMETRIC; far;
227  OUTLINETEXTMETRIC = record
228    otmSize: UINT;
229    otmTextMetrics: TEXTMETRIC;
230    otmFiller: BYTE;
231    otmPanoseNumber: PANOSE;
232    otmfsSelection: UINT;
233    otmfsType: UINT;
234    otmsCharSlopeRise: SmallInt;
235    otmsCharSlopeRun: SmallInt;
236    otmItalicAngle: SmallInt;
237    otmEMSquare: UINT;
238    otmAscent: SmallInt;
239    otmDescent: SmallInt;
240    otmLineGap: UINT;
241    otmsCapEmHeight: UINT;
242    otmsXHeight: UINT;
243    otmrcFontBox: RECT;
244    otmMacAscent: SmallInt;
245    otmMacDescent: SmallInt;
246    otmMacLineGap: UINT;
247    otmusMinimumPPEM: UINT;
248    otmptSubscriptSize: POINT;
249    otmptSubscriptOffset: POINT;
250    otmptSuperscriptSize: POINT;
251    otmptSuperscriptOffset: POINT;
252    otmsStrikeoutSize: UINT;
253    otmsStrikeoutPosition: SmallInt;
254    otmsUnderscorePosition: SmallInt;
255    otmsUnderscoreSize: SmallInt;
256    otmpFamilyName: PSTR;
257    otmpFaceName: PSTR;
258    otmpStyleName: PSTR;
259    otmpFullName: PSTR;
260  end;
261  TOutlineTextMetric = OUTLINETEXTMETRIC;
262
263{ Structure passed to FONTENUMPROC }
264{ NOTE: NEWTEXTMETRIC is the same as TEXTMETRIC plus 4 new fields }
265  PNEWTEXTMETRIC = ^NEWTEXTMETRIC;
266  NPNEWTEXTMETRIC = ^NEWTEXTMETRIC; near;
267  LPNEWTEXTMETRIC = ^NEWTEXTMETRIC; far;
268  NEWTEXTMETRIC = record
269    tmHeight: SmallInt;
270    tmAscent: SmallInt;
271    tmDescent: SmallInt;
272    tmInternalLeading: SmallInt;
273    tmExternalLeading: SmallInt;
274    tmAveCharWidth: SmallInt;
275    tmMaxCharWidth: SmallInt;
276    tmWeight: SmallInt;
277    tmItalic: BYTE;
278    tmUnderlined: BYTE;
279    tmStruckOut: BYTE;
280    tmFirstChar: BYTE;
281    tmLastChar: BYTE;
282    tmDefaultChar: BYTE;
283    tmBreakChar: BYTE;
284    tmPitchAndFamily: BYTE;
285    tmCharSet: BYTE;
286    tmOverhang: SmallInt;
287    tmDigitizedAspectX: SmallInt;
288    tmDigitizedAspectY: SmallInt;
289    ntmFlags: DWORD;
290    ntmSizeEM: UINT;
291    ntmCellHeight: UINT;
292    ntmAvgWidth: UINT;
293  end;
294  TNewTextMetric = NEWTEXTMETRIC;
295
296const
297{ ntmFlags field flags }
298  NTM_REGULAR = $00000040;
299  NTM_BOLD    = $00000020;
300  NTM_ITALIC  = $00000001;
301
302  LF_FULLFACESIZE = 64;
303
304type
305{ Structure passed to FONTENUMPROC }
306  PENUMLOGFONT = ^ENUMLOGFONT;
307  LPENUMLOGFONT = ^ENUMLOGFONT; far;
308  ENUMLOGFONT = record
309    elfLogFont: LOGFONT;
310    elfFullName: array [0..LF_FULLFACESIZE-1] of char;
311    elfStyle: array [0..LF_FACESIZE-1] of char;
312  end;
313  TEnumLogFont = ENUMLOGFONT;
314
315  FONTENUMPROC = function(lpelf: LPENUMLOGFONT; lpntm: LPNEWTEXTMETRIC; FontType: SmallInt; lpData: LPARAM): SmallInt; far;
316
317const
318{ EnumFonts font type values }
319  TRUETYPE_FONTTYPE = $0004;
320
321type
322  PGLYPHMETRICS = ^GLYPHMETRICS;
323  LPGLYPHMETRICS = ^GLYPHMETRICS; far;
324  GLYPHMETRICS = record
325    gmBlackBoxX: UINT;
326    gmBlackBoxY: UINT;
327    gmptGlyphOrigin: POINT;
328    gmCellIncX: SmallInt;
329    gmCellIncY: SmallInt;
330  end;
331  TGlyphMetrics = GLYPHMETRICS;
332
333  PFIXED = ^FIXED;
334  LPFIXED = ^FIXED; far;
335  FIXED = record
336    fract: UINT;
337    value: SmallInt;
338  end;
339  TFixed = FIXED;
340
341  PMAT2 = ^MAT2;
342  LPMAT2 = ^MAT2; far;
343  MAT2 = record
344    eM11: FIXED;
345    eM12: FIXED;
346    eM21: FIXED;
347    eM22: FIXED;
348  end;
349  TMat2 = MAT2;
350
351const
352{ GetGlyphOutline constants }
353  GGO_METRICS     =  0;
354  GGO_BITMAP      =  1;
355  GGO_NATIVE      =  2;
356
357  TT_POLYGON_TYPE = 24;
358
359  TT_PRIM_LINE    =  1;
360  TT_PRIM_QSPLINE =  2;
361
362type
363  PPOINTFX = ^POINTFX;
364  LPPOINTFX = ^POINTFX; far;
365  POINTFX = record
366    x: FIXED;
367    y: FIXED;
368  end;
369  TPointFX = POINTFX;
370
371  PTTPOLYCURVE = ^TTPOLYCURVE;
372  LPTTPOLYCURVE = ^TTPOLYCURVE; far;
373  TTPOLYCURVE = record
374    wType: UINT;
375    cpfx: UINT;
376    apfx: array [0..0] of POINTFX;
377  end;
378  TTTPOLYCURVE = TTPolyCurve;
379
380  PTTPOLYGONHEADER = ^TTPOLYGONHEADER;
381  LPTTPOLYGONHEADER = ^TTPOLYGONHEADER; far;
382  TTPOLYGONHEADER = record
383    cb: DWORD;
384    dwType: DWORD;
385    pfxStart: POINTFX;
386  end;
387  TTTPolygonHeader = TTPOLYGONHEADER;
388
389  PABC = ^ABC;
390  LPABC = ^ABC; far;
391  ABC = record
392    abcA: SmallInt;
393    abcB: UINT;
394    abcC: SmallInt;
395  end;
396  TABC = ABC;
397
398  PKERNINGPAIR = ^KERNINGPAIR;
399  LPKERNINGPAIR = ^KERNINGPAIR; far;
400  KERNINGPAIR = record
401    wFirst: WORD;
402    wSecond: WORD;
403    iKernAmount: SmallInt;
404  end;
405  TKerningPair = KERNINGPAIR;
406
407  PRASTERIZER_STATUS = ^RASTERIZER_STATUS;
408  LPRASTERIZER_STATUS = ^RASTERIZER_STATUS; far;
409  RASTERIZER_STATUS = record
410    nSize: SmallInt;
411    wFlags: SmallInt;
412    nLanguageID: SmallInt;
413  end;
414  TRasterizer_Status = RASTERIZER_STATUS;
415
416const
417{ bits defined in wFlags of RASTERIZER_STATUS }
418  TT_AVAILABLE = $0001;
419  TT_ENABLED   = $0002;
420
421type
422{ Printing support }
423  PDOCINFO = ^DOCINFO;
424  LPDOCINFO = ^DOCINFO; far;
425  DOCINFO = record
426    cbSize: SmallInt;
427    lpszDocName: LPCSTR;
428    lpszOutput: LPCSTR;
429  end;
430  TDocInfo = DOCINFO;
431
432{ System Metrics }
433const
434{ GetSystemMetrics() codes }
435  SM_CXDOUBLECLK       = 36;
436  SM_CYDOUBLECLK       = 37;
437  SM_CXICONSPACING     = 38;
438  SM_CYICONSPACING     = 39;
439  SM_MENUDROPALIGNMENT = 40;
440  SM_PENWINDOWS        = 41;
441  SM_DBCSENABLED       = 42;
442  SM_CMETRICS          = 43;
443
444{ System Parameters support }
445  SPI_GETBEEP               = 1;
446  SPI_SETBEEP               = 2;
447  SPI_GETMOUSE              = 3;
448  SPI_SETMOUSE              = 4;
449  SPI_GETBORDER             = 5;
450  SPI_SETBORDER             = 6;
451  SPI_GETKEYBOARDSPEED      = 10;
452  SPI_SETKEYBOARDSPEED      = 11;
453  SPI_LANGDRIVER            = 12;
454  SPI_ICONHORIZONTALSPACING = 13;
455  SPI_GETSCREENSAVETIMEOUT  = 14;
456  SPI_SETSCREENSAVETIMEOUT  = 15;
457  SPI_GETSCREENSAVEACTIVE   = 16;
458  SPI_SETSCREENSAVEACTIVE   = 17;
459  SPI_GETGRIDGRANULARITY    = 18;
460  SPI_SETGRIDGRANULARITY    = 19;
461  SPI_SETDESKWALLPAPER      = 20;
462  SPI_SETDESKPATTERN        = 21;
463  SPI_GETKEYBOARDDELAY      = 22;
464  SPI_SETKEYBOARDDELAY      = 23;
465  SPI_ICONVERTICALSPACING   = 24;
466  SPI_GETICONTITLEWRAP      = 25;
467  SPI_SETICONTITLEWRAP      = 26;
468  SPI_GETMENUDROPALIGNMENT  = 27;
469  SPI_SETMENUDROPALIGNMENT  = 28;
470  SPI_SETDOUBLECLKWIDTH     = 29;
471  SPI_SETDOUBLECLKHEIGHT    = 30;
472  SPI_GETICONTITLELOGFONT   = 31;
473  SPI_SETDOUBLECLICKTIME    = 32;
474  SPI_SETMOUSEBUTTONSWAP    = 33;
475  SPI_SETICONTITLELOGFONT   = 34;
476  SPI_GETFASTTASKSWITCH     = 35;
477  SPI_SETFASTTASKSWITCH     = 36;
478
479{ SystemParametersInfo flags }
480  SPIF_UPDATEINIFILE    = $0001;
481  SPIF_SENDWININICHANGE = $0002;
482
483{ Window message support }
484
485{ GetQueueStatus flags }
486  QS_KEY         = $0001;
487  QS_MOUSEMOVE   = $0002;
488  QS_MOUSEBUTTON = $0004;
489  QS_MOUSE       = QS_MOUSEMOVE or QS_MOUSEBUTTON;
490  QS_POSTMESSAGE = $0008;
491  QS_TIMER       = $0010;
492  QS_PAINT       = $0020;
493  QS_SENDMESSAGE = $0040;
494
495  QS_ALLINPUT    = $007f;
496
497{ Power management }
498  WM_POWER = $0048;
499
500{ wParam for WM_POWER window message and DRV_POWER driver notification }
501  PWR_OK             = 1;
502  PWR_FAIL           = (-1);
503  PWR_SUSPENDREQUEST = 1;
504  PWR_SUSPENDRESUME  = 2;
505  PWR_CRITICALRESUME = 3;
506
507{ Window class management }
508{ Class field offsets for GetClassLong() and GetClassWord() }
509  GCW_ATOM = (-32);
510
511{ Window creation/destroy }
512
513{ Window Styles }
514  WS_EX_TOPMOST     = $00000008;
515  WS_EX_ACCEPTFILES = $00000010;
516  WS_EX_TRANSPARENT = $00000020;
517
518type
519{ Window size, position, Z-order, and visibility }
520  PWINDOWPLACEMENT = ^WINDOWPLACEMENT;
521  LPWINDOWPLACEMENT = ^WINDOWPLACEMENT; far;
522  WINDOWPLACEMENT = record
523    length: UINT;
524    flags: UINT;
525    showCmd: UINT;
526    ptMinPosition: POINT;
527    ptMaxPosition: POINT;
528    rcNormalPosition: RECT;
529  end;
530  TWindowPlacement = WINDOWPLACEMENT;
531
532const
533  WPF_SETMINPOSITION     = $0001;
534  WPF_RESTORETOMAXIMIZED = $0002;
535
536  WM_WINDOWPOSCHANGING   = $0046;
537  WM_WINDOWPOSCHANGED    = $0047;
538
539type
540{ WM_WINDOWPOSCHANGING/CHANGED struct pointed to by lParam }
541  PWINDOWPOS = ^WINDOWPOS;
542  LPWINDOWPOS = ^WINDOWPOS; far;
543  WINDOWPOS = record
544    hwnd: HWND;
545    hwndInsertAfter: HWND;
546    x: SmallInt;
547    y: SmallInt;
548    cx: SmallInt;
549    cy: SmallInt;
550    flags: UINT;
551  end;
552  TWindowPos = WINDOWPOS;
553
554const
555{ Window drawing support }
556  DCX_WINDOW           = $00000001;
557  DCX_CACHE            = $00000002;
558  DCX_CLIPCHILDREN     = $00000008;
559  DCX_CLIPSIBLINGS     = $00000010;
560  DCX_PARENTCLIP       = $00000020;
561
562  DCX_EXCLUDERGN       = $00000040;
563  DCX_INTERSECTRGN     = $00000080;
564
565
566  DCX_LOCKWINDOWUPDATE = $00000400;
567
568
569  DCX_USESTYLE         = $00010000;
570
571{ Window scrolling }
572  SW_SCROLLCHILDREN = $0001;
573  SW_INVALIDATE     = $0002;
574  SW_ERASE          = $0004;
575
576{ Non-client window area management }
577{ WM_NCCALCSIZE return flags }
578  WVR_ALIGNTOP    = $0010;
579  WVR_ALIGNLEFT   = $0020;
580  WVR_ALIGNBOTTOM = $0040;
581  WVR_ALIGNRIGHT  = $0080;
582  WVR_HREDRAW     = $0100;
583  WVR_VREDRAW     = $0200;
584  WVR_REDRAW      = WVR_HREDRAW or WVR_VREDRAW;
585  WVR_VALIDRECTS  = $0400;
586
587type
588{ WM_NCCALCSIZE parameter structure }
589  PNCCALCSIZE_PARAMS = ^NCCALCSIZE_PARAMS;
590  LPNCCALCSIZE_PARAMS = ^NCCALCSIZE_PARAMS; far;
591  NCCALCSIZE_PARAMS = record
592    rgrc: array [0..2] of RECT;
593    lppos: LPWINDOWPOS;
594  end;
595  TNCCalcSize_Params = NCCALCSIZE_PARAMS;
596
597{ Mouse input support }
598  const
599{ WM_MOUSEACTIVATE return codes }
600  MA_NOACTIVATEANDEAT = 4;
601
602{ Menu support }
603{ Flags for TrackPopupMenu }
604  TPM_RIGHTBUTTON = $0002;
605  TPM_LEFTALIGN   = $0000;
606  TPM_CENTERALIGN = $0004;
607  TPM_RIGHTALIGN  = $0008;
608
609{ MDI Support }
610
611{ MDI client style bits }
612  MDIS_ALLCHILDSTYLES = $0001;
613
614{ wParam values for WM_MDITILE and WM_MDICASCADE messages. }
615  MDITILE_VERTICAL     = $0000;
616  MDITILE_HORIZONTAL   = $0001;
617  MDITILE_SKIPDISABLED = $0002;
618
619{ Static control }
620{ Static Control Mesages }
621  STM_SETICON = (WM_USER+0);
622  STM_GETICON = (WM_USER+1);
623
624{ Edit control }
625{ Edit control styles }
626  ES_READONLY            = $00000800;
627  ES_WANTRETURN          = $00001000;
628
629{ Edit control messages }
630  EM_GETFIRSTVISIBLELINE = (WM_USER+30);
631  EM_SETREADONLY         = (WM_USER+31);
632  EM_SETWORDBREAKPROC    = (WM_USER+32);
633  EM_GETWORDBREAKPROC    = (WM_USER+33);
634  EM_GETPASSWORDCHAR     = (WM_USER+34);
635
636type
637  EDITWORDBREAKPROC = function(lpch: LPSTR; ichCurrent, cch, code: SmallInt): SmallInt; far;
638
639const
640{ EDITWORDBREAKPROC code values }
641  WB_LEFT                = 0;
642  WB_RIGHT               = 1;
643  WB_ISDELIMITER         = 2;
644
645{ Listbox control }
646{ Listbox styles }
647  LBS_DISABLENOSCROLL = $1000;
648
649{ Listbox messages }
650  LB_SETITEMHEIGHT    = (WM_USER+33);
651  LB_GETITEMHEIGHT    = (WM_USER+34);
652  LB_FINDSTRINGEXACT  = (WM_USER+35);
653
654{ Combo box control }
655{ Combo box styles }
656  CBS_DISABLENOSCROLL      = $0800;
657
658{ Combo box messages }
659  CB_GETDROPPEDCONTROLRECT = (WM_USER+18);
660  CB_SETITEMHEIGHT         = (WM_USER+19);
661  CB_GETITEMHEIGHT         = (WM_USER+20);
662  CB_SETEXTENDEDUI         = (WM_USER+21);
663  CB_GETEXTENDEDUI         = (WM_USER+22);
664  CB_GETDROPPEDSTATE       = (WM_USER+23);
665  CB_FINDSTRINGEXACT       = (WM_USER+24);
666
667{ Combo box notification codes }
668  CBN_CLOSEUP              = 8;
669  CBN_SELENDOK             = 9;
670  CBN_SELENDCANCEL         = 10;
671
672{ Computer-based-training (CBT) support }
673type
674{ HCBT_CREATEWND parameters pointed to by lParam }
675  PCBT_CREATEWND = ^CBT_CREATEWND;
676  LPCBT_CREATEWND = ^CBT_CREATEWND; far;
677  CBT_CREATEWND = record
678    lpcs: LPCREATESTRUCT;
679    hwndInsertAfter: HWND;
680  end;
681  TCBT_CreateWnd = CBT_CREATEWND;
682
683{ HCBT_ACTIVATE structure pointed to by lParam }
684  PCBTACTIVATESTRUCT = ^CBTACTIVATESTRUCT;
685  LPCBTACTIVATESTRUCT = ^CBTACTIVATESTRUCT; far;
686  CBTACTIVATESTRUCT = record
687    fMouse: BOOL;
688    hWndActive: HWND;
689  end;
690  TCBTActivateStruct = CBTACTIVATESTRUCT;
691
692const
693{ Hardware hook support }
694  WH_HARDWARE = 8;
695
696type
697  PHARDWAREHOOKSTRUCT = ^HARDWAREHOOKSTRUCT;
698  LPHARDWAREHOOKSTRUCT = ^HARDWAREHOOKSTRUCT; far;
699  HARDWAREHOOKSTRUCT = record
700    hWnd: HWND;
701    wMessage: UINT;
702    wParam: WPARAM;
703    lParam: LPARAM;
704  end;
705  THardwareHookStruct = HARDWAREHOOKSTRUCT;
706
707{ Shell support }
708const
709{ SetWindowsHook() Shell hook code }
710  WH_SHELL                   = 10;
711
712  HSHELL_WINDOWCREATED       = 1;
713  HSHELL_WINDOWDESTROYED     = 2;
714  HSHELL_ACTIVATESHELLWINDOW = 3;
715
716{ Debugger support }
717
718{ SetWindowsHook debug hook support }
719  WH_DEBUG = 9;
720
721type
722  PDEBUGHOOKINFO = ^DEBUGHOOKINFO;
723  LPDEBUGHOOKINFO = ^DEBUGHOOKINFO; far;
724  DEBUGHOOKINFO = record
725    hModuleHook: HMODULE;
726    reserved: LPARAM;
727    lParam: LPARAM;
728    wParam: WPARAM;
729    code: SmallInt;
730  end;
731  TDebugHookInfo = DEBUGHOOKINFO;
732
733const
734{ Flags returned by GetSystemDebugState. }
735  SDS_MENU        = $0001;
736  SDS_SYSMODAL    = $0002;
737  SDS_NOTASKQUEUE = $0004;
738  SDS_DIALOG      = $0008;
739  SDS_TASKLOCKED  = $0010;
740
741{ Comm support }
742{ new escape functions }
743  GETMAXLPT     = 8;
744  GETMAXCOM     = 9;
745  GETBASEIRQ    = 10;
746
747{ Comm Baud Rate indices }
748  CBR_110       = $FF10;
749  CBR_300       = $FF11;
750  CBR_600       = $FF12;
751  CBR_1200      = $FF13;
752  CBR_2400      = $FF14;
753  CBR_4800      = $FF15;
754  CBR_9600      = $FF16;
755  CBR_14400     = $FF17;
756  CBR_19200     = $FF18;
757  CBR_38400     = $FF1B;
758  CBR_56000     = $FF1F;
759  CBR_128000    = $FF23;
760  CBR_256000    = $FF27;
761
762{ notifications passed in low word of lParam on WM_COMMNOTIFY messages }
763  CN_RECEIVE    = $0001;
764  CN_TRANSMIT   = $0002;
765  CN_EVENT      = $0004;
766
767  WM_COMMNOTIFY = $0044;
768
769type
770{ Driver support }
771  HDRVR = THandle;
772  DRIVERPROC = function(dwDriverIdentifier: DWORD; hDriver: HDRVR; msg: UINT; lParam1, lParam2: LPARAM): LRESULT; far;
773
774const
775{ Driver messages }
776  DRV_LOAD              = $0001;
777  DRV_ENABLE            = $0002;
778  DRV_OPEN              = $0003;
779  DRV_CLOSE             = $0004;
780  DRV_DISABLE           = $0005;
781  DRV_FREE              = $0006;
782  DRV_CONFIGURE         = $0007;
783  DRV_QUERYCONFIGURE    = $0008;
784  DRV_INSTALL           = $0009;
785  DRV_REMOVE            = $000A;
786  DRV_EXITSESSION       = $000B;
787  DRV_EXITAPPLICATION   = $000C;
788  DRV_POWER             = $000F;
789
790  DRV_RESERVED          = $0800;
791  DRV_USER              = $4000;
792
793type
794{ LPARAM of DRV_CONFIGURE message }
795  PDRVCONFIGINFO = ^DRVCONFIGINFO;
796  LPDRVCONFIGINFO = ^DRVCONFIGINFO; far;
797  DRVCONFIGINFO = record
798    dwDCISize: DWORD;
799    lpszDCISectionName: LPCSTR;
800    lpszDCIAliasName: LPCSTR;
801  end;
802  TDrvConfigInfo = DRVCONFIGINFO;
803
804const
805{ Supported return values for DRV_CONFIGURE message }
806  DRVCNF_CANCEL         = $0000;
807  DRVCNF_OK             = $0001;
808  DRVCNF_RESTART        = $0002;
809
810{ Supported lParam1 of DRV_EXITAPPLICATION notification }
811  DRVEA_NORMALEXIT      = $0001;
812  DRVEA_ABNORMALEXIT    = $0002;
813
814{ GetNextDriver flags }
815  GND_FIRSTINSTANCEONLY = $00000001;
816
817  GND_FORWARD           = $00000000;
818  GND_REVERSE           = $00000002;
819
820type
821  PDRIVERINFOSTRUCT = ^DRIVERINFOSTRUCT;
822  LPDRIVERINFOSTRUCT = ^DRIVERINFOSTRUCT; far;
823  DRIVERINFOSTRUCT = record
824    length: UINT;
825    hDriver: HDRVR;
826    hModule: HINST;
827    szAliasName: array [0..127] of char;
828  end;
829  TDriverInfoStruct = DRIVERINFOSTRUCT;
830
831function GetFreeSystemResources(SysResource: UINT): UINT; external 'USER';
832
833procedure LogError(err: UINT; lpInfo: FarPointer); external 'KERNEL';
834procedure LogParamError(err: UINT; lpfn: FARPROC; param: FarPointer); external 'KERNEL';
835
836function GetWinDebugInfo(lpwdi: LPWINDEBUGINFO; flags: UINT): BOOL; external 'KERNEL';
837function SetWinDebugInfo(lpwdi: LPWINDEBUGINFO): BOOL; external 'KERNEL';
838
839procedure DebugOutput(flags: UINT; lpsz: LPCSTR; etc: array of const); cdecl; external 'KERNEL' name '_DebugOutput';
840
841function ExitWindowsExec(Exe, Params: LPCSTR): BOOL; external 'USER';
842
843
844{ Pointer validation }
845
846function IsBadReadPtr(lp: FarPointer; cb: UINT): BOOL; external 'KERNEL';
847function IsBadWritePtr(lp: FarPointer; cb: UINT): BOOL; external 'KERNEL';
848function IsBadHugeReadPtr(lp: HugePointer; cb: DWORD): BOOL; external 'KERNEL';
849function IsBadHugeReadPtr(lp: FarPointer; cb: DWORD): BOOL; external 'KERNEL';
850function IsBadHugeWritePtr(lp: HugePointer; cb: DWORD): BOOL; external 'KERNEL';
851function IsBadHugeWritePtr(lp: FarPointer; cb: DWORD): BOOL; external 'KERNEL';
852function IsBadCodePtr(lpfn: FARPROC): BOOL; external 'KERNEL';
853function IsBadStringPtr(lpsz: LPSTR; cchMax: UINT): BOOL; external 'KERNEL';
854
855{ Task Management }
856
857function IsTask(Task: HTASK): BOOL; external 'KERNEL';
858
859{ File I/O }
860
861function _hread(FileHandle: HFILE; Buffer: HugePointer; Bytes: LongInt): LongInt; external 'KERNEL';
862function _hwrite(FileHandle: HFILE; Buffer: HugePointer; Bytes: LongInt): LongInt; external 'KERNEL';
863
864{ International & Char Translation Support }
865
866function lstrcpyn(lpszString1: LPSTR; lpszString2: LPCSTR; cChars: SmallInt): LPSTR; external 'KERNEL';
867procedure hmemcpy(hpvDest, hpvSource: HugePointer; cbCopy: LongInt); external 'KERNEL';
868procedure hmemcpy(hpvDest, hpvSource: FarPointer; cbCopy: LongInt); external 'KERNEL';
869
870function IsDBCSLeadByte(bTestChar: BYTE): BOOL; external 'KERNEL';
871
872{ Drawing bounds accumulation APIs }
873function SetBoundsRect(hDC: HDC; lprcBounds: LPRECT; flags: UINT): UINT; external 'GDI';
874function GetBoundsRect(hDC: HDC; lprcBounds: LPRECT; flags: UINT): UINT; external 'GDI';
875{$ifdef VAR_PARAMS_ARE_FAR}
876function SetBoundsRect(hDC: HDC; const lprcBounds: RECT; flags: UINT): UINT; external 'GDI';
877function GetBoundsRect(hDC: HDC; var lprcBounds: RECT; flags: UINT): UINT; external 'GDI';
878{$endif}
879
880{ Coordinate transformation support }
881function SetWindowOrgEx(hdc: HDC; nX, nY: SmallInt; lpPoint: LPPOINT): BOOL; external 'GDI';
882function GetWindowOrgEx(hdc: HDC; lpPoint: LPPOINT): BOOL; external 'GDI';
883
884function SetWindowExtEx(hdc: HDC; nX, nY: SmallInt; lpSize: LPSIZE): BOOL; external 'GDI';
885function GetWindowExtEx(hdc: HDC; lpSize: LPSIZE): BOOL; external 'GDI';
886
887function OffsetWindowOrgEx(hdc: HDC; nX, nY: SmallInt; lpPoint: LPPOINT): BOOL; external 'GDI';
888function ScaleWindowExtEx(hdc: HDC; nXnum, nXdenom, nYnum, nYdenom: SmallInt; lpSize: LPSIZE): BOOL; external 'GDI';
889
890function SetViewportExtEx(hdc: HDC; nX, nY: SmallInt; lpSize: LPSIZE): BOOL; external 'GDI';
891function GetViewportExtEx(hdc: HDC; lpSize: LPSIZE): BOOL; external 'GDI';
892
893function SetViewportOrgEx(hdc: HDC; nX, nY: SmallInt; lpPoint: LPPOINT): BOOL; external 'GDI';
894function GetViewportOrgEx(hdc: HDC; lpPoint: LPPOINT): BOOL; external 'GDI';
895
896function OffsetViewportOrgEx(hdc: HDC; nX, nY: SmallInt; lpPoint: LPPOINT): BOOL; external 'GDI';
897function ScaleViewportExtEx(hdc: HDC; nXnum, nXdenom, nYnum, nYdenom: SmallInt; lpSize: LPSIZE): BOOL; external 'GDI';
898
899{ Brush support }
900function GetBrushOrgEx(hDC: HDC; lpPoint: LPPOINT): BOOL; external 'GDI';
901
902{ General drawing support }
903function MoveToEx(hdc: HDC; x, y: SmallInt; lpPoint: LPPOINT): BOOL; external 'GDI';
904function GetCurrentPositionEx(hdc: HDC; lpPoint: LPPOINT): BOOL; external 'GDI';
905
906{ Text support }
907function GetTextExtentPoint(hdc: HDC; lpszString: LPCSTR; cbString: SmallInt; lpSize: LPSIZE): BOOL; external 'GDI';
908{$ifdef VAR_PARAMS_ARE_FAR}
909function GetTextExtentPoint(hdc: HDC; lpszString: LPCSTR; cbString: SmallInt; var Size: SIZE): BOOL; external 'GDI';
910{$endif}
911
912{ Font support }
913function GetAspectRatioFilterEx(hdc: HDC; lpAspectRatio: LPSIZE): BOOL; external 'GDI';
914
915function GetOutlineTextMetrics(hdc: HDC; cbData: UINT; lpotm: LPOUTLINETEXTMETRIC): WORD; external 'GDI';
916
917function EnumFontFamilies(hdc: HDC; lpszFamily: LPCSTR; fntenmprc: FONTENUMPROC; lParam: LPARAM): SmallInt; external 'GDI';
918function EnumFontFamilies(hdc: HDC; lpszFamily: LPCSTR; fntenmprc: TFarProc; lParam: LPARAM): SmallInt; external 'GDI';
919
920function GetFontData(hdc: HDC; dwTable, dwOffset: DWORD; lpvBuffer: FarPointer; cbData: DWORD): DWORD; external 'GDI';
921function CreateScalableFontResource(fHidden: UINT; lpszResourceFile, lpszFontFile, lpszCurrentPath: LPCSTR): BOOL; external 'GDI';
922
923function GetGlyphOutline(hdc: HDC; uChar, fuFormat: UINT; lpgm: LPGLYPHMETRICS; cbBuffer: DWORD; lpBuffer: FarPointer; lpmat2: LPMAT2): DWORD; external 'GDI';
924{$ifdef VAR_PARAMS_ARE_FAR}
925function GetGlyphOutline(hdc: HDC; uChar, fuFormat: UINT; var gm: GLYPHMETRICS; cbBuffer: DWORD; lpBuffer: FarPointer; var mat2: MAT2): DWORD; external 'GDI';
926{$endif}
927
928function GetCharABCWidths(hdc: HDC; uFirstChar, uLastChar: UINT; lpabc: LPABC): BOOL; external 'GDI';
929{$ifdef VAR_PARAMS_ARE_FAR}
930function GetCharABCWidths(hdc: HDC; uFirstChar, uLastChar: UINT; var abc: ABC): BOOL; external 'GDI';
931{$endif}
932
933function GetKerningPairs(hdc: HDC; cPairs: SmallInt; lpkrnpair: LPKERNINGPAIR): SmallInt; external 'GDI';
934
935function GetRasterizerCaps(lpraststat: LPRASTERIZER_STATUS; cb: SmallInt): BOOL; external 'GDI';
936{$ifdef VAR_PARAMS_ARE_FAR}
937function GetRasterizerCaps(var raststat: RASTERIZER_STATUS; cb: SmallInt): BOOL; external 'GDI';
938{$endif}
939
940{ Bitmap support }
941function SetBitmapDimensionEx(hbm: HBITMAP; nX, nY: SmallInt; lpSize: LPSIZE): BOOL; external 'GDI';
942function GetBitmapDimensionEx(hBitmap: HBITMAP; lpDimension: LPSIZE): BOOL; external 'GDI';
943
944{ Metafile support }
945function SetMetaFileBitsBetter(hmf: HGLOBAL): HMETAFILE; external 'GDI';
946
947{ Printing support }
948function StartDoc(hdc: HDC; lpdi: LPDOCINFO): SmallInt; external 'GDI';
949{$ifdef VAR_PARAMS_ARE_FAR}
950function StartDoc(hdc: HDC; var di: DOCINFO): SmallInt; external 'GDI';
951{$endif}
952function StartPage(hdc: HDC): SmallInt; external 'GDI';
953function EndPage(hdc: HDC): SmallInt; external 'GDI';
954function EndDoc(hdc: HDC): SmallInt; external 'GDI';
955function AbortDoc(hdc: HDC): SmallInt; external 'GDI';
956
957function SetAbortProc(hdc: HDC; abrtprc: ABORTPROC): SmallInt; external 'GDI';
958function SpoolFile(lpszPrinter, lpszPort, lpszJob, lpszFile: LPSTR): HANDLE; external 'GDI';
959
960{ System Parameters support }
961function SystemParametersInfo(uAction, uParam: UINT; lpvParam: FarPointer; fuWinIni: UINT): BOOL; external 'USER';
962
963{ Rectangle support }
964function SubtractRect(lprcDest: LPRECT; lprcSource1, lprcSource2: LPRECT): BOOL; external 'USER';
965{$ifdef VAR_PARAMS_ARE_FAR}
966function SubtractRect(var rcDest: RECT; var rcSource1, rcSource2: RECT): BOOL; external 'USER';
967{$endif}
968
969{ Window message support }
970function GetMessageExtraInfo: LPARAM; external 'USER';
971function GetQueueStatus(flags: UINT): DWORD; external 'USER';
972
973{ Window class management }
974{ in Windows 3.1+, RegisterClass returns an ATOM that unquely identifies the
975  class. In Windows 3.0 and earlier, the return value is BOOL. That's why we
976  redefine this function in the win31 unit. }
977function RegisterClass(lpwc: LPWNDCLASS): ATOM; external 'USER';
978{$ifdef VAR_PARAMS_ARE_FAR}
979function RegisterClass(var wc: WNDCLASS): ATOM; external 'USER';
980{$endif}
981
982{ Window size, position, Z-order, and visibility }
983function GetWindowPlacement(hwnd: HWND; lpwndpl: LPWINDOWPLACEMENT): BOOL; external 'USER';
984function SetWindowPlacement(hwnd: HWND; lpwndpl: LPWINDOWPLACEMENT): BOOL; external 'USER';
985
986{ Window coordinate mapping and hit-testing }
987
988procedure MapWindowPoints(hwndFrom, hwndTo: HWND; lppt: LPPOINT; cpt: UINT); external 'USER';
989{$ifdef VAR_PARAMS_ARE_FAR}
990procedure MapWindowPoints(hwndFrom, hwndTo: HWND; var pt: POINT; cpt: UINT); external 'USER';
991{$endif}
992
993{ Window drawing support }
994{ note: the first parameter in this function is declared 'register' in windows.h, even though
995        the calling convention of the function is 'pascal'
996  todo: figure out whether the first parameter really needs to be passed in register, or
997        whether the 'register' modifier is ignored by 16-bit C compilers, when the calling
998        convention is 'pascal'.
999 }
1000function GetDCEx({register} hwnd: HWND; hrgnClip: HRGN; flags: DWORD): HDC; external 'USER';
1001
1002{ Window repainting }
1003function LockWindowUpdate(hwndLock: HWND): BOOL; external 'USER';
1004function RedrawWindow(hwnd: HWND; lprcUpdate: LPRECT; hrgnUpdate: HRGN; flags: UINT): BOOL; external 'USER';
1005
1006{ Window scrolling }
1007function ScrollWindowEx(hwnd: HWND; dx, dy: SmallInt;
1008          prcScroll, prcClip: LPRECT;
1009          hrgnUpdate: HRGN; prcUpdate: LPRECT; flags: UINT): SmallInt; external 'USER';
1010
1011{ Menu support }
1012function IsMenu(hmenu: HMENU): BOOL; external 'USER';
1013
1014{ Scroll bar support }
1015function EnableScrollBar(hwnd: HWND; fnSBFlags: SmallInt; fuArrowFlags: UINT): BOOL; external 'USER';
1016
1017{ Clipboard Manager Functions }
1018function GetOpenClipboardWindow: HWND; external 'USER';
1019
1020{ Mouse cursor support }
1021function CopyCursor(hinst: HINST; hcur: HCURSOR): HCURSOR; external 'USER';
1022function GetCursor: HCURSOR; external 'USER';
1023procedure GetClipCursor(lprc: LPRECT); external 'USER';
1024{$ifdef VAR_PARAMS_ARE_FAR}
1025procedure GetClipCursor(var rc: RECT); external 'USER';
1026{$endif}
1027
1028{ Icon support }
1029function CopyIcon(hinst: HINST; hicon: HICON): HICON; external 'USER';
1030
1031{ Dialog directory support }
1032function DlgDirSelectEx(hwndDlg: HWND; lpszPath: LPSTR; cbPath, idListBox: SmallInt): BOOL; external 'USER';
1033function DlgDirSelectComboBoxEx(hwndDlg: HWND; lpszPath: LPSTR; cbPath, idComboBox: SmallInt): BOOL; external 'USER';
1034
1035{ Windows hook support }
1036function SetWindowsHookEx(idHook: SmallInt; lpfn: HOOKPROC; hInstance: HINST; hTask: HTASK): HHOOK; external 'USER';
1037function UnhookWindowsHookEx(hHook: HHOOK): BOOL; external 'USER';
1038function CallNextHookEx(hHook: HHOOK; code: SmallInt; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'USER';
1039
1040{ Debugger support }
1041function QuerySendMessage(h1, h2, h3: HANDLE; lpmsg: LPMSG): BOOL; external 'USER';
1042function LockInput(h1: HANDLE; hwndInput: HWND; fLock: BOOL): BOOL; external 'USER';
1043function GetSystemDebugState: LONG; external 'USER';
1044
1045{ Comm support }
1046function EnableCommNotification(idComDev: SmallInt; hwnd: HWND; cbWriteNotify, cbOutQueue: SmallInt): BOOL; external 'USER';
1047
1048{ Driver support }
1049function DefDriverProc(dwDriverIdentifier: DWORD; driverID: HDRVR; message: UINT; lParam1, lParam2: LPARAM): LRESULT; external 'USER';
1050function OpenDriver(szDriverName, szSectionName: LPCSTR; lParam2: LPARAM): HDRVR; external 'USER';
1051function CloseDriver(hDriver: HDRVR; lParam1, lParam2: LPARAM): LRESULT; external 'USER';
1052function SendDriverMessage(hDriver: HDRVR; message: UINT; lParam1, lParam2: LPARAM): LRESULT; external 'USER';
1053function GetDriverModuleHandle(hDriver: HDRVR): HINST; external 'USER';
1054function GetNextDriver(hdrvr: HDRVR; fdwFlag: DWORD): HDRVR; external 'USER';
1055function GetDriverInfo(hdrvr: HDRVR; lpdis: LPDRIVERINFOSTRUCT): BOOL; external 'USER';
1056
1057implementation
1058
1059end.
1060