Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here are a bunch of routines I have written in my libary. If you pass a pdf file as parameter to <strong>PrintUsingShell</strong> it should print if a Acrobat reader program has been installed (might work with other pdf-software too if they registered themselfs in the registry).</p> <pre><code> PrintUsingShell( x ); procedure PrintUsingShell( psFileName :string); var s : string; i : integer; begin if not FileExists(psFileName) then Exit; s := FindShellPrintCmd( ExtractFileExt(psFileName) ); i := Pos('%1',s); if i &gt; 0 then begin System.Delete(s,i,2); System.Insert(psFileName,s,i); Execute(s); end; end; function FindShellCmd(psExtension:string;psCmd:string): string; var r : TRegistry; sName : string; begin psExtension := Trim(psExtension); if psExtension = '' then begin Result := ''; Exit; end; psCmd := Trim(psCmd); if psCmd = '' then psCmd := 'OPEN' else psCmd := UpperCase(psCmd); if psExtension[1] &lt;&gt; '.' then psExtension := '.' + psExtension; r := TRegistry.Create(KEY_READ); try r.RootKey := HKEY_LOCAL_MACHINE; r.OpenKeyReadOnly('software\classes\' + psExtension); sName := r.ReadString(''); r.CloseKey(); r.OpenKeyReadOnly('software\classes\' + sName + '\Shell\' + psCmd + '\Command'); Result := r.ReadString(''); r.CloseKey(); finally FreeAndNil(r); end; end; function FindShellOpenCmd(psExtension:string):string; begin Result := FindShellCmd(psExtension,'OPEN'); end; function FindShellPrintCmd(psExtension:string):string; begin Result := FindShellCmd(psExtension,'PRINT'); end; {$ifdef windows} function LocalExecute( psExeName:string ; wait:boolean ; how:word):word; var i : integer; prog,parm:string; msg:TMsg; rc : word; begin i := pos(psExeName,' '); if i = 0 then begin prog := psExeName; parm := ''; end else begin prog := copy( psExeName,1,i-1); parm := copy( psExeName,i+1,255); end; if pos(prog,'.') &lt;&gt; 0 then prog := prog + '.exe'; psExeName := prog + ' ' + parm + #0; rc := WinExec( @psExeName[1] , how ); if wait then begin if (rc &gt; 32) then begin repeat if PeekMessage(Msg,0,0,0,PM_REMOVE) then begin TranslateMessage(Msg); DispatchMessage(Msg); end; until (GetModuleUsage(rc) = 0) end; end; end; { LocalExecute } {$endif} {$ifdef win32} function LocalExecute32(FileName:String; Wait:boolean; Visibility : integer; lWaitFor:Cardinal=INFINITE):integer; var zAppName:array[0..512] of char; zCurDir:array[0..255] of char; WorkDir:String; StartupInfo:TStartupInfo; ProcessInfo:TProcessInformation; begin StrPCopy(zAppName,FileName); GetDir(0,WorkDir); StrPCopy(zCurDir,WorkDir); FillChar(StartupInfo,Sizeof(StartupInfo),#0); StartupInfo.cb := Sizeof(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; if not CreateProcess(nil, zAppName, { pointer to command line string } nil, { pointer to process security attributes } nil, { pointer to thread security attributes } false, { handle inheritance flag } CREATE_NEW_CONSOLE or { creation flags } NORMAL_PRIORITY_CLASS, nil, { pointer to new environment block } nil, { pointer to current directory name } StartupInfo, { pointer to STARTUPINFO } ProcessInfo) { pointer to PROCESS_INF } then Result := -1 else begin if Wait then begin Result := WaitforSingleObject(ProcessInfo.hProcess,lWaitFor); GetExitCodeProcess(ProcessInfo.hProcess,LongWord(Result)); end; end; end; {$endif} function Execute( psExeName:string):integer; begin {$ifdef windows} result := LocalExecute(psExeName, false , SW_SHOW); {$endif} {$ifdef win32} result := LocalExecute32(psExeName, false , SW_SHOW); {$endif} end; </code></pre> <p>Note: please try these out on your Delphi version and Operating system (I have developed them under Delphi 7 and used them under Windows XP).</p> <p>If you want native printing (without Acrobat reader installed - but who hasn't installed Acrobat Reader these days?) you might consider the following component set: <a href="http://www.wpcubed.com/products/pdfviewer/pdfprint/index.htm" rel="noreferrer">Pdft print components from WpCubed</a>.</p> <p><strong>UPDATE</strong></p> <p>Upon request I added the Execute function from my library ...</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload