[fpc-pascal] Windows programming tutorials for FPC

Ewald ewald at yellowcouch.org
Sun Nov 4 14:06:08 CET 2018


On 11/03/2018 09:04 PM, James wrote:
> So my question is, how can I use Ifilesavedialog with just FreePascal in
> a console application? 

First off, the IFileSaveDialog is an interface, not a simple function.
So, you'll need to:
	- Include the right units from freepascal (ActiveX and comobj
           IIRC)
	- Initialize and finalize the COM subsystem (see CoInitialize
           and CoUninitialize)
	- Use the CoCreateInstance to instantiate an IFileSaveDialog,
           etc.. I've never used the IFileSaveDialog myself, so have a
           look at
https://msdn.microsoft.com/en-us/library/windows/desktop/bb776913%28v=vs.85%29.aspx#usage

That's the nice thing about the GetSaveFileNameA function: one call, and
you're done :-)

Now, if this function is not defined in the windows unit (which could be
the case), you can either look into some other units or simply define it
yourself:

=== code begin ===
Type
	TOpenFileNameAHookProc = function(Wnd: HWND; Msg: UINT; wParam: WPARAM;
lParam: LPARAM): UINT stdcall;

	TOpenFileNameA = Packed Record
		lStructSize: DWord;
		hWndOwner: HWND;
		hInstance: HINST;
		lpstrFilter: PChar;
		lpstrCustomFilter: PChar;
		nMaxCustFilter: DWord;
		nFilterIndex: DWord;
		lpstrFile: PChar;
		nMaxFile: DWord;
		lpstrFileTitle: PChar;
		nMaxFileTitle: DWord;
		lpstrInitialDir: PChar;
		lpstrTitle: PChar;
		Flags: DWord;
		nFileOffset: Word;
		nFileExtension: Word;
		lpstrDefExt: PChar;
		lCustData: LPARAM;
		lpfnHook: TOpenFileNameAHookProc;
		lpTemplateName: PChar;
		lpEditInfo: Pointer;		// Undocumented?
		lpstrPrompt: PChar;
		_Reserved1: Pointer;
		_Reserved2: DWord;
		FlagsEx: DWord;
	End;
	POpenFileNameA = ^TOpenFileNameA;

Function GetSaveFileNameA(arg: POpenFileNameA): windows.bool; stdcall;
external 'comdlg32' name 'GetSaveFileNameA';
=== code end ===


-- 
Ewald



More information about the fpc-pascal mailing list