Sunday, October 25, 2009

Delete Top Records with SQL - Foxpro shortcut

The easiest way to delete records (top records) in foxpro is to simply type, "delete from table_name where recno()<=4000" This doesn't work correctly if you order the table in a way other than set by its index. You could delete the index then try it, but if you just need the top X amount of records as it's ordered, and it hasn't changes, it works great!

Sunday, July 5, 2009

Windows Font Installer

I mean would Microsoft please, please, please update the font installer for their operating systems. What the heck is a Windows 3.1 dialog doing in Vista? If anyone can answer this one, they should be the new CEO of Microsoft, cause there's simply no point.

Not that it's all that hard to use, it's just with all the directories for you different users and whatnot, it's sometime a little difficult to navigate to the correct spot where you font is residing.

So MICROSOFT - Change this crap.

Saturday, August 16, 2008

Filter bad language with Delphi / Pascal...

This has been adapted from a ISAPI web application. The first step is to fill a TStringList with a list of bad words, or even characters that you don't want to save into your database.

I've call my StringList BWSL. After initializing the StringList, and adding the words, loop through and see if any of the words you've added are present.

If they are, redirect, or use other handling depending on the type of application you're writing. My form element on the calling web page is in the variable "Tag"


for I:=0 to BWSL.Count-1 do
if pos (BWSL.Strings[I], LowerCase(tag)) > 0 then begin
Response.SendRedirect(Request.ScriptName+'/BadRequest?Bid=6&Extra=The_Word,_Character,_or_Phrase,_' + BWSL.Strings[I] +'_is_Prohibited.');

Friday, August 15, 2008

Keep an eye open with Netstat Steps to secure your windows web server

For those of you running your own servers, with all the illegal hacking activity, it's a good idea to keep your eyeballs peeled to your open connection with netstat or a similar utility.

It's fairly easy to track an ip address with website services, such as the one here » Ip Look up.

I keep a utility on my desktop that monitors the flow of traffic through my NIC. when this stays lit for extended periods, it mean non-stop traffic. Now sense I'm a website publisher that earns revenue from his websites, you'd normally think that that was a good thing. Of course if you notice twenty or more open pipes from the same IP address, it certainly could indicate trouble. If that IP address is coming from China, then well it's really up in the air.

What to do???

Well for on thing you can take every precaution that you can to secure your server. Now I run a Windows server, so I started off by hardening my machine with what the operating system offers. Closing unused ports, turning off unneeded and dangerous services. You can learn how to do some of this over at Gibson Research.

Second you have to have a firewall. I have a good one, and allow only port 80 traffic inbound.

Third you download IISLOCKDOWN. You can use this to configure IIS to be a ton more secure.

Fourth you can set up IPSEC. For the novice user, IPSEC can be a bit daunting. Don't worry there are plenty of tutorials like this one to get you started. It's well worth all the trouble to set things up to be as bullet proof as you can. This still will not prevent bots, or other people from sending a lot of traffic to your port eighty. So in IPSEC configure a rul that will block users by IP address, and as you find suspicious IP addresses in your logs, or with netstat, block them.

It's every webmaster's responsibility to run as secure a server as they have the power to. Fortunately there are many resources devoted to this topic, it just takes a little time. (And effort!)

Thursday, August 14, 2008

Use Crystal Reports in Delphi ISAPI Web Application

Well obviously, you may have tried to use the VCL component, and cashed and burned repeatedly. I took my a long time to properly integrate Crystal reports with an Isapi application through delphi. After literally weeks of research in 2004 I was able to properly utilize almost all of Crystal's functionality inside an ISAPI.

Why am I just now writing about this? Well.. As time rolls on, the technology is still viable. Especially if you have a tone of Crystal reports you'd like your users to be able to download in .Doc or .PDF formats.

Here Goes...

Import the Crystal Reports type library, save it as CRAXDRT_TLB; (into new unit) This would apply to Crystal Reports version 9. Don't forget to add the "cr" in front of the object names!!!

Here's the source code example: Please forgive any poor formatting on my part I wrote an automated .Pas to HTML conversion program, in about ten minutes, and right now it's imperfect. So I will work on that program as I continue to post Delphi Tips. Thanks and enjoy.


procedure TWebModule1.WebModule1WaExportReportAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var CrReport : Report;
NewStream : TStream;
TheReportType :CRExportFormatType;
S, TheCType : String;

//For Initilization purposes only

TheReportType:= CRAXDRT_TLB.crEFTPortableDocFormat;

//End Initialization

////Use the value of a web page radio button to determine the type of export ////the users desires.

If TheButtonVal='PDF' then begin
TheReportType:= CRAXDRT_TLB.crEFTPortableDocFormat;
If TheButtonVal='DOC' then begin
TheReportType:= CRAXDRT_TLB.crEFTWordForWindows;
If TheButtonVal='XLS' then begin
TheReportType:= CRAXDRT_TLB.crEFTExcel80;
If TheButtonVal='RTF' then begin
TheReportType:= CRAXDRT_TLB.crEFTExactRichText;

///You could use the actual report name added to a select element using ///Delphi's ///FindFiles...
CrReport := Application1.OpenReport('DirectoryName\'+TheReportName);

if TheButtonVal='PDF' then

if CrReport.ParameterFields.Count=1 then
////Depending upon any parameter values the Report uses and how they are //configured, these lines could change.
if CrReport.ParameterFields.Count=2 then begin
CrReport.ExportOptions.FormatType :=TheReportType ;
CrReport.ExportOptions.DestinationType :=CRAXDRT_TLB.crEDTDiskFile;

/////Give the created report a destination on disk, and name
CrReport.ExportOptions.DiskFileName :=


NewStream:=TFileStream.Create(the name you created above),
fmOpenRead and fmShareDenyWrite);
Response.SetCustomHeader('content-disposition', 'attachment; filename=YourShortFileName));
Response.SendRedirect('Your Error Handling Page')

Tuesday, August 12, 2008

How To "Really" Make Application Splash Screen in Delphi

Anybody else think Zarco Gajic is an idget sometimes? No seriously, I AM KIDDING. However, after looking at his how to create a splash screen in Delphi code, I realized to really make a cool splash screen in Delphi... something else would be needed.

This article will accomplish three things.

1. It will provide you code on how to prevent your application from running more than one instance.

2. It will create a splash screen that will show during your applications start up.

3. It will animate into view (fade) the splash screen. This effect although simple really adds "Splash" to your Delphi splash screen.

To Begin »

First those of you who are unfamiliar with how to view the source of your .EXE or Delphi project file simply right click in the Delphi project manager on the .exe and select view source.

That will open up the project source id the IDE editor window. Take a look at how your current source is laid out. It will appear similar to that below. Below is the full source code you will need to create the three effects outlined above.

You'll obviously need to create a new form and name it FrmSplash. Remove it from the available forms section via Projects » Options » Forms.

You'' also need to add "Windows", "Dialogs" & "Forms" if not present in the source's USES clause. Follow the code and it will dress up your Delphi application in a nice way.

program xyz;

MdiUnit in 'MdiUnit.pas' {FrmMain},

{$R *.res}

MyProgramNameMutex: Thandle;
I : Integer;

MyProgramNameMutex:=CreateMutex(nil, False, 'MyProgramNameMutex');
if WaitForSingleObject (MyProgramNameMutex, 0) <> Wait_TimeOut then
Application.Title := 'My Program Name';
//Create Splash Screen

with TFrmSplash.Create(nil) do


// AnimateWindow(Handle, 1000, AW_HIDE Or AW_BLEND); Lame Code that don't work!~
for I := 0 to 255 do begin
AlphaBlendValue := I;
Application.CreateForm(TFrmMain, FrmMain);



else begin
MessageDlg(Application.Title+' is already running!!!', mterror, [mbok], 0);


Monday, August 11, 2008

Wikipedia full of spam YUM!

Yep. Wikipedia is full of spam at least on the entry for freight payment service that I started years ago. Apparently users from Data2Logistics added a link inside along with a snippet. Since they provide freight payment service, how is this not SPAM? Tell me again, HOW IS THIS NOT SPAM?

Another reason wikipedia is full of crap. I used to be the webmaster for the Logistics Group, who also provided freight payment services. I didn't add our url to the entry, simply created to ORIGINAL entry, and linked to it from our site. Pretty smart way back in the day like five years ago.

Luckily the Wikipedia entry for freight payment service still comes up BEHIND my website: » BlogSwallow I say!