- Details
- Written by: Stanko Milosev
- Category: Delphi
- Hits: 4596
If you need something to do before build or after build in Project->Options go on Build events.
In my case I needed to compile resource file to add one exeso for sure is always there (mostly because of CVS and other developers).
Syntax is something like this:
call "res\pdftotext.bat"
if %errorlevel% neq 0 exit %errorlevel%
- Details
- Written by: Stanko Milosev
- Category: Delphi
- Hits: 5094
How to check if acrobat reader exist?
ShLwApi,
Windows;
var
Size: dword;
Data: array[0..MAX_PATH] of char;
begin
size := max_path;
if not (Succeeded(AssocQueryString(0,
ASSOCSTR_FRIENDLYDOCNAME,
PChar('.pdf'), nil, @Data, @Size)) and (Size>0)) then
begin
ShowMessage('Not installed.');
end;
end
You can import PDF dokument in Delphi as ActiveX control as it is described here.
To copy data from PDF, you can use this code:
procedure CopyPDF2Clpbrd;
begin
ocxPdf.SetFocus;
Application.ProcessMessages;
Sleep(1000);
PostKeyEx32(Ord('A') , [ssCtrl], False) ;
Application.ProcessMessages;
Sleep(1000);
PostKeyEx32(Ord('C') , [ssCtrl], False) ;
Application.ProcessMessages;
Sleep(1000);
end;
procedure PostKeyEx32(key: Word; const shift: TShiftState;
specialkey: Boolean) ;
{
Parameters :
* key : virtual keycode of the key to send.
For printable keys this is simply the ANSI code (Ord(character)) .
* shift : state of the modifier keys.
This is a set, so you can set several of these keys
(shift, control, alt, mouse buttons) in tandem.
The TShiftState type is declared in the Classes Unit.
* specialkey: normally this should be False.
Set it to True to specify a key on the numeric keypad, for example.
Description:
Uses keybd_event to manufacture a series of key
events matching the passed parameters.
The events go to the control with focus.
Note that for characters key is always the upper-case
version of the character.
Sending without any modifier keys
will result in a lower-case character,
sending it with [ ssShift ] will result in an upper-case character!
}
type
TShiftKeyInfo = record
shift: Byte ;
vkey: Byte ;
end;
ByteSet = set of 0..7 ;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl) ; vkey: VK_CONTROL),
(shift: Ord(ssShift) ; vkey: VK_SHIFT),
(shift: Ord(ssAlt) ; vkey: VK_MENU)) ;
var
flag: DWORD;
bShift: ByteSet absolute shift;
j: Integer;
begin
for j := 1 to 3 do
begin
if shiftkeys[j].shift in bShift then
keybd_event(shiftkeys[j].vkey,
MapVirtualKey(shiftkeys[j].vkey, 0), 0, 0) ;
end;
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;
for j := 3 downto 1 do
begin
if shiftkeys[j].shift in bShift then
keybd_event(shiftkeys[j].vkey,
MapVirtualKey(shiftkeys[j].vkey, 0), KEYEVENTF_KEYUP, 0) ;
end;
end;
Where PostKeyEx32 procedure is taken from here.
- Details
- Written by: Stanko Milosev
- Category: Delphi
- Hits: 6157
How to parse delimited text?
Easy:
varsl: TStringList;
begin
try
sl := TStringList.Create;
sl.StrictDelimiter := True;
sl.Delimiter := '';<br /> sl.DelimitedText := 'ARR35YXCAPE FALSTER0913SIKOPTMKoper2009-02-28 01.00.00E2MSL3';<br /> ShowMessage(sl.Text);<br /> finally<br /> FreeAndNil(sl);<br /> end;<br />end;</p>'