home *** CD-ROM | disk | FTP | other *** search
- {************************************************}
- { }
- { Turbo Pascal for Windows }
- { Demo program }
- { Copyright (c) 1991 by Borland International }
- { Changes for demonstration of ChooseColor }
- { and ChooseFont are made by Martin H. Speiser }
- { }
- {************************************************}
-
- { "ColDem" Windows application written in Turbo Pascal }
-
- program ColDem;
-
- {$R COLDEM}
-
- uses WinTypes, WinProcs, Strings, Win31, CommDlg;
-
- const
- AppName = 'ColDem';
-
- const
- idm_Color = 100;
- idm_Font = 102;
- idm_About = 101;
-
- idd_StaticControl = 1040;
- idd_EditControl = 1041;
-
- function About(Dialog: HWnd; Message, WParam: Word;
- LParam: Longint): Bool; export;
- begin
- About := True;
- case Message of
- wm_InitDialog:
- Exit;
- wm_Command:
- if (WParam = id_Ok) or (WParam = id_Cancel) then
- begin
- EndDialog(Dialog, 1);
- Exit;
- end;
- end;
- About := False;
- end;
-
- function ColorHookProc(HDialog: HWnd; Message, WParam: Word;
- LParam: Longint): Bool; export;
- begin
- ColorHookProc := True;
- case Message of
- wm_InitDialog : begin
- SetWindowText(GetDlgItem(HDialog,idd_EditControl),PChar(PChooseColor(LParam)^.lCustData));
- SendMessage(GetDlgItem(HDialog,idd_EditControl),em_LimitText,30,0);
- {SetFocus(GetDlgItem(HDialog,idd_EditControl));}
- exit;
- end
- end;
- ColorHookProc := False;
- end;
-
- function WindowProc(Window: HWnd; Message, WParam: Word;
- LParam: Longint): Longint; export;
- var AboutProc : TFarProc;
- hDisplay : HDC;
- ps : TPaintStruct;
- rc : TRect;
- cc : TChooseColor;
- cf : TChooseFont;
- lf : TLogFont;
- CustCol : array[0..15] of longint;
- HookProc : TFarProc;
- szText : array[0..30] of char;
- lpszText : PChar;
- begin
- WindowProc := 0;
- case Message of
- wm_Command : case WParam of
- idm_Color : begin
- lpszText := @szText;
- StrPCopy(lpszText,'Hello World');
- HookProc := MakeProcInstance(@ColorHookProc,HInstance);
- cc.lStructSize := SizeOf(cc);
- { Size of Record, for possible extensions in the future }
- cc.hWndOwner := Window;
- { Handle of Parent }
- cc.hInstance := HInstance;
- { Instance handle, only necessary for template }
- cc.rgbResult := RGB(255,255,255);
- { Default color at input, choosen color on exit }
- cc.lpCustColors := @CustCol;
- { Definition of custom colors at exit }
- cc.Flags := cc_RGBInit or
- cc_EnableHook or
- cc_EnableTemplate;
- { see COMMDLG.PAS for possible values }
- cc.lCustData := Longint(lpszText);
- { Pointer to custom data for hook function }
- cc.lpfnHook := HookProc;
- { Pointer to hook function }
- cc.lpTemplateName := 'ChooseColor';
- { Name of Template }
- ChooseColor(cc);
- FreeProcInstance(HookProc);
- end;
- idm_Font : begin
- cf.lStructSize := SizeOf(cf);
- { Size of Record, purpose see above }
- cf.hwndOwner := Window;
- cf.lpLogFont := @lf;
- { Handle of parent window }
- cf.Flags := cf_Effects or
- cf_ScreenFonts or
- cf_TTOnly or
- cf_EnableTemplate;
- { see COMMDLG.PAS for possible values }
- cf.rgbColors := RGB(0,0,0);
- { Default color at input, choosen color on exit }
- cf.lpTemplateName := 'FontDialog';
- cf.hInstance := HInstance;
- cf.nFontType := TrueType_Fonttype;
- ChooseFont(cf);
- end;
- idm_About : begin
- AboutProc := MakeProcInstance(@About, HInstance);
- DialogBox(HInstance, 'AboutBox', Window, AboutProc);
- FreeProcInstance(AboutProc);
- Exit;
- end;
- end;
- wm_Destroy : begin
- PostQuitMessage(0);
- Exit;
- end;
- end;
- WindowProc := DefWindowProc(Window, Message, WParam, LParam);
- end;
-
- procedure WinMain;
- var
- Window: HWnd;
- Message: TMsg;
- const
- WindowClass: TWndClass = (
- style: 0;
- lpfnWndProc: @WindowProc;
- cbClsExtra: 0;
- cbWndExtra: 0;
- hInstance: 0;
- hIcon: 0;
- hCursor: 0;
- hbrBackground: 0;
- lpszMenuName: AppName;
- lpszClassName: AppName);
- begin
- if HPrevInst = 0 then
- begin
- WindowClass.hInstance := HInstance;
- WindowClass.hIcon := LoadIcon(0, idi_Application);
- WindowClass.hCursor := LoadCursor(0, idc_Arrow);
- WindowClass.hbrBackground := GetStockObject(white_Brush);
- if not RegisterClass(WindowClass) then Halt(255);
- end;
- Window := CreateWindow(
- AppName,
- 'Turbo Pascal ChooseColor Demo',
- ws_OverlappedWindow,
- cw_UseDefault,
- cw_UseDefault,
- cw_UseDefault,
- cw_UseDefault,
- 0,
- 0,
- HInstance,
- nil);
- ShowWindow(Window, CmdShow);
- UpdateWindow(Window);
- while GetMessage(Message, 0, 0, 0) do
- begin
- TranslateMessage(Message);
- DispatchMessage(Message);
- end;
- Halt(Message.wParam);
- end;
-
- begin
- WinMain;
- end.
-