<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The Delphi Expert</title>
	<atom:link href="http://delphiexpert.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://delphiexpert.wordpress.com</link>
	<description>Rapid Application Development</description>
	<lastBuildDate>Sat, 05 Sep 2009 05:34:49 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='delphiexpert.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/5a7660139b3c24bf647113d2ca57d2df?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>The Delphi Expert</title>
		<link>http://delphiexpert.wordpress.com</link>
	</image>
			<item>
		<title>KSpoold Disinfector 1.0 &#8211; Freeware</title>
		<link>http://delphiexpert.wordpress.com/2007/07/19/kspoold-disinfector-10-freeware/</link>
		<comments>http://delphiexpert.wordpress.com/2007/07/19/kspoold-disinfector-10-freeware/#comments</comments>
		<pubDate>Thu, 19 Jul 2007 06:30:21 +0000</pubDate>
		<dc:creator>DelphiExpert</dc:creator>
				<category><![CDATA[Freeware]]></category>

		<guid isPermaLink="false">http://delphiexpert.wordpress.com/2007/07/19/kspoold-disinfector-10-freeware/</guid>
		<description><![CDATA[KSpoold Disinfector 1.0 &#8211; Freeware
Copyright © Indra Gunawan, 2ind@mail.com
www.delphiexpert.wordpress.com
KSpoold Disinfector is a software that writen to restore Microsoft
Office files (Word, Excel, PPT etc.) from damaged file because of KSpoold virus.
KSpoold infect the docs files by mergeing these docs to the virus file,
original docs files will be delete &#38; new file with the same name will [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=19&subd=delphiexpert&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>KSpoold Disinfector 1.0 &#8211; Freeware<br />
Copyright © Indra Gunawan, <a href="mailto:2ind@mail.com">2ind@mail.com</a><br />
<a href="http://www.delphiexpert.wordpress.com/">www.delphiexpert.wordpress.com</a></p>
<p>KSpoold Disinfector is a software that writen to restore Microsoft<br />
Office files (Word, Excel, PPT etc.) from damaged file because of KSpoold virus.</p>
<p>KSpoold infect the docs files by mergeing these docs to the virus file,<br />
original docs files will be delete &amp; new file with the same name will be added<br />
to cheating the users with new file extention: .EXE<br />
So anytime you double click this infected file from explorer / open it using<br />
shell api your computer will be infected too.</p>
<p>The software is provided &#8220;as-is,&#8221; without any express or implied warranty.<br />
In no event shall the Author be held liable for any damages arising from<br />
the use of the Software</p>
<p>The software is writen in Borland Delphi 7.<br />
Full source-code also provided, any comments are noted of the following:</p>
<p><em>&#8220;The const SAMPLE_SIZE = 524; is taken from the following figure:</em></p>
<p><em>Microsoft Word &amp; Excel using the same file header at the first 512,<br />
so we get unique header at the first 12 byte after 512 offset<br />
512 + 12 = 524 &#8211;&gt; it&#8217;s my lucky number <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  &#8220;</em></p>
<p>You can download sample of infected file by KSpoold here:<br />
<a href="http://delphi-id.org/dpr/Downloads-index-req-viewdownloaddetails-lid-180.pas">http://delphi-id.org/dpr/Downloads-index-req-viewdownloaddetails-lid-180.pas</a></p>
<p>And the complete source &amp; compiled program:</p>
<table style="background-color:#5D7CBA;color:#0;font-family:Arial, Helvetica, sans-serif;font-size:11px;border-color:#353535;border-style:solid;border-width:1px;padding:0;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr style="background-color:#FFFFFF;">
<td style="padding:5px;" align="center"><a href="http://www.esnips.com/doc/1dccf84d-01fd-4cf6-a4a9-eab1faacaffe/kspoold-disinfector/?widget=documentIcon"><img title="click to Viewkspoold-disinfector" src="/images/thumbs/any.gif" border="0" alt="kspoold-disinfector" /></a></td>
</tr>
<tr style="background-color:#FFFFFF;">
<td style="padding:5px;" align="center"><strong><a style="color:#333333;" href="http://www.esnips.com/doc/1dccf84d-01fd-4cf6-a4a9-eab1faacaffe/kspoold-disinfector/?widget=documentIcon">kspoold-disinfecto&#8230;</a></strong></td>
</tr>
<tr>
<td style="font-size:9px;color:#FFFFFF;padding:5px;" valign="bottom">Hosted by <a style="color:#FFFFFF;" href="http://www.esnips.com">eSnips</a></td>
</tr>
</tbody>
</table>
<p><span id="more-19"></span>Any comments are welcome. Please send me the copy if you&#8217;re make modification <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
TODO: &#8211; Batch directory processing (may one of you would be completing this todo?)</p>
<p>Code class snap-shot:</p>
<blockquote><p><span style="font-family:&quot;font-size:small;"><!--StartFragment--></span></p>
<pre><code><span style="color:#000000;"><strong>unit </strong>MainUnit;  </span></code>
<code><span style="color:#000000;"><strong>interface  </strong></span></code>
<code><span style="color:#000000;"><strong> </strong><span style="color:#808000;"><em>{ KSpoold Disinfector 1.0 - Freeware
  Copyright © Indra Gunawan, 2ind@mail.com   www.delphiexpert.wordpress.com
  LICENSE   ---------------------------------------------------------------------------
  Use and distribution of the library is permitted provided that all of   the following terms are accepted:    The software is provided "as-is," without any express or implied warranty.   In no event shall the Author be held liable for any damages arising from   the use of the Software.    All redistributions of the library files must be in their original,   unmodified form. Distributions of modified versions of the files is   permitted with express written permission of the Indra.   All redistributions of the library files must retain all   copyright notices and web site addresses that are currently in place,   and must include this list of conditions without modification.    None of the library may be redistributed for profit or as part of   another software package without express written permission of the Indra.   Redistribution of any of the component files in object form   (including but not limited to .PAS, .DCU and .OBJ formats)   is strictly prohibited without express written permission of the Indra.   --------------------------------------------------------------------------- }  </em></span><strong>uses   </strong>Windows, Messages, Classes, SysUtils, Controls, Forms,   Dialogs, StdCtrls;  <strong>const   </strong>SAMPLE_SIZE = <span style="color:#0000aa;">524</span>;    <span style="color:#808000;"><em>{ Microsoft Word &amp; Excel using the same file header at the first 512,     so we get unique header at the first 12 byte after 512 offset     512 + 12 = 524 --&gt; it's my lucky number <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />       You can download sample of infected file by KSpoold here:     http://delphi-id.org/dpr/Downloads-index-req-viewdownloaddetails-lid-180.pas   }  </em></span><strong>type   </strong>IDEPatternRecognizer = <strong>interface   </strong>[<span style="color:#0000aa;">'{9AB98B63-B58E-4D0A-B420-30E6F5E37E46}'</span>]     <strong>function </strong>GetSample(<strong>const </strong>FileName: <strong>WideString</strong>; <strong>out </strong>Sample: Pointer; Size: Integer): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>SetSample(<strong>const </strong>PatternName: <strong>WideString</strong>; <strong>const </strong>Sample: Pointer; <strong>const </strong>Size: Integer): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>RemoveSample(<strong>const </strong>PatternName: <strong>WideString</strong>): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>EnumSamples(<strong>const </strong>Dest: TStrings): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>RestoreInfectedFile(<strong>const </strong>FileName: <strong>WideString</strong>; <strong>var </strong>DestFileName: <strong>string</strong>): HRESULT; <strong>stdcall</strong>;   <strong>end</strong>;    TMainForm = <strong>class</strong>(TForm)     GroupBox1: TGroupBox;     ListBox1: TListBox;     Button1: TButton;     Button2: TButton;     Button3: TButton;     Button4: TButton;     <strong>procedure </strong>Button1Click(Sender: TObject);     <strong>procedure </strong>Button2Click(Sender: TObject);     <strong>procedure </strong>ListBox1Click(Sender: TObject);     <strong>procedure </strong>Button3Click(Sender: TObject);     <strong>procedure </strong>Button4Click(Sender: TObject);   <strong>private     </strong><span style="color:#808000;"><em>{ Private declarations }     </em></span>FDEPR: IDEPatternRecognizer;   <strong>public     </strong><span style="color:#808000;"><em>{ Public declarations }     </em></span><strong>constructor </strong>Create(AOwner: TComponent); <strong>override</strong>;     <strong>destructor </strong>Destroy; <strong>override</strong>;   <strong>end</strong>;    TKSpoolInfPattern = <strong>class</strong>(TInterfacedObject, IDEPatternRecognizer)   <strong>private     </strong>FSamples: TStream;     <strong>function </strong>FindResourceOffset(<strong>const </strong>FileName, Sample: <strong>string</strong>): Int64;   <strong>protected     </strong><span style="color:#808000;"><em>{ IDEPatternRecognizer }     </em></span><strong>function </strong>GetSample(<strong>const </strong>FileName: <strong>WideString</strong>; <strong>out </strong>Sample: Pointer; Size: Integer): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>SetSample(<strong>const </strong>PatternName: <strong>WideString</strong>; <strong>const </strong>Sample: Pointer; <strong>const </strong>Size: Integer): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>RemoveSample(<strong>const </strong>PatternName: <strong>WideString</strong>): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>EnumSamples(<strong>const </strong>Dest: TStrings): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>RestoreInfectedFile(<strong>const </strong>FileName: <strong>WideString</strong>; <strong>var </strong>DestFileName: <strong>string</strong>): HRESULT; <strong>stdcall</strong>;   <strong>public     constructor </strong>Create; <strong>virtual</strong>;     <strong>destructor </strong>Destroy; <strong>override</strong>;   <strong>end</strong>;  <strong>var   </strong>MainForm: TMainForm;  <strong>implementation  uses </strong>IniFiles, Math, ShellApi;  <span style="color:#008000;"><em>{$R *.dfm}  </em></span><span style="color:#808000;"><em>{ TMainForm }  </em></span><strong>constructor </strong>TMainForm.Create(AOwner: TComponent); <strong>begin   inherited</strong>;   FDEPR:= TKSpoolInfPattern.Create;   FDEPR.EnumSamples(ListBox1.Items); <strong>end</strong>;  <strong>destructor </strong>TMainForm.Destroy; <strong>begin   </strong>FDEPR:= <strong>nil</strong>;   <strong>inherited</strong>; <strong>end</strong>;  <strong>procedure </strong>TMainForm.Button1Click(Sender: TObject); <strong>var </strong>Dlg: TOpenDialog;     Buf: Pointer;     PattName: <strong>string</strong>; <strong>begin   </strong>Dlg:= TOpenDialog.Create(<strong>nil</strong>);   <strong>try     </strong>Dlg.Filter:= <span style="color:#0000aa;">'Microsoft Office Files (*.doc; *.xls)|*.doc;*.xls'</span>;     <strong>if </strong>Dlg.Execute <strong>then       if </strong>FDEPR.GetSample(Dlg.FileName, Buf, SAMPLE_SIZE) = S_OK <strong>then       begin         </strong>PattName:= UpperCase(ExtractFileExt(Dlg.FileName));         FDEPR.SetSample(PattName, Buf, SAMPLE_SIZE);         FreeMem(Buf);          ListBox1.Items.Add(PattName);       <strong>end</strong>;   <strong>finally     </strong>Dlg.Free;   <strong>end</strong>; <strong>end</strong>;  <strong>procedure </strong>TMainForm.Button2Click(Sender: TObject); <strong>begin   if </strong>MessageBox(Handle, <span style="color:#0000aa;">'Are you sure?'</span>, <span style="color:#0000aa;">'Confirm'</span>, MB_ICONWARNING <strong>or </strong>MB_YESNO) = mrYes <strong>then   begin     if </strong>FDEPR.RemoveSample(ListBox1.Items[ListBox1.ItemIndex]) = S_OK <strong>then     begin       </strong>ListBox1.DeleteSelected;       ListBox1.OnClick(<strong>nil</strong>);     <strong>end else </strong>MessageBox(Handle, <span style="color:#0000aa;">'Unable delete sample!'</span>, <span style="color:#0000aa;">'Failed'</span>, MB_ICONWARNING <strong>or </strong>MB_OK);   <strong>end</strong>; <strong>end</strong>;  <strong>procedure </strong>TMainForm.ListBox1Click(Sender: TObject); <strong>begin   </strong>Button2.Enabled:= ListBox1.ItemIndex &gt;= <span style="color:#0000aa;">0</span>; <strong>end</strong>;  <strong>procedure </strong>TMainForm.Button3Click(Sender: TObject); <strong>var </strong>Dlg: TOpenDialog;     Dest: <strong>string</strong>; <strong>begin   </strong>Dlg:= TOpenDialog.Create(<strong>nil</strong>);   <strong>try     </strong>Dlg.Filter:= <span style="color:#0000aa;">'Infected File (*.exe)|*.exe'</span>;     <strong>if </strong>Dlg.Execute <strong>then     begin       </strong>Dest:= ChangeFileExt(Dlg.FileName, <span style="color:#0000aa;">'.clean.unk'</span>);       <strong>if </strong>FDEPR.RestoreInfectedFile(Dlg.FileName, Dest) = S_OK <strong>then       begin         if </strong>MessageBox(Handle, <span style="color:#0000aa;">'Succesully disinfecting the file. Open the file now?'</span>, <span style="color:#0000aa;">'Success'</span>, MB_ICONINFORMATION <strong>or </strong>MB_YESNO) = mrYes <strong>then           </strong>ShellExecute(<span style="color:#0000aa;">0</span>, <span style="color:#0000aa;">'open'</span>, PAnsiChar(Dest), <span style="color:#0000aa;">''</span>, <span style="color:#0000aa;">''</span>, SW_SHOW);       <strong>end else </strong>MessageBox(Handle, <span style="color:#0000aa;">'Unable disinfecting file!'</span>, <span style="color:#0000aa;">'Failed'</span>, MB_ICONWARNING <strong>or </strong>MB_OK);     <strong>end</strong>;   <strong>finally     </strong>Dlg.Free;   <strong>end</strong>; <strong>end</strong>;  <strong>procedure </strong>TMainForm.Button4Click(Sender: TObject); <strong>begin   </strong>MessageBox(Handle, <span style="color:#0000aa;">'KSpoold Disinfector 1.0 - Freeware'#13#10#13#10'Copyright © Indra Gunawan, 2ind@mail.com'#13#10'www.delphiexpert.wordpress.com'</span>,   <span style="color:#0000aa;">'About Disinfecter'</span>, MB_ICONINFORMATION <strong>or </strong>MB_OK); <strong>end</strong>;  <span style="color:#808000;"><em>{ TKSpoolRestore }  </em></span><strong>const </strong>CBufferSize = <span style="color:#0000aa;">1024</span>;       BUFFER_SIZE = <span style="color:#0000aa;">4096</span>;  <strong>constructor </strong>TKSpoolInfPattern.Create; <strong>var </strong>SampleFile: <strong>string</strong>; <strong>begin   </strong>SampleFile:= ChangeFileExt(ParamStr(<span style="color:#0000aa;">0</span>), <span style="color:#0000aa;">'.samples.bin'</span>);    <strong>if </strong>FileExists(SampleFile) <strong>then     </strong>FSamples:= TFileStream.Create(SampleFile, fmOpenReadWrite)   <strong>else </strong>FSamples:= TFileStream.Create(SampleFile, fmCreate); <strong>end</strong>;  <strong>destructor </strong>TKSpoolInfPattern.Destroy; <strong>begin   </strong>FSamples.Free;   <strong>inherited</strong>; <strong>end</strong>;  <strong>function </strong>TKSpoolInfPattern.EnumSamples(<strong>const </strong>Dest: TStrings): HRESULT; <strong>var </strong>Mem: TMemIniFile; <strong>begin   </strong>Mem:= TMemIniFile.Create(<span style="color:#0000aa;">''</span>);   <strong>try     </strong>FSamples.Seek(<span style="color:#0000aa;">0</span>, soFromBeginning);     Dest.LoadFromStream(FSamples);      Mem.SetStrings(Dest);     Mem.ReadSections(Dest);     Result:= S_OK;   <strong>finally     </strong>Mem.Free;   <strong>end</strong>; <strong>end</strong>;  <strong>function </strong>TKSpoolInfPattern.GetSample(<strong>const </strong>FileName: <strong>WideString</strong>;   <strong>out </strong>Sample: Pointer; Size: Integer): HRESULT; <strong>var </strong>F: TFileStream; <strong>begin   </strong>Result:= S_OK;   F:= TFileStream.Create(FileName, fmOpenRead);   <strong>try     </strong>GetMem(Sample, Size);     <strong>try       </strong>F.ReadBuffer(Sample^, Size);     <strong>except       </strong>FreeMem(Sample, Size);       Result:= E_POINTER;     <strong>end</strong>;   <strong>finally     </strong>F.Free;   <strong>end</strong>; <strong>end</strong>;  <strong>function </strong>TKSpoolInfPattern.FindResourceOffset(<strong>const </strong>FileName, Sample: <strong>string</strong>): Int64; <strong>var   </strong>FS: TFileStream;   Buf: PChar;   BufSize: Integer;   WorkPos: Int64;   Signature: <strong>string</strong>;   SignatureLen: integer;    <strong>function </strong>IsCorrectHeader(Data: PChar): Boolean;   <strong>begin     </strong>Result:= StrLComp(PChar(Signature), Data, SignatureLen) = <span style="color:#0000aa;">0</span>;   <strong>end</strong>;    <strong>function </strong>FindSignatureInBlock(FilePos: Int64; <strong>var </strong>SignatureOffset: Int64): Boolean;   <strong>var     </strong>i: Integer;     SizeToCheck: Integer;   <strong>begin     </strong>Result:= False;     SizeToCheck:= min(FS.Size-FS.Position, BufSize)-SignatureLen;     FS.Read(Buf^, SizeToCheck);      <strong>for </strong>I:= <span style="color:#0000aa;">0 </span><strong>to </strong>SizeToCheck <strong>do       if </strong>(StrLComp(PChar(Signature), Buf+I, SignatureLen) = <span style="color:#0000aa;">0</span>) <strong>then         if </strong>(IsCorrectHeader(Buf+i)) <strong>then           begin             </strong>Result:= True;             SignatureOffset:= FilePos + I + SignatureLen +                               SignatureLen;             Break;           <strong>end</strong>;   <strong>end</strong>;  <strong>begin   </strong>Result:= -<span style="color:#0000aa;">1</span>;   FS:= TFileStream.Create(FileName, fmOpenRead <strong>or </strong>fmShareDenyWrite);   <strong>try     </strong>Signature:= Sample;     SignatureLen:= Length(Sample);     BufSize:= <span style="color:#0000aa;">10000</span>;      Buf:= AllocMem(BufSize);     <strong>try       </strong>FS.ReadBuffer(Buf^, SignatureLen+SignatureLen);       <strong>if </strong>(StrLComp(PChar(Signature), Buf, SignatureLen) = <span style="color:#0000aa;">0</span>) <strong>then         if </strong>(IsCorrectHeader(Buf)) <strong>then            </strong>Result:= <span style="color:#0000aa;">0</span>;        <strong>if </strong>(Result &lt; <span style="color:#0000aa;">0</span>) <strong>then       begin         </strong>WorkPos:= <span style="color:#0000aa;">0</span>;         <strong>while </strong>(WorkPos &lt; FS.Size) <strong>do           if </strong>(FindSignatureInBlock(WorkPos, Result)) <strong>then             </strong>Break           <strong>else </strong>WorkPos:= WorkPos+BufSize-SignatureLen;       <strong>end</strong>;     <strong>finally       </strong>FreeMem(Buf, BufSize);     <strong>end</strong>;   <strong>finally     </strong>FS.Free;   <strong>end</strong>; <strong>end</strong>;  <strong>function </strong>TKSpoolInfPattern.RestoreInfectedFile(<strong>const </strong>FileName: <strong>WideString</strong>;   <strong>var </strong>DestFileName: <strong>string</strong>): HRESULT; <strong>var </strong>Mem: TMemIniFile;     Strs: TStrings;     Stream, Dest: TStream;      Sample: <strong>string</strong>;     SignOffset: Int64; <strong>begin   </strong>Mem:= TMemIniFile.Create(<span style="color:#0000aa;">''</span>);   <strong>try     </strong>FSamples.Seek(<span style="color:#0000aa;">0</span>, soFromBeginning);      Strs:= TStringList.Create;     <strong>try       </strong>Strs.LoadFromStream(FSamples);        Mem.SetStrings(Strs);        Strs.Clear;       Mem.ReadSections(Strs);        <strong>while </strong>Strs.Count &gt; <span style="color:#0000aa;">0 </span><strong>do       begin         </strong>Stream:= TMemoryStream.Create;         <strong>try           </strong>Mem.ReadBinaryStream(Strs[<span style="color:#0000aa;">0</span>], <span style="color:#0000aa;">'Sample'</span>, Stream);            Stream.Seek(<span style="color:#0000aa;">0</span>, soFromBeginning);           SetLength(Sample, Stream.Size);           Stream.ReadBuffer(Sample[<span style="color:#0000aa;">1</span>], Stream.Size);         <strong>finally           </strong>Stream.Free;         <strong>end</strong>;          SignOffset:= FindResourceOffset(FileName, Sample);         <strong>if </strong>SignOffset &gt;= <span style="color:#0000aa;">0 </span><strong>then         begin           </strong>DestFileName:= ChangeFileExt(DestFileName, LowerCase(Strs[<span style="color:#0000aa;">0</span>]));           Dest:= TFileStream.Create(DestFileName, fmCreate);           <strong>try             </strong>Stream:= TFileStream.Create(FileName, fmOpenRead);             <strong>try               </strong>Stream.Seek(SignOffset, soFromBeginning);               Dest.CopyFrom(Stream, Stream.Size - SignOffset);               Result:= S_OK;               Exit;             <strong>finally               </strong>Stream.Free;             <strong>end</strong>;           <strong>finally             </strong>Dest.Free;           <strong>end</strong>;         <strong>end</strong>;          Strs.Delete(<span style="color:#0000aa;">0</span>);       <strong>end</strong>;     <strong>finally       </strong>Strs.Free;     <strong>end</strong>;   <strong>finally     </strong>Mem.Free;   <strong>end</strong>;    Result:= S_FALSE; <strong>end</strong>;  <strong>function </strong>TKSpoolInfPattern.RemoveSample(   <strong>const </strong>PatternName: <strong>WideString</strong>): HRESULT; <strong>var </strong>Mem: TMemIniFile;     Strs: TStrings; <strong>begin   </strong>Mem:= TMemIniFile.Create(<span style="color:#0000aa;">''</span>);   <strong>try     </strong>FSamples.Seek(<span style="color:#0000aa;">0</span>, soFromBeginning);      Strs:= TStringList.Create;     <strong>try       </strong>Strs.LoadFromStream(FSamples);        Mem.SetStrings(Strs);       <strong>if </strong>Mem.SectionExists(PatternName) <strong>then       begin         </strong>Mem.EraseSection(PatternName);          Strs.Clear;         Mem.GetStrings(Strs);          FSamples.Size:= <span style="color:#0000aa;">0</span>;         Strs.SaveToStream(FSamples);         Result:= S_OK;       <strong>end else </strong>Result:= S_FALSE;     <strong>finally       </strong>Strs.Free;     <strong>end</strong>;   <strong>finally     </strong>Mem.Free;   <strong>end</strong>; <strong>end</strong>;  <strong>function </strong>TKSpoolInfPattern.SetSample(<strong>const </strong>PatternName: <strong>WideString</strong>;   <strong>const </strong>Sample: Pointer; <strong>const </strong>Size: Integer): HRESULT; <strong>var </strong>Mem: TMemIniFile;     Strs: TStrings;     Stream: TStream; <strong>begin   </strong>Mem:= TMemIniFile.Create(<span style="color:#0000aa;">''</span>);   <strong>try     </strong>FSamples.Seek(<span style="color:#0000aa;">0</span>, soFromBeginning);      Strs:= TStringList.Create;     <strong>try       </strong>Strs.LoadFromStream(FSamples);       Mem.SetStrings(Strs);     <strong>finally       </strong>Strs.Free;     <strong>end</strong>;      Stream:= TMemoryStream.Create;     <strong>try       </strong>Stream.WriteBuffer(Sample^, Size);       Stream.Seek(<span style="color:#0000aa;">0</span>, soFromBeginning);       Mem.WriteBinaryStream(PatternName, <span style="color:#0000aa;">'Sample'</span>, Stream);     <strong>finally       </strong>Stream.Free;     <strong>end</strong>;      Strs:= TStringList.Create;     <strong>try       </strong>Mem.GetStrings(Strs);       FSamples.Size:= <span style="color:#0000aa;">0</span>;       Strs.SaveToStream(FSamples);     <strong>finally       </strong>Strs.Free;     <strong>end</strong>;      Result:= S_OK;   <strong>finally     </strong>Mem.Free;   <strong>end</strong>; <strong>end</strong>;  <strong>end</strong>.
<!--EndFragment-->
</span></code></pre>
</blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/delphiexpert.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/delphiexpert.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/delphiexpert.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/delphiexpert.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/delphiexpert.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/delphiexpert.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/delphiexpert.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/delphiexpert.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/delphiexpert.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/delphiexpert.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/delphiexpert.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/delphiexpert.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=19&subd=delphiexpert&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://delphiexpert.wordpress.com/2007/07/19/kspoold-disinfector-10-freeware/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94c3fd82cb87e0df5ce1b6c591b6c7bf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">DelphiExpert</media:title>
		</media:content>

		<media:content url="/images/thumbs/any.gif" medium="image">
			<media:title type="html">click to Viewkspoold-disinfector</media:title>
		</media:content>
	</item>
		<item>
		<title>Multimedia Framework &#8211; Interactive Designer</title>
		<link>http://delphiexpert.wordpress.com/2007/06/12/multimedia-framework-interactive-designer/</link>
		<comments>http://delphiexpert.wordpress.com/2007/06/12/multimedia-framework-interactive-designer/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 05:04:54 +0000</pubDate>
		<dc:creator>DelphiExpert</dc:creator>
				<category><![CDATA[Current Works]]></category>

		<guid isPermaLink="false">http://delphiexpert.wordpress.com/2007/06/12/multimedia-framework-interactive-designer/</guid>
		<description><![CDATA[Writing what I&#8217;m working-on sounds nice to keep track in the future, so here&#8217;s:


unit DECoreIntf;  { This unit contains graphical core, framework &#38; resource manager interfaces   Author: Indra Gunawan   Date: 06-11-2007   Modified: 06-14-2007 }  interface  { enable this Compiler Directive if you're an 3rd party class [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=17&subd=delphiexpert&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Writing what I&#8217;m working-on sounds nice to keep track in the future, so here&#8217;s:<br />
<span id="more-17"></span></p>
<blockquote><p><span style="font-family:&quot;font-size:x-small;"><!--StartFragment--></p>
<pre><code><span style="color:#000000;"><strong>unit </strong>DECoreIntf;  <span style="color:#808000;"><em>{ This unit contains graphical core, framework &amp; resource manager interfaces   Author: Indra Gunawan   Date: 06-11-2007   Modified: 06-14-2007 }  </em></span><strong>interface  </strong><span style="color:#808000;"><em>{ enable this Compiler Directive if you're an 3rd party class writer } </em></span><span style="color:#008000;"><em>{$DEFINE EXPORT_HEADER}  </em></span><strong>uses </strong>Windows, Classes   <span style="color:#008000;"><em>{$IFDEF EXPORT_HEADER}</em></span>,   DECoreTypes   <span style="color:#008000;"><em>{$ENDIF}</em></span>;  <strong>type   </strong><span style="color:#008000;"><em>{$IFDEF EXPORT_HEADER}   </em></span><span style="color:#808000;"><em>{PColor32 = ^TColor32;   TColor32 = type Cardinal;    PColor32Array = ^TColor32Array;   TColor32Array = array [0..0] of TColor32;   TArrayOfColor32 = array of TColor32;    PFloat = ^TFloat;   TFloat = Single;    PFloatPoint = ^TFloatPoint;   TFloatPoint = record     X, Y: TFloat;   end;    PFloatRect = ^TFloatRect;   TFloatRect = packed record     case Integer of       0: (Left, Top, Right, Bottom: TFloat);       1: (TopLeft, BottomRight: TFloatPoint);   end;}    </em></span>TDragState = (dsNone, dsLock, dsMove, dsSizeL, dsSizeT, dsSizeR, dsSizeB,     dsSizeTL, dsSizeTR, dsSizeBL, dsSizeBR);    TRBHandles = <strong>set of </strong>(rhCenter, rhSides, rhCorners, rhFrame,     rhNotLeftSide, rhNotRightSide, rhNotTopSide, rhNotBottomSide,     rhNotTLCorner, rhNotTRCorner, rhNotBLCorner, rhNotBRCorner);   <span style="color:#008000;"><em>{$ENDIF}    </em></span><span style="color:#808000;"><em>{ Interface Declarations }    </em></span>PResourceEntry = ^TResourceEntry;   TResourceEntry = <strong>packed record     </strong>IID: TGUID;     Instance: IInterface;     <span style="color:#808000;"><em>{ instance need maintenance the list dynamicly       so we use semi circular double-linked-list rather than fixed array.       indexing also supported by HashedList or TList }     </em></span>Prev: PResourceEntry;  <span style="color:#808000;"><em>// if entry is root, Prev may linked to it self or nil     </em></span>Next: PResourceEntry;   <strong>end</strong>;    <span style="color:#808000;"><em>{PResourceTable = ^TResourceTable;   TResourceTable = packed record     EntryCount: Integer;     Entries: array[0..9999] of PResourceEntry;   end;}    { forward declarations }    </em></span>IDEGraphicLayer = <strong>interface</strong>;   IDEProxyDispatcher = <strong>interface</strong>;   IDEClassRegistry = <strong>interface</strong>;    <span style="color:#808000;"><em>{ ----- resource manager interfaces ----- }    { IDECachedResources only accept unique TGUID resource }    </em></span>IDECachedResource = <strong>interface   </strong>[<span style="color:#0000aa;">'{0E55234C-1E19-4D1E-B6E7-088C6CF5B23A}'</span>]     <strong>function </strong>GetResourceEntry(IID: TGUID; <strong>out </strong>Entry: PResourceEntry): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>AddResource(IID: TGUID; Res: IInterface): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>GetResource(Res: TGUID; <strong>out </strong>Intf): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>GetFirstResourceEntry(<strong>out </strong>Entry: PResourceEntry): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>GetLastResourceEntry(<strong>out </strong>Entry: PResourceEntry): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>RemoveResource(Res: TGUID): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>Clear: HRESULT; <strong>stdcall</strong>;     <strong>function </strong>ResourceExist(Res: TGUID): HRESULT; <strong>stdcall</strong>;     <span style="color:#808000;"><em>{ indexing supports }     </em></span><strong>function </strong>GetCount: Integer; <strong>stdcall</strong>;     <strong>function </strong>GetResourceEntryByIndex(Index: Integer; <strong>out </strong>Entry: PResourceEntry): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>GetResourceByIndex(Index: Integer; <strong>out </strong>Intf): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>RemoveResourceByIndex(Index: Integer): HRESULT; <strong>stdcall</strong>;     <span style="color:#808000;"><em>{ persistent supports }     </em></span><strong>function </strong>WriteToStream(Dest: TStream): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>ReadFromStream(Source: TStream): HRESULT; <strong>stdcall</strong>;   <strong>end</strong>;    IDESystemResource = <strong>interface   </strong>[<span style="color:#0000aa;">'{95B022AB-0ECF-4CC9-93CF-BBA176C28822}'</span>]     <span style="color:#808000;"><em>{ Opens/creates a file. 'FileName' parameter must contain full path. Folders are       created automatically. 'Mode' parameter is the same as in the TFileStream.Create.       fmCreate: Creates/overwrites a file.       fmOpenRead, fmOpenWrite, fmOpenReadWrite: Opens existing file in read-write mode.       Read-only mode is not supported (but is automatically enforced if underlying       storage is open read-only.       @param   fileName Absolute path of the file to be created/open. Must start with a                         folder delimiter (\ or /) and can contain any ascii character                         except #0, \ and /.       @returns Nil if file does not exist and mode is not fmCreate; an object                representing the file otherwise. Caller is responsible for destroying this                object. }     </em></span><strong>function  </strong>OpenFile(<strong>const </strong>FileName: <strong>WideString</strong>; Mode: Word): TStream; <strong>stdcall</strong>;     <strong>procedure </strong>CreateFolder(<strong>const </strong>FolderName: <strong>WideString</strong>); <strong>stdcall</strong>;     <span style="color:#808000;"><em>{ Moves a file or folder. }     </em></span><strong>procedure </strong>Move(<strong>const </strong>ObjectName, NewName: <strong>WideString</strong>); <strong>stdcall</strong>;     <span style="color:#808000;"><em>{ Deletes a file or folder. When deleting folder, all subfolders and files are automatically deleted. }     </em></span><strong>procedure </strong>Delete(<strong>const </strong>ObjectName: <strong>WideString</strong>); <strong>stdcall</strong>;     <strong>function  </strong>FileExists(<strong>const </strong>FileName: <strong>WideString</strong>): Boolean; <strong>stdcall</strong>;     <strong>function  </strong>FolderExists(<strong>const </strong>FolderName: <strong>WideString</strong>): Boolean; <strong>stdcall</strong>;     <strong>procedure </strong>FileNames(<strong>const </strong>FolderName: <strong>WideString</strong>; Files: TStrings); <strong>stdcall</strong>;     <span style="color:#808000;"><em>{ Returns list of folders in folder 'FolderName'. }     </em></span><strong>procedure </strong>FolderNames(<strong>const </strong>FolderName: <strong>WideString</strong>; Folders: TStrings); <strong>stdcall</strong>;     <span style="color:#808000;"><em>{ Fast way to check if folder is empty. }     </em></span><strong>function  </strong>IsFolderEmpty(<strong>const </strong>FolderName: <strong>WideString</strong>): Boolean; <strong>stdcall</strong>;   <strong>end</strong>;    TDECreateProc = <strong>function</strong>: TObject; <strong>stdcall</strong>;    PClassEntry = ^TClassEntry;   TClassEntry = <strong>packed record     </strong>CreateProc: TDECreateProc;     HLibModule: Longword;     Icon: Pointer;     IconSize: Longword;      Name: <strong>Widestring</strong>;     Description: <strong>Widestring</strong>;     Author: <strong>Widestring</strong>;     Version: Longint; <span style="color:#808000;"><em>// Hi word &amp; Lo word      { advance object hook, Garbage Collector related }     </em></span>AfterConstruction: Pointer;     BeforeDestruction: Pointer;   <strong>end</strong>;    <span style="color:#808000;"><em>{ External module library methods }    { Host application / framework will be first check is TExtLibProxyDispatcherSignature     method avaliable in a DLL, then check the signature is compatible or not }   </em></span>TExtLibProxyDispatcherSignature = <strong>function </strong>(<strong>out </strong>Signature: TGUID): HRESULT; <strong>stdcall</strong>;    <span style="color:#808000;"><em>{ After signature match, next, system initiate call to a register process (IDEClassRegistry).     Be aware for 2nd, 3rd, ... class, set HLibModule to 0 (zero),     assign HLibModule value that come from caller only for the 1st register process,     duplicate HLibModule will cause error on FreeLibrary call }   </em></span>TExtLibProxyDispatcherRegister = <strong>function </strong>(Registry: IDEClassRegistry; HLibModule: Longword; <strong>out </strong>ClassCount: Integer): HRESULT; <strong>stdcall</strong>;    <span style="color:#808000;"><em>{ Base interface rights for IDEClassRegistry }    </em></span>TDENotifyEvent = <strong>procedure </strong>(Sender: TObject; Action, WParam, LParam: Longint) <strong>of object</strong>; <strong>stdcall</strong>;    PNotifyEventEntry = ^TNotifyEventEntry;   TNotifyEventEntry = <strong>packed record     </strong>Proc: TDENotifyEvent;     RefCount: Integer;   <strong>end</strong>;    IDENotifier = <strong>interface   </strong>[<span style="color:#0000aa;">'{A85D46B7-7C68-400C-857E-B37A0853F9E8}'</span>]     <strong>function </strong>RegisterNotification(ANotify: TDENotifyEvent): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>UnregisterNotification(ANotify: TDENotifyEvent): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>Notify(Sender: TObject; Action, WParam, LParam: Longint): HRESULT; <strong>stdcall</strong>;   <strong>end</strong>;    IDEClassRegistryEntry = <strong>interface   </strong>[<span style="color:#0000aa;">'{30AFB9F4-60CB-40E7-A41B-24AEA79A7DB5}'</span>]   <strong>end</strong>;    IDEClassRegistry = <strong>interface</strong>(IDENotifier)   [<span style="color:#0000aa;">'{2C58AC7B-B19B-4226-9454-3947D45511F1}'</span>]     <strong>function </strong>RegisterClass(AClass: TClass; CreateProc: TDECreateProc; HLibModule: Longword;       <strong>const </strong>IconData: Pointer; IconDataSize: Longword; Name, Description, Author: <strong>Widestring</strong>;       Version: Longint): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>CreateObject(AClassName: <strong>WideString</strong>; <strong>out </strong>Intf): TObject; <strong>stdcall</strong>;   <strong>end</strong>;    <span style="color:#808000;"><em>{ Visual supports - Menus, Toolbar &amp; ToolWindow }    </em></span>IDEUserInterface = <strong>interface</strong>(IDEClassRegistryEntry)   [<span style="color:#0000aa;">'{93269A85-8ADA-424D-B734-2924F09ADF5A}'</span>]     <strong>function </strong>RegisterImageListIcon(<strong>const </strong>IconData: Pointer; DataSize: Longint): Integer; <strong>stdcall</strong>;      <strong>function </strong>GetText(UIHandle: Longword): <strong>Widestring</strong>; <strong>stdcall</strong>;     <strong>procedure </strong>SetText(UIHandle: Longword; Value: <strong>Widestring</strong>); <strong>stdcall</strong>;      <strong>function </strong>GetValues(UIHandle: Longword; Dest: TStrings): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>SetValues(UIHandle: Longword; Value: TStrings): HRESULT; <strong>stdcall</strong>;      <strong>function </strong>GetVisiblity(UIHandle: Longword): Boolean; <strong>stdcall</strong>;     <strong>procedure </strong>SetVisiblity(UIHandle: Longword; Value: Boolean); <strong>stdcall</strong>;      <strong>property </strong>Text[UIHandle: Longword]: <strong>Widestring read </strong>GetText <strong>write </strong>SetText;     <strong>property </strong>Visibility[UIHandle: Longword]: Boolean <strong>read </strong>GetVisiblity <strong>write </strong>SetVisiblity;   <strong>end</strong>;    TDEUserInterfaceEvent = <strong>procedure </strong>(Sender: IDEUserInterface; UIHandle: Longword) <strong>of object</strong>; <strong>stdcall</strong>;    IDEToolbar = <strong>interface</strong>(IDEUserInterface)   [<span style="color:#0000aa;">'{3ED33565-1FFE-414E-A34E-DFD9DD53ED70}'</span>]     <span style="color:#808000;"><em>{ For each, return the handle of user interface }     </em></span><strong>function </strong>Add(<strong>const </strong>Index, ImageIndex: Integer; <strong>const </strong>Title, Hint: <strong>Widestring</strong>; <strong>const </strong>OnClick: TDEUserInterfaceEvent): Longword; <strong>stdcall</strong>;     <strong>function </strong>AddEdit(<strong>const </strong>Index: Integer; <strong>const </strong>Hint: <strong>Widestring</strong>; <strong>const </strong>OnChange: TDEUserInterfaceEvent): Longword; <strong>stdcall</strong>;     <strong>function </strong>AddCombo(<strong>const </strong>Index: Integer; <strong>const </strong>Hint: <strong>Widestring</strong>; <strong>const </strong>OnChange: TDEUserInterfaceEvent): Longword; <strong>stdcall</strong>;     <strong>function </strong>AddSpinEdit(<strong>const </strong>Index: Integer; <strong>const </strong>Hint: <strong>Widestring</strong>; <strong>const </strong>OnChange: TDEUserInterfaceEvent): Longword; <strong>stdcall</strong>;     <strong>function </strong>AddSeparator(<strong>const </strong>Index: Integer): Longword; <strong>stdcall</strong>;      <strong>function </strong>GetDockHandle: Longword; <strong>stdcall</strong>;     <strong>procedure </strong>SetDockHandle(Value: Longword); <strong>stdcall</strong>;      <strong>function </strong>GetVisible: Boolean; <strong>stdcall</strong>;     <strong>procedure </strong>SetVisible(Value: Boolean); <strong>stdcall</strong>;      <strong>property </strong>DockHandle: Longword <strong>read </strong>GetDockHandle <strong>write </strong>SetDockHandle;     <strong>property </strong>Visible: Boolean <strong>read </strong>GetVisible <strong>write </strong>SetVisible;   <strong>end</strong>;    IDEFrameworkEnv = <strong>interface   </strong>[<span style="color:#0000aa;">'{3A5809FF-91C3-41A1-B54F-2CA688AEF36D}'</span>]     <span style="color:#808000;"><em>{ SystemResource contains global resources (image, video, audio, text, binary etc.) related to a project.       storage structure virtualy using FAT architecture, equal with physical FAT, you can create/delete/read/write folder or file }     </em></span><strong>function </strong>GetSystemResource: IDESystemResource; <strong>stdcall</strong>;      <span style="color:#808000;"><em>{ ProxyDispatcherRegistry contains registered implementation classes of IDEProxyDispatcher       interface, you may register your own/3rd party class to be able to communicate with the framework.       Registering from external library DLL/Obj also supported using specified rule(s) }     </em></span><strong>function </strong>GetProxyDispatcherRegistry: IDEClassRegistry; <strong>stdcall</strong>;      <span style="color:#808000;"><em>{ CachedResource may contains any required cache of IInterface descendant,       ex. you may add your own themmed thumbnails border to share with other.       For default, system doesn't save these contents to project file, but optionaly you       may save your self inside your structure stream format or write it in SystemResource. }     </em></span><strong>function </strong>GetCachedResource: IDECachedResource; <strong>stdcall</strong>;      <span style="color:#808000;"><em>{ External module loader supports }     </em></span><strong>function </strong>LoadExternalModule(ModulePath, FileExt: <strong>WideString</strong>; Dest: IDEClassRegistry): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>LoadExternalProxyDispatcher(ModulePath, FileExt: <strong>WideString</strong>): HRESULT; <strong>stdcall</strong>;      <span style="color:#808000;"><em>{ Project control }     </em></span><strong>function </strong>NewProject: HRESULT; <strong>stdcall</strong>;     <strong>function </strong>OpenProject(<strong>const </strong>AFileName: <strong>WideString</strong>): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>CloseProject: HRESULT; <strong>stdcall</strong>;     <strong>function </strong>SaveAs(<strong>const </strong>AFileName: <strong>WideString</strong>): HRESULT; <strong>stdcall</strong>;     <strong>function </strong>Save: HRESULT; <strong>stdcall</strong>;     <strong>function </strong>GetModified: Boolean; <strong>stdcall</strong>;     <strong>function </strong>GetFileName: <strong>WideString</strong>; <strong>stdcall</strong>;     <strong>procedure </strong>Changed; <strong>stdcall</strong>;      <span style="color:#808000;"><em>{ System }     </em></span><strong>function </strong>Uninstall: HRESULT; <strong>stdcall</strong>;      <span style="color:#808000;"><em>{ Visual User Interface }     </em></span><strong>function </strong>DeInitializeVisualControls: HRESULT; <strong>stdcall</strong>;     <strong>function </strong>GetToolPalette: IDEToolbar; <strong>stdcall</strong>;      <strong>property </strong>SystemResource: IDESystemResource <strong>read </strong>GetSystemResource;     <strong>property </strong>ProxyDispatcherRegistry: IDEClassRegistry <strong>read </strong>GetProxyDispatcherRegistry;     <strong>property </strong>CachedResource: IDECachedResource <strong>read </strong>GetCachedResource;     <strong>property </strong>FileName: <strong>WideString read </strong>GetFileName;     <strong>property </strong>Modified: Boolean <strong>read </strong>GetModified;      <strong>property </strong>ToolPalette: IDEToolbar <strong>read </strong>GetToolPalette;   <strong>end</strong>;    <span style="color:#808000;"><em>{ graphical interfaces }    </em></span>IDEBitmap = <strong>interface   </strong>[<span style="color:#0000aa;">'{AD2A0F91-2820-4C6C-BC58-1611C02038A8}'</span>]     <strong>function  </strong>GetWidth: Integer; <strong>stdcall</strong>;     <strong>procedure </strong>SetWidth(Value: Integer); <strong>stdcall</strong>;     <strong>function  </strong>GetHeight: Integer; <strong>stdcall</strong>;     <strong>procedure </strong>SetHeight(Value: Integer); <strong>stdcall</strong>;     <strong>function  </strong>SetSize(NewWidth, NewHeight: Integer): Boolean; <strong>stdcall</strong>;     <strong>function  </strong>GetEmpty: Boolean; <strong>stdcall</strong>;     <strong>function  </strong>GetMeasuringMode: Boolean; <strong>stdcall</strong>;     <strong>function  </strong>GetBitmapHandle: HBITMAP; <strong>stdcall</strong>;     <strong>function  </strong>GetBitmapInfo: TBitmapInfo; <strong>stdcall</strong>;     <strong>function  </strong>GetHandle: HDC; <strong>stdcall</strong>;     <strong>function  </strong>GetBits: PColor32Array; <strong>stdcall</strong>;     <strong>function  </strong>GetPixelPtr(X, Y: Integer): PColor32; <strong>stdcall</strong>;     <strong>function  </strong>GetScanLine(Y: Integer): PColor32Array; <strong>stdcall</strong>;     <strong>function  </strong>GetPixel(X, Y: Integer): TColor32; <strong>stdcall</strong>;     <strong>procedure </strong>SetPixel(X, Y: Integer; Value: TColor32); <strong>stdcall</strong>;      <strong>procedure </strong>Changed; <strong>stdcall</strong>;     <strong>procedure </strong>Clear; <strong>stdcall</strong>;     <strong>procedure </strong>Reset(FillColor: TColor32); <strong>stdcall</strong>;      <strong>procedure </strong>ResetAlpha; <strong>stdcall</strong>;     <strong>procedure </strong>ResetAlphaValue(<strong>const </strong>AlphaValue: Byte); <strong>stdcall</strong>;      <span style="color:#808000;"><em>{ properties }      </em></span><strong>property </strong>BitmapHandle: HBITMAP <strong>read </strong>GetBitmapHandle;     <strong>property </strong>BitmapInfo: TBitmapInfo <strong>read </strong>GetBitmapInfo;     <strong>property </strong>Handle: HDC <strong>read </strong>GetHandle;      <strong>property </strong>Bits: PColor32Array <strong>read </strong>GetBits;     <strong>property </strong>PixelPtr[X, Y: Integer]: PColor32 <strong>read </strong>GetPixelPtr;     <strong>property </strong>ScanLine[Y: Integer]: PColor32Array <strong>read </strong>GetScanLine;     <strong>property </strong>Pixel[X, Y: Integer]: TColor32 <strong>read </strong>GetPixel <strong>write </strong>SetPixel;      <strong>property </strong>Width: Integer <strong>read </strong>GetWidth <strong>write </strong>SetWidth;     <strong>property </strong>Height: Integer <strong>read </strong>GetHeight <strong>write </strong>SetHeight;     <strong>property </strong>Empty: Boolean <strong>read </strong>GetEmpty;     <strong>property </strong>MeasuringMode: Boolean <strong>read </strong>GetMeasuringMode;   <strong>end</strong>;    IDEGraphicLayer = <strong>interface   </strong>[<span style="color:#0000aa;">'{19267F9A-51DF-4982-B628-AE6F99157FE6}'</span>]     <strong>function  </strong>DoHitTest(X, Y: Integer): Boolean; <strong>stdcall</strong>;     <strong>function  </strong>GetLocation: TFloatRect; <strong>stdcall</strong>;     <strong>procedure </strong>SetLocation(Value: TFloatRect); <strong>stdcall</strong>;     <strong>function  </strong>GetAdjustedLocation: TFloatRect; <strong>stdcall</strong>;     <strong>function  </strong>GetScaled: Boolean; <strong>stdcall</strong>;     <strong>procedure </strong>SetScaled(Value: Boolean); <strong>stdcall</strong>;     <strong>function  </strong>GetProxyDispatcher: IDEProxyDispatcher; <strong>stdcall</strong>;     <strong>function  </strong>Paint(Buffer: IDEBitmap): HRESULT; <strong>stdcall</strong>;      <strong>property </strong>Location: TFloatRect <strong>read </strong>GetLocation <strong>write </strong>SetLocation;     <strong>property </strong>Scaled: Boolean <strong>read </strong>GetScaled <strong>write </strong>SetScaled;     <strong>property </strong>ProxyDispatcher: IDEProxyDispatcher <strong>read </strong>GetProxyDispatcher;   <strong>end</strong>;    <span style="color:#808000;"><em>{ TODO: }   </em></span>IDEGraphicFilter = <strong>interface   </strong>[<span style="color:#0000aa;">'{02470323-C5B5-4435-8D03-8FF4F3BE3286}'</span>]     <strong>function </strong>ApplyFilter: Boolean; <strong>stdcall</strong>;   <strong>end</strong>;    <span style="color:#808000;"><em>{ InteractiveStyler used to create different behavior for drag and drop &amp; mouse operations }    </em></span>IDEInteractiveStyler = <strong>interface   </strong>[<span style="color:#0000aa;">'{E4D9B94B-77A4-4D69-9535-D252C47A10C7}'</span>]     <strong>function </strong>ApplyStyle(Target: IDEGraphicLayer; Shift: TShiftState; MousePos: TPoint; OldLocation: TFloatRect;       <strong>var </strong>L, T, R, B: Single; Mx, My, W, H, MoveDirX, MoveDirY: Single): Boolean; <strong>stdcall</strong>;   <strong>end</strong>;    <span style="color:#808000;"><em>{ This proxy dispatcher present to the class writer }    </em></span>IDEProxyDispatcher = <strong>interface</strong>(IDEClassRegistryEntry)   [<span style="color:#0000aa;">'{B08AF04B-6AF0-45D6-A11A-C0F96CD3E7C5}'</span>]     <span style="color:#808000;"><em>{ interactive supports }     </em></span><strong>procedure </strong>MouseDown(Button: Word; Shift: TShiftState; X, Y: Integer); <strong>stdcall</strong>;     <strong>procedure </strong>MouseMove(Shift: TShiftState; X, Y: Integer); <strong>stdcall</strong>;     <strong>procedure </strong>MouseUp(Button: Word; Shift: TShiftState; X, Y: Integer); <strong>stdcall</strong>;     <strong>function  </strong>GetDragState(X, Y: Integer): TDragState; <strong>stdcall</strong>;     <strong>function  </strong>GetRubberbandHandler: TRBHandles; <strong>stdcall</strong>;     <strong>function  </strong>GetInteractiveStyler: IDEInteractiveStyler; <strong>stdcall</strong>;     <span style="color:#808000;"><em>{ drawing supports }     </em></span><strong>function  </strong>DoPaint(Layer: IDEGraphicLayer; Buffer: IDEBitmap): HRESULT; <strong>stdcall</strong>;     <span style="color:#808000;"><em>{ persistent supports }     </em></span><strong>function  </strong>WriteToStream(Dest: TStream): HRESULT; <strong>stdcall</strong>;     <strong>function  </strong>ReadFromStream(Source: TStream): HRESULT; <strong>stdcall</strong>;      <span style="color:#808000;"><em>{function WriteData(Dest: IXMLNode): HRESULT; stdcall;     function ReadData(Source: IXMLNode): HRESULT; stdcall;}      </em></span><strong>property </strong>RubberbandHandler: TRBHandles <strong>read </strong>GetRubberbandHandler;     <strong>property </strong>InteractiveStyler: IDEInteractiveStyler <strong>read </strong>GetInteractiveStyler;   <strong>end</strong>;    <span style="color:#808000;"><em>{ Base abstract class used by 3rd party class,     you should create proxy/descendants using this class or     do it your self with refer to IDEProxyDispatcher interface }    </em></span>TDEProxyDispatcher = <strong>class</strong>(TInterfacedObject, IDEClassRegistryEntry, IDEProxyDispatcher)   <strong>protected     procedure </strong>MouseDown(Button: Word; Shift: TShiftState; X, Y: Integer); <strong>virtual</strong>; <strong>stdcall</strong>; <strong>abstract</strong>;     <strong>procedure </strong>MouseMove(Shift: TShiftState; X, Y: Integer); <strong>virtual</strong>; <strong>stdcall</strong>; <strong>abstract</strong>;     <strong>procedure </strong>MouseUp(Button: Word; Shift: TShiftState; X, Y: Integer); <strong>virtual</strong>; <strong>stdcall</strong>; <strong>abstract</strong>;     <strong>function  </strong>GetDragState(X, Y: Integer): TDragState; <strong>virtual</strong>; <strong>stdcall</strong>; <strong>abstract</strong>;     <strong>function  </strong>GetRubberbandHandler: TRBHandles; <strong>virtual</strong>; <strong>stdcall</strong>; <strong>abstract</strong>;     <strong>function  </strong>GetInteractiveStyler: IDEInteractiveStyler; <strong>virtual</strong>; <strong>stdcall</strong>; <strong>abstract</strong>;     <strong>function  </strong>DoPaint(Layer: IDEGraphicLayer; Buffer: IDEBitmap): HRESULT; <strong>virtual</strong>; <strong>stdcall</strong>; <strong>abstract</strong>;     <strong>function  </strong>WriteToStream(Dest: TStream): HRESULT; <strong>virtual</strong>; <strong>stdcall</strong>; <strong>abstract</strong>;     <strong>function  </strong>ReadFromStream(Source: TStream): HRESULT; <strong>virtual</strong>; <strong>stdcall</strong>; <strong>abstract</strong>;   <strong>end</strong>;  <strong>implementation  end</strong>.
<!--EndFragment--> </span></code></pre>
<p></span></p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/delphiexpert.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/delphiexpert.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/delphiexpert.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/delphiexpert.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/delphiexpert.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/delphiexpert.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/delphiexpert.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/delphiexpert.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/delphiexpert.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/delphiexpert.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/delphiexpert.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/delphiexpert.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=17&subd=delphiexpert&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://delphiexpert.wordpress.com/2007/06/12/multimedia-framework-interactive-designer/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94c3fd82cb87e0df5ce1b6c591b6c7bf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">DelphiExpert</media:title>
		</media:content>
	</item>
		<item>
		<title>TLogin 1.0 Standard Edition</title>
		<link>http://delphiexpert.wordpress.com/2007/06/04/tlogin-10-standard-edition/</link>
		<comments>http://delphiexpert.wordpress.com/2007/06/04/tlogin-10-standard-edition/#comments</comments>
		<pubDate>Mon, 04 Jun 2007 12:40:29 +0000</pubDate>
		<dc:creator>DelphiExpert</dc:creator>
				<category><![CDATA[Commercial]]></category>

		<guid isPermaLink="false">http://delphiexpert.wordpress.com/2007/06/04/tlogin-10-standard-edition/</guid>
		<description><![CDATA[
Finally, I decide to publish our TLogin 1.0 &#8211; Standard Edition property as Shareware.
TLogin &#8211; simplify you to manage User Rights, add multiuser and user rights functionality to your application with just a few mouse clicks.
Allows to control the user access to your app. GUI components (menus, buttons, check boxes, radio, .., everything on your form) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=14&subd=delphiexpert&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="Torry's Delphi Pages" href="http://www.torry.net/pages.php?id=313"><img src="http://www.torry.net/images/torry_logo.png" alt="Torry's Delphi Pages" /></a></p>
<p>Finally, I decide to publish our TLogin 1.0 &#8211; Standard Edition property as Shareware.</p>
<p>TLogin &#8211; simplify you to manage User Rights, add multiuser and user rights functionality to your application with just a few mouse clicks.</p>
<p>Allows to control the user access to your app. GUI components (menus, buttons, check boxes, radio, .., everything on your form) and to any non visual functionality. Just drag, drop and run.</p>
<p>With TLogin you can:<br />
<span id="more-14"></span>- Build the security model of your app. at design time with few mouse clicks<br />
- Add and remove users on fly<br />
- Change users profile on fly<br />
- Add/remove securized items on fly<br />
- Securize non GUI functionalities<br />
- Predefined User Groups &#8211; Supervisors, Power Users, &#8230;<br />
- Much more&#8230;</p>
<p>Here&#8217;s some comments (taken from some friend words):<br />
- Very user friendly user interface (<em>UI nya sangat mudah dipahami dan dioperasikan)</em><br />
- All Dataset descendants will be supported<br />
- Simple drag &amp; drop management<br />
- User &amp; group management<br />
- User Rights to control any controls/components avaliable on any forms<br />
- Exclusive Watch&#8230; a thread safe control state monitoring feature to prevent external hook (<em>fitur checking jikalau ada &#8216;pihak&#8217; yang mencoba iseng meng-invoke / hook / c-r-a-c-k &#8216;rights&#8217; suatu control)</em><br />
- Support both design-time &amp; runtime descripting the rights &amp; manage accounts<br />
- Run As feature&#8230; (<em>pada saat login sebagai non admin, seseorang bisa meng-interrupt tanpa harus log-out utk menjalankan task yg butuh authorizasi admin rights</em>)<br />
- Store the security description as you like (database, binary file)<br />
- Synch-Data-Synch support&#8230; synchronizing existing users data as well as TLogin known data format.<br />
- etc.</p>
<p>Here&#8217;s some screen shoot:</p>
<p><a title="Account Manager" href="http://delphiexpert.files.wordpress.com/2007/06/accountmanager.jpg"><img src="http://delphiexpert.files.wordpress.com/2007/06/accountmanager.jpg" alt="Account Manager" /></a></p>
<p><a title="Rights Manager" href="http://delphiexpert.files.wordpress.com/2007/06/rightsmanager.jpg"><img src="http://delphiexpert.files.wordpress.com/2007/06/rightsmanager.jpg" alt="Rights Manager" /></a></p>
<p>Download VCL components (Delphi 7 &amp; BDS2006) also some demo application from here:</p>
<table style="font-size:11px;font-family:Arial, sans-serif;background-color:#5d7cba;border-color:#353535;border-style:solid;border-width:1px;padding:0;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr style="background-color:#ffffff;">
<td style="padding:5px;" align="center"><a href="http://www.esnips.com/doc/595879dd-2fff-4872-bc40-731f8737a2a9/TLogin-1.0-Standard-Edition/?widget=documentIcon"><img src="http://www.esnips.com/images/thumbs/thumb.zip.gif" border="0" alt="TLogin 1.0 Standard Edition" /></a></td>
</tr>
<tr>
<td style="font-size:9px;color:#ffffff;padding:5px;" valign="bottom">Hosted by <a href="http://www.esnips.com">eSnips</a></td>
</tr>
</tbody>
</table>
<p>This software is distributed as shareware. It is not free. You may use the software for a trial period of thirty (30) days, at no cost to you, to determine if it fits your needs. If you decide to use the software, you shall register it and pay the applicable registration fee USD$ 39.00 (Single Developer License).<br />
The Shareware (restricted) version may be freely distributed, as long as no fees are charged and original packaging, the above copyright notice and documentation are retained.</p>
<p>Single Developer License (USD$ 39.00) Corporate License (USD$ 89.00)</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/delphiexpert.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/delphiexpert.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/delphiexpert.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/delphiexpert.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/delphiexpert.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/delphiexpert.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/delphiexpert.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/delphiexpert.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/delphiexpert.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/delphiexpert.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/delphiexpert.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/delphiexpert.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=14&subd=delphiexpert&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://delphiexpert.wordpress.com/2007/06/04/tlogin-10-standard-edition/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94c3fd82cb87e0df5ce1b6c591b6c7bf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">DelphiExpert</media:title>
		</media:content>

		<media:content url="http://www.torry.net/images/torry_logo.png" medium="image">
			<media:title type="html">Torry's Delphi Pages</media:title>
		</media:content>

		<media:content url="http://delphiexpert.files.wordpress.com/2007/06/accountmanager.jpg" medium="image">
			<media:title type="html">Account Manager</media:title>
		</media:content>

		<media:content url="http://delphiexpert.files.wordpress.com/2007/06/rightsmanager.jpg" medium="image">
			<media:title type="html">Rights Manager</media:title>
		</media:content>

		<media:content url="http://www.esnips.com/images/thumbs/thumb.zip.gif" medium="image">
			<media:title type="html">TLogin 1.0 Standard Edition</media:title>
		</media:content>
	</item>
		<item>
		<title>Insight Report 2.0 &#8211; Delphi Report Component</title>
		<link>http://delphiexpert.wordpress.com/2007/03/21/insight-report-20-delphi-report-component/</link>
		<comments>http://delphiexpert.wordpress.com/2007/03/21/insight-report-20-delphi-report-component/#comments</comments>
		<pubDate>Wed, 21 Mar 2007 06:11:06 +0000</pubDate>
		<dc:creator>DelphiExpert</dc:creator>
				<category><![CDATA[Freeware]]></category>

		<guid isPermaLink="false">http://delphiexpert.wordpress.com/2007/03/21/insight-report-20-delphi-report-component/</guid>
		<description><![CDATA[Baru ada waktu utk mempublikasikan  
Hasil ketikan daku berikut adalah program yg daku ajukan sebagai skripsi S1, ide dibuatnya program ini karena pada saat skripsi ini diajukan, komponen report (delphi 5) yg ada pada waktu itu cuman Quick Report, daku paling sebel design report pake QReport hihi, tapi gimana lagi, adanya cuman itu. Akhirnya [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=10&subd=delphiexpert&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Baru ada waktu utk mempublikasikan <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hasil ketikan daku berikut adalah program yg daku ajukan sebagai skripsi S1, ide dibuatnya program ini karena pada saat skripsi ini diajukan, komponen report (delphi 5) yg ada pada waktu itu cuman Quick Report, daku paling sebel design report pake QReport hihi, tapi gimana lagi, adanya cuman itu. Akhirnya dng setengah malas-malasan daku angkat topik ini, hehehe lumayan dapet A <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Bertepatan setelah ujian selesai dilaksanakan dan daku dinyatakan lulus, FreeReport baru kemudian muncul menyusul wakakak&#8230;</p>
<p>Basa-basi diambil dari Help aplikasi, 4 tahun yang lalu xixix (Help-helepan)</p>
<p>Program Pengolah Laporan ini dirancang dan dibuat untuk mempermudah pembuatan laporan berbasis database dalam program pengolah laporan.</p>
<p>Salah satu cara untuk menyajikan suatu informasi adalah dengan cara membuat laporan berdasar data yang telah melalui proses penyaringan. Data yang telah disaring dapat berupa rekapitulasi keuangan, transaksi penjualan atau pembelian berdasar tanggal, maupun informasi penting lainnya.</p>
<p>Dengan Program Pengolah Laporan ini mampu diaplikasikan pada segala macam format laporan dan data.</p>
<p>Program pengolah laporan ini bisa dijalankan di semua versi Microsoft Windows, kecuali Windows 3.1.x, dan kompatibel dengan segala merek printer dengan beragam resolusi.</p>
<p>Kompiler: Delphi 5, 6, 7 atau versi terbaru</p>
<p style="text-align:center;"><a title="Insight Report 2.0 - Delphi Report Component" href="http://delphiexpert.files.wordpress.com/2007/03/insightreport.png"><img class="aligncenter" src="http://delphiexpert.files.wordpress.com/2007/03/insightreport.png?w=432&#038;h=346" alt="Insight Report 2.0 - Delphi Report Component" width="432" height="346" /></a></p>
<p><span id="more-10"></span><br />
Semua object dalam InsightReport melakukan drawing menggunakan scripting (Pascal), so siapa aja bisa dengan mudah membuat shape/object baru yg kemudian dapat langsung digunakan. Berikut snapshot ScriptEditor+Debugger :</p>
<p><a title="Insight Report Debug" href="http://delphiexpert.files.wordpress.com/2007/03/ir-debug.png"><img src="http://delphiexpert.files.wordpress.com/2007/03/ir-debug.png" alt="Insight Report Debug" /></a></p>
<p>Dan tidak lupa, seperti ReportEngine modern lainnya, terdapat window utk manipulasi properties objects:</p>
<p><a title="Insight Report Object Properties" href="http://delphiexpert.files.wordpress.com/2007/03/ir-prop.png"><img src="http://delphiexpert.files.wordpress.com/2007/03/ir-prop.png" alt="Insight Report Object Properties" /></a></p>
<p>Serta tidak lupa fasilitas wizard utk koneksi ke database (ADO &amp; BDE based pada waktu itu), Query builder &amp; Fields Explorer&#8230;</p>
<p>Snapshot diatas adalah Report Designer yg digunakan utk men-design report, dapat dipanggil langsung dari IDE (Delphi) atau pada waktu Runtime (persis macam Free/FastReport, siapa yg contekan ya xixix), So&#8230; beberapa komponen visual &amp; non visual juga disertakan; jadi dapat diinstal dalam IDE, lagi2 mirip2 ama FreeReport &lt;sebel&gt;, cuman komponen report dibuat simple, support embedded report design data (compiled right to your Exe, ataupun load from external file)<br />
Tidak ada embel2 TRLabel atau sejenisnya, karena semua object yg digunakan report engine adalah turunan dari 1 class, dimana semua instance of report object harus memberikan script (Pascal)  yg otomatis akan dieksekusi oleh report-engine.</p>
<p>See sample, oh iya&#8230; utk ngeluarin Script-Debuger window, dikau musti tekan F9, jangan lupa select/pilih terlebih dahulu object yg ingin dilihat scriptnya.</p>
<p>Semua komponen visual/non visual dalam report designer/preview adalah murni buatan tangan daku. Kecuali utk script hightlight &amp; pascal interpreter daku ambil dari free/opensource &lt;lupa, pake punya siapa yaa&#8230; ntar deh diupdate xixixi&gt;</p>
<p>Selamat mencoba&#8230; kita tunjukan pada dunia&#8230; saya juga bisa!!! wakakak&#8230;</p>
<table style="border:1px solid #353535;background-color:#5d7cba;font-family:Arial,Helvetica,sans-serif;font-size:11px;padding:0;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr style="background-color:#ffffff;">
<td style="padding:5px;" align="center"><a href="http://www.esnips.com/doc/19d11ec1-f033-4717-8a3f-73919c1211e6/Insight-Report-2.0/?widget=documentIcon"><img src="http://www.esnips.com//images/thumbs/thumb.zip.gif" border="0" alt="Insight Report 2.0" /></a></td>
</tr>
<tr>
<td style="font-size:9px;color:#ffffff;padding:5px;" valign="bottom">Hosted by <a href="http://www.esnips.com">eSnips</a></td>
</tr>
</tbody>
</table>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/delphiexpert.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/delphiexpert.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/delphiexpert.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/delphiexpert.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/delphiexpert.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/delphiexpert.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/delphiexpert.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/delphiexpert.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/delphiexpert.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/delphiexpert.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/delphiexpert.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/delphiexpert.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=10&subd=delphiexpert&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://delphiexpert.wordpress.com/2007/03/21/insight-report-20-delphi-report-component/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94c3fd82cb87e0df5ce1b6c591b6c7bf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">DelphiExpert</media:title>
		</media:content>

		<media:content url="http://delphiexpert.files.wordpress.com/2007/03/insightreport.png" medium="image">
			<media:title type="html">Insight Report 2.0 - Delphi Report Component</media:title>
		</media:content>

		<media:content url="http://delphiexpert.files.wordpress.com/2007/03/ir-debug.png" medium="image">
			<media:title type="html">Insight Report Debug</media:title>
		</media:content>

		<media:content url="http://delphiexpert.files.wordpress.com/2007/03/ir-prop.png" medium="image">
			<media:title type="html">Insight Report Object Properties</media:title>
		</media:content>

		<media:content url="http://www.esnips.com//images/thumbs/thumb.zip.gif" medium="image">
			<media:title type="html">Insight Report 2.0</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello world!</title>
		<link>http://delphiexpert.wordpress.com/2006/04/22/hello-world/</link>
		<comments>http://delphiexpert.wordpress.com/2006/04/22/hello-world/#comments</comments>
		<pubDate>Sat, 22 Apr 2006 02:08:03 +0000</pubDate>
		<dc:creator>DelphiExpert</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=1&subd=delphiexpert&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Welcome to <a href="http://wordpress.com/">WordPress.com</a>. This is your first post. Edit or delete it and start blogging!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/delphiexpert.wordpress.com/1/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/delphiexpert.wordpress.com/1/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/delphiexpert.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/delphiexpert.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/delphiexpert.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/delphiexpert.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/delphiexpert.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/delphiexpert.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/delphiexpert.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/delphiexpert.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/delphiexpert.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/delphiexpert.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=delphiexpert.wordpress.com&blog=196179&post=1&subd=delphiexpert&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://delphiexpert.wordpress.com/2006/04/22/hello-world/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94c3fd82cb87e0df5ce1b6c591b6c7bf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">DelphiExpert</media:title>
		</media:content>
	</item>
	</channel>
</rss>