- Details
- Written by: Stanko Milosev
- Category: Delphi
- Hits: 4928
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: 6033
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>'
- Details
- Written by: Stanko Milosev
- Category: Delphi
- Hits: 4429
If you are having problems after you installed components, like:
File not found *.dcu, or *.pas, try adding path to Tools->Options->Library - Win32 -> Library path
- Details
- Written by: Stanko Milosev
- Category: Delphi
- Hits: 5587
Now, little bit about MAPI.
According to wikipedia MAPI is designed to be independent of the protocol, it is usually used with MAPI/RPC, the proprietary protocol that Microsoft Outlook uses to communicate with Microsoft Exchange. So, I read this like MAPI is a protocol.
To use MAPI you will need MS Outlook MS Exchange or MS Exchange client, which you can download from here, installed on machine.
There are two kind of MAPI, simple MAPI and extended MAPI.
According to Microsoft most of functions of simple MAPI are deprecated, so I focus here on extended MAPI.
Again, according to Microsoft exended MAPI can be difficult to learn.
For Delphi you can use Easier Extended MAPI, like it is described here, but that was also too difficult to learn, too much time I will need, so I found RapWare Easy MAPI components, which completely satisfy me.I don't think that I need to write too much about them, since they have very good examples about everything.