The Unofficial Newsletter of Delphi Users - Banner

Downloadable UNDU Issues Delphi User Groups

News Page

July 31st, 1998

Looks like the HTML Help version of UNDU is working well... Haven't had any major problems and the feedback has been overwhelmingly positive. The new format uses the Microsoft HTML Help viewer application, and if you are a user of Win95 or WinNT and cannot view this test issue of UNDU, you may want to visit the Microsoft HTML Help site to get the viewer. Win98 includes this viewer as part of its standard configuration. Also, if you have downloaded and installed IE4, you should already have the new viewer. As far as I know, there is not a system in place that allows Win3.x users to view HTML Help files. Correct me if I am wrong!

When you disable a menu item in Delphi 4 that has an associated glyph, have you ever wondered why your tiny little work of art turns into a gray shapeless blob? Turns out it is a bit of a glitch in the Delphi 4 VCL. To learn more, check out David Yowell's article Fixing a Menu Drawing Glitch in Delphi 4.

There has been a lot of interest in the Pascal/Delphi compiler story I mentioned on the 29th. I suppose there is little need for me to be a middleman for people showing interest in this, so the developer of this project has indicated it would probably be easier to just include his email and web site. So here it is:

    Email Address - michael@tfdec1.fys.kuleuven.ac.be
    Web Site - http://tfdec1.fys.kuleuven.ac.be/~michael/fpc/fpc.html

Also today, Lighthouse Software has announced the availability of DocSuite, a document management system primarily used to track Material Safety Data Sheets (MSDS). The reason I mention this is that it is a pretty neat tool developed with Delphi 3 and I had worked on some aspects of its user interface. Hey... a little free advertising never hurt anyone... ;-)

I have a bunch more stuff to put up in the next day or two but ran out of time today... stay tuned!

July 29th, 1998

A bunch of things to cover today...

First, those of you who use my IniOut component, I recently received my upgrade to Delphi 4 and have updated it to support this latest version. You all should be receiving the update today, but if for some reason you do not, please email me and I will send it right out. If you are not a user of IniOut and would like to try the shareware version, click here. If you would like to see a review of IniOut, click here.

As many of you know, at the beginning of this year, I discontinued the distribution of the downloadable versions of UNDU. Starting with February, the issues were only readable online. Due to popular demand however, it looks like this is going to change! A reader of UNDU in Indonesia, Irwan Adriansyah, has very gratiously offered to convert the material each month into a downloadable version in HTML Help format. We are still in the process of ironing out what they will look like, but he has a first draft copy of the February, 1998 "issue" of UNDU. If you would like to download it and check it out, please click here. Remember however, that this is in HTML Help format and not the older Windows HLP format. As a result, some of you (most likely Windows 3.x users) will not be able to do anything with this file. I have tested it with Win95, Win98, and WinNT and it works fine in all of these environments. I suspect, however, that some Win95 users who have older versions of some of the system DLL's will also not be able to view this file. If you have any comments or suggestions on the design or functionality of these files, please let me know. You may also want to send a brief thank-you note to Irwan as he is volunteering his spare time to do this for us. Please keep the emails brief though, because he pays for his connect time to the internet.

More interesting news... I have learned of a project which is working on implementing a free Delphi compatible 32-bit pascal compiler.

The project is still in the early stages, but it's aims are as follows:

  • Borland Pascal 7.0 and Delphi (2 through 4) compatibility.
  • A cross-platform implementation of the compiler and it's run-time library. Currently compilers are available (in different stages of completion) for DOS, Linux, OS/2 and 32-bit Windows.
  • Implementation of a Free Component Library, a counterpart to the Delphi VCL, which should also be cross-platform (as far as possible).

The project must be considered as still in beta-stage, since the Delphi compatibility isn't 100% finished yet, although this is expected in the near future. I presume from my conversations with the developer that we are just talking about the "compiler" here, not any kind of environment for designing forms, or a code editor or anything like that. I might be wrong though. However, the potential ability to take a 32-bit app designed and coded using Delphi, and then recompiling it for use on Linux will no doubt draw considerable interest.

If you are interested in this project, please let me know and I will forward your comments or questions to the developer.

July 20th, 1998

I will be taking a short vacation and will be back on July 27th. Look for a big update then!

July 15th, 1998

Last month, there was a mention about a Delphi memory checker called MemProof. I recently received an email from Mattias Linde who reports that there is another freeware solution called Snoop which can be found at the IHS Software web site. Looks interesting, but I haven't tried it out yet. Maybe someone who has had some experience with one or both of these products could do a little review/comparison of them?

Two more articles today: The first is one from Matt Hamilton on managing network lock files entitled Sorting Out Lock Files Once And For All! Also today, Steve Gill follows-up the TDateTimePicker article from earlier this month with a descendant component in Enhancing the TDateTimePicker Component.

Also, I recently have received a flurry of e-mails from users offering neat IDE and/or code editor shortcuts. You are going to be seeing a few of them over the next few days, but it got me thinking that there are probably a lot of people out there who have their own little customizations they have done to Delphi's code editor that other readers could benefit from. If you have one that you think is unique, please send it along. Remember, every contributor to UNDU gets included in the random prize drawing at the end of the month!

July 13th, 1998

Some interesting company and product announcements from Baltic Solutions as well as a very cool trick that helps you to see all your global variables in a list from within the Delphi IDE. Read more about it in Picking Global Variables from a List.

July 7, 1998

Another small adjustment to this site... I will be moving all Reviews of Delphi-related products (software, books, etc) to their own link on the button bar to the left.

There will be two prizes awarded to randomly selected contributors this month. The first goes to Grahame Marsh for his articles on the The MultiLine Hint Property Editor and the Drop File Helper Component. His prize is a copy of InputPro by FarPoint Technologies. InputPro is an impressive set of custom editing controls in their Visual Architect Series. You can learn more about InputPro by visiting FarPoint's web site at http://www.fpoint.com.

The second prize winner is Chad Roalson for bringing a Delphi Job site to my attention. His prize is a copy of the Delphi Informant Works CD which contains all issues of Delphi Informant through the end of 1997.

We start off the month of July with a bang by bringing two more great articles. As you may recall, last month Grahame Marsh presented an article on the Drop File Helper component which, as it turns out, I said could handle dragging and dropping files to and from your Delphi Apps. As it turns out, it was only a "Drop" file helper. Grahame jumped on the opportunity and wrote a companion article entitled Drag File Helper Component.

Also, a reader recently commented on a failing in the TDateTimePicker component which sparked some investigative juices in me. After some research, I came up with an article on Formatting a TDateTimePicker. It's one of those "1 line of code" solutions, so I think you will all find it interesting.

Lastly, there have been a few more additions to the Delphi Job Site link. Thanks for everyone's help on putting this together.

In order to keep the size of the News Page to a minimum, I will be archiving previous months and listing them at the bottom.
News Page for June, 1998
News Page for May, 1998
News Page for April, 1998
News Page for March, 1998
News Page for February, 1998


The Unofficial Newsletter of Delphi Users - Tips & Tricks

Articles, Tips & Tricks

Below is a comprehensive list of links to all the Articles, Reviews, and Tips & Tricks published in The Unofficial Newsletter of Delphi Users. Because of the number of articles and tips & tricks in past issues, this will be a work in progress, so please keep checking back for updated links.

07/31/98 - Fixing a Menu Drawing Glitch in Delphi 4
07/14/98 - Enhancing the TDateTimePicker
07/14/98 - Sorting Out Lock Files Once and For All!
07/13/98 - Picking Global Variables From A List!
07/07/98 - Drag File Helper Component
07/07/98 - Formatting the TDateTimePicker
06/30/98 - Drop File Helper Components
06/30/98 - Extending the StatusBar Component
06/16/98 - Highlighting Edit Boxes
06/16/98 - Archiving Data in TTables and TQueries
06/15/98 - Sneaking a Peek at Data-Access Components
06/15/98 - Multi-Line Hint Property Editor
05/25/98 - Multi-Line Hints
05/25/98 - A Universal TDateTime Class
05/25/98 - Here Thar Be Dragons!
05/25/98 - Getting to the Bottom of FAT32
05/11/98 - Dynamically Loading Packages
04/22/98 - Controlling Application Startup in Delphi 3
04/22/98 - Inside the Delphi 3 Package
04/22/98 - Digital Sound in Delphi Part II
04/17/98 - Multiple Lines of Text in a String Grid - Improved!
04/17/98 - Auto Upgrading!
04/17/98 - Piggybacking Event Handlers with Components
04/15/98 - Using TDataSource to Improve Your User-Interface
04/15/98 - Hooking Into the VCL
03/26/98 - Using TMediaPlayer to Manage Multiple CDRoms
03/26/98 - Beziers and Paths
03/26/98 - Windows Hooks
03/25/98 - WinHelp Office Review
03/18/98 - Creating Shortcuts in Delphi
03/18/98 - Can't Have Too Much WinInfo!
03/18/98 - Drawing on a TEdit Control
03/18/98 - Borland's Tech Sheets
03/17/98 - Extending the Moving/Resizing Technique
03/17/98 - Using the Clipboard with WAV Files
03/11/98 - Determining CPU Type
03/11/98 - Compressing 256 Color BMPs
03/06/98 - Moving and Sizing Controls at Runtime
02/28/98 - Digital Sound & Music in Delphi
02/26/98 - Accessing the Win95 FindFiles Dialog
02/23/98 - Improving Cut, Copy & Paste
02/23/98 - Giving Your EditBoxes Some Attention
02/21/98 - Delphi 3's Code Parameters
02/21/98 - CD Change Notifications
Issue #24 - Speeding Up Master-Detail Tables
Issue #24 - Beginners Block: An Introduction to Pointers
Issue #24 - NIL Pointers: How Delphi Frees Objects
Issue #24 - RGB & HSL Colour Models
Issue #24 - More on Moving From VB to Delphi
Issue #24 - A Second Look at MicroEdge's Visual SlickEdit
Issue #24 - Delphi and the Year 2000
Issue #23 - Playing and Recording Sounds in Delphi
Issue #23 - An Immediate IF Function
Issue #23 - Two Lines of Text in a String Grid
Issue #23 - A Simple Drawing Program
Issue #23 - Finding the Cursor Coordinates in a Memo Control
Issue #23 - A Browse Directory Component
Issue #23 - Changing Event Handlers at Runtime
Issue #23 - Book Review: Hidden Paths of Delphi 3
Issue #23 - Book Review: Building Delphi 2 Database Applications
Issue #23 - Review: Raize Components
Issue #23 - Making the Move: VB to Delphi
Issue #23 - Add a Web Search Engine to Your Application
Issue #22 - Bitmaps in String Grids
Issue #22 - A Cure for Previous Instance Problems
Issue #22 - A Word Search Tip
Issue #22 - Unbridled Acceleration
Issue #22 - Showing the Caret Position
Issue #22 - Using the Win95 Registry
Issue #22 - Wallpapering MDI Forms
Issue #22 - The InputQueryEx Function
Issue #22 - Exceeding the Data Segment
Issue #22 - Delphi 2.0 and 3.0 on the Same Computer
Issue #22 - Review: Programmers Guild Animated Tray Icon
Issue #22 - Review: MicroEdge's Visual SlickEdit
Issue #22 - Review: IniOut Component
Issue #22 - Review: Addict 2.2 Spell Checker for Delphi
Issue #22 - Getting Control of the Control Panel
Issue #21 - Low-Level Windows Stuff
Issue #21 - Listing Procedures
Issue #21- Hiding Apps from the TaskBar
Issue #21 - Excel OLE Tips
Issue #21 - Playing Sounds Asynchronously
Issue #21 - Bitmaps on StringGrids
Issue #21 - How to Find Up-To-Date Delphi Books
Issue #21 - Using the Margin Marker in Delphi 1 & 2
Issue #21 - Lock Violations Revisited
Issue #21 - Object Creation Tip
Issue #21 - How To Compress a Bitmap
Issue #21 - The TEndSession Component
Issue #21 - Video Capture and Delphi
Issue #21 - Review: Delphi Component Design
Issue #20 - Is Someone Else Running? Revisited!
Issue #20 - InputQueryEx Function
Issue #20 - Multi-Colored Text in a String Grid
Issue #20 - Converting Pascal Source to HTML
Issue #20 - Processing Large Database Tables
Issue #20 - Making Your App Look Normal at Different Resolutions
Issue #20 - How to Make Your EXE's Lighter!
Issue #20 - Win95 Shell Operations - Update
Issue #20 - Form Aspect Ratio
Issue #20 - Previous Instances - Revisited
Issue #20 - Printing Raw Data
Issue #20 - Implementing a "Tip Of The Day" Component
Issue #20 - TFieldPanel
Issue #20 - TPageControl - Update
Issue #20 - Learning How To Drive: Disk Information in Delphi
Issue #20 - Delphi Books and Periodicals
Issue #19 - Using Win95's SHFileOperation to Move/Copy/Delete Files
Issue #19 - How to Create a Polygon Splash Screen
Issue #19 - Is Someone Else Running?
Issue #19 - Lock Violation Errors in Paradox
Issue #19 - Printing Directly to the Printer
Issue #19 - Refreshing MDI Menus
Issue #19 - Extending the Background Bitmap Technique
Issue #19 - Paradox File Size Limits
Issue #19 - Safer Use of Enumerated Types
Issue #19 - Simplifying Code Management with Include
Issue #19 - A Look at the TreeView Component
Issue #19 - Aligning Text in a Grid
Issue #19 - TPageControl
Issue #19 - Big Bitmaps
Issue #19 - Transparency Masks
Issue #19 - Review: SpeedDaemon Code Profiler
Issue #19 - A Look at MagiKit
Issue #19 - Humor: Are you Computer Illiterate?
Issue #18 - Storing Fonts in INI files
Issue #18 - Sorting Columns in a DBGrid
Issue #18 - Adding UNDU to an Edit Menu
Issue #18 - Put Anything in Your Delphi EXE!
Issue #18 - A Simple Clipboard Viewer
Issue #18 - Object Express by OopSoft
Issue #18 - Announcement: IniOut Component
Issue #18 - Book Review: Delphi Component Design by Dany Thorpe

More links to come! To see the material in Issues 1 through 17, click here.


Formatting a DateTimePicker Control

 The Unofficial Newsletter of Delphi Users - by Robert Vivrette

Formatting a DateTimePicker Control

by Robert Vivrette - RobertV@csi.com

A few days ago, I received an email from a gentleman named Steve who pointed out a failing in the DateTimePicker control. Even though it allows you to show the date in one of two formats (long and short), it did not allow you to change the time format. In Delphi 4, the situation is still not resolved. After a little bit of digging, I figured out a pretty simple way of getting the control to accept a different time format. Although this technique is being used for a DateTimePicker in "Time" display mode, it applies equally well to changing the date format (i.e. to something more than just dtShort and dtLong).

All we are really doing here is sending a message to the control telling it to change its format. This could be wrapped into a descendant control to avoid this obvious hack solution, but since it is just a single line of code (we love those...) I figured I would throw it out there and see what use people find for it.

All you need to do to try out this technique is to drop a TDateTimePicker on a form and add a button. Set the pickers Kind property to dtkTime. Then in the Button's OnClick event, add this line of code:

    SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, LongInt(PChar('hh:m:s t')));
All this does is send a DTM_SETFORMAT message to the DateTimePicker to tell it to adjust its format. The last parameter (lparam) of the SendMessage call is a pointer to the format you wish to use. In this case, I took a literal string, cast it to a PChar, and converted the PChar to a LongInt (which is what SendMessage ultimately expects). After clicking the button, the format is changed.

There is obviously little error checking here... It is up to you to pass a valid format string, and one that is appropriate to the mode the picker is in. When I set the DateTimePicker to dtkDate (to show the date instead of the time), and then sent a time formatting string, it simply decided to show the time in the format requested rather than the date as the mode indicated.

But... it gets more interesting! You can send essentially any formatting string to the picker control... To see how flexible it was, I used the following format:

      SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, LongInt(PChar('ddd, MMM dd yy   hh:mm:ss tt')));
As you can see, it is a combination of both date and time formatting commands. The result?

Now you have a DateTimePicker that allows you to manage both the date and time at once. Notice that you can select any portion of the result, for example the month, and by hitting the up and down arrow, the selection will move to the prior month or the next month respectively. Pretty cool!

There are a few drawbacks to this scheme. When you drop down the picker to display the calendar (if you are in dtkDate mode) you obviously will not have the ability to modify the time using the calendar. Same holds true for the reverse.

I am sure someone will take this idea and run with it, perhaps making a new descendant of the TDateTimePicker control that simplifies the method of working with these format strings.

Go To It!

- Robert


Drag File Helper Component

The Unofficial Newsletter of Delphi Users - by Robert Vivrette

Drag File Helper Component

by Grahame Marsh - gsmarsh@aol.com

I recently sent two components to UNDU which allowed files (strictly file path names) to be dropped on to Delphi forms or controls, and a third that responded to those dropped on the application's icon. Robert described these controls as "to and from" whereas they are actually for "to" only.

So here's a "from" solution as well!

This component allows a drag operation to be started on a control, and a list of files to be dropped into another application. But before I go on I must give a severe health warning:

  • I use some undocumented features of Windows
    It doesn't work with Win 95 Explorer, print manager or any icon etc
    It should work fully with Delphi 1 under Windows 3.1 (but I've not tested it)

Why doesn't it work with Win 95? And so what use is it? It doens't operate with Win 95 because it uses an old drag and drop mechanism for filename transfer and not the new COM interface stuff. Microsoft obviously don't want us to use it and have not enabled it within Win 95. The value of it is that it is very simple and does permit the transfer of filenames between, at least, our own applications, and with anyone else who has used the mechanism. It is difficult to say whether it will be deleted in the future from Windows, but it is currently there for backward compatiblity. Lastly it is THE mchanism for drag and drop filenames under Windows 3.1 so Delphi 1 users can use it fully.

If you had looked through the Drop components you would have seen that they are triggered by the receipt of a WM_DROPFILES message; wParam contains a handle to a memory block which contains the dropped filename information. To be a drag source we must make this happen by generating the filename list and sending it with a WM_DROPFILES message to a window that says it's prepared to accept the data.

The drag source component waits for left mouse button to be pressed and it's in the left mouse button handler where all of the action takes place. For the drag to proceed we need several conditions:

    - The source component Active property must be true
    - The source component must be linked to a control
    - There must be some filenames available
    - The user must be intending to click and drag, and not just click

The last point is interesting, the API provides a useful call which is DragDetect. This function returns true is the mouse to be moved outside of a small area around the initial click point while the left button is down, or else returns false. Borland don't appear to use it in the VCL drag and drop operations which is strange as it allows easy separation of Click and Drag operations.

I obtain the file list from the application by means of an event which requires the application to put the names into a string list. Thus the control used to initiate the drag does not have to provide the strings itself, but often will be.

To detect if a window can accept the data you test the WS_EX_ACCEPTFILES style flag (it is here that Win 95 fails to work as none of its own windows have this flag set). If the window will not accept the files the the cursor is changed to crNoDrop, if it will then to crDrag, and to be slightly posh to crMultiDrag if more than one filename is being dragged.

The drag operation ends with either the left mouse button being released, or, cancelled by the right button clicked or Esc pressed. If the left button was released over a window that says it can accept the files then it is only now left to package up the data and send it off. It is here that we get into undocumented windows with this record:

    type
      PDropFiles = ^TDropFiles;
      TDropFiles = packed record
        Size : word;             // number of bytes in this structure (8)
        MousePos : TSmallPoint;  // mouse position
        InNCArea : WordBool;     // true if mouse was in the non-client area
    //  Namelist :               // then zero terminated name list (ends #0#0 eg
      end;                       // name1#0name2#0name3#0#0 )

The size member is set to the size of this structure (SizeOf (TDropFiles)), the MousePos to the x- and y-coordinates relative to the client area of the drop window, and InNCArea is true if the the mouse was in the windows non-client area when released. This structure is immediately followed by the file pathnames, each are zero (#0) terminated and a zero length path name shows there are no more to follow. The handle to the this memory block is posted to the accepting window using a WM_DROPFILES message. It is the duty of the accepting window to free the memory block, not ours.

The zip file contains the full source, a dcr file and a simple demo. Click here to download it.

That is just about it, having indicated that this in the "wrong" way to drag and drop in win 95 I suppose I should write something for UNDU on the "right" way which is using COM interfaces.

Enjoy!

Grahame

References:
- Undocumented Windows, Schulman et al, Addison Wesley, 0-201-60834-0
- Windows 3.1: A Developers Guide, Richter, M&T Books, 1-55851-276-4


Picking Global Variables From A List

 The Unofficial Newsletter of Delphi Users - by Robert Vivrette

Picking Global Variables From A List!

by ??? - AISSSoft@aol.com and Robert Vivrette - RobertV@csi.com

From Delphi 3 and up it is a good idea to put all the global variables that you will use in your program (ex isfilesave:Boolean,Username:String) into a record. This is because a lot of times one cannot remember the names of the globals he has declered and the only way to remember the name is to scroll back to the pas where you declared the variable. However in D3 if you add the variables to a easylly rememberd record. delphi will pop up a listbox with all the
records available to that record and all you have to do is scroll up and down to find the variable that you want!

Editors Note: This is a pretty cool trick... All you need to do is to declare a record type in a globally accessed unit like this:

    Type
      TMyGlobals = Record
                     IsSelected : Boolean;
                     UserName   : String;
                     DBName     : String;
                     RecordNum  : Integer;
                     Status     : Byte;
                   end;
Followed of course by a variable of that type.
    Var
      Global : TMyGlobals;
Now, whenever you want to use a global variable, all you need to do is type the word "Global" followed by a period, and Delphi will automatically use its code completion feature to show you the fields (global variables) you have defined. Just pick one from the list and hit enter. It also reminds you of the exact type that each variable is... a nice added bonus.

But wait, there is more! If you are using the global variable on the right side of an assignment statement, the list will automatically restrict the list to variables that are type compatible. For example, if you were assigning to a labels caption, only the string variables (Username & DBName) would be in the list.

Keep in mind that this feature will work only with Delphi 3 and 4.


Sorting Out Lock Files Once and For All!

 The Unofficial Newsletter of Delphi Users - by Robert Vivrette

Sorting Out Lock Files Once and For All!

by Matt Hamilton - MHamilton@bunge.com.au

Every once in a while I've had the old "Lock file has grown too large" or "Directory is controlled by another .net file" errors. Very frustrating. So I did some reading, and came up with a solution.

The Delphi help file says that you should use the Session.NetFileDir and Session.PrivateDir properties to control where paradox puts its lock files. It recommends that, for network applications, NetFileDir be the same directory as the executable, and that PrivateDir be a local directory.

This is incorrect in two ways: Firstly, if you are running your application from a network drive, say

    F:\MyApp\MyApp.exe
. . . and the data itself is stored in a subdirectory
    F:\MyApp\MyData\
. . . then each user might not have access to "F\MyApp" - you wouldn't want them deleting the exe, for example.

Thus, the NetFileDir should really sit in the database directory "F:\MyApp\MyData\", to ensure that the users have full access to it.

Secondly, if the user runs more than one Paradox application concurrently, and both use the same local directory, say

    C:\Temp
. . . then they will get a "Directory is controlled by another .net file" error - since a lock file already exists there. So each application should have its own local directory for keeping private lock files.

Well, here's my solution. First, put this in your Datamodule's OnCreate event:

    procedure TDataModule1.DataModule1Create(Sender: TObject);
    var
       Params: TStringList;
       DataPath: string;
       TempPath: array[0..1023] of Char;
    begin
       { Find the database path }
       Params := TStringList.Create;
       try
          Session.GetAliasParams(Table1.DatabaseName, Params);
          DataPath := Params.Values['PATH'];
       finally
          Params.Free;
       end;

       { Close all active tables and reseat the lock files }
       with Session do
       begin
          Close;
          NetFileDir := DataPath;
          { Find a temporary dir for PrivateDir, and make a subdirectory under that! }
          GetTempPath(1023, TempPath);
          PrivateDir := StrPas(TempPath) + '\' + Table1.DatabaseName;
          if not DirectoryExists(PrivateDir) then
             CreateDir(PrivateDir);
       end;

       // Open the tables
       Table1.Open; Table2.Open; // etc...
    end;

Next, use this code in the datamodule's OnDestroy event:
    procedure TDataModule1.DataModule1Destroy(Sender: TObject);
    begin
       { Close all connections, thereby removing the lock files }
       Session.Close;
       { Delete our temporary Private directory }
       RemoveDir(Session.PrivateDir);
    end;
There you have it! No more lock file problems, even if you're running more than one Paradox app off the network!


Improving the TDateTimePicker

 The Unofficial Newsletter of Delphi Users - by Robert Vivrette

Enhancing the TDateTimePicker

by Steve Gill - cybercom@netinfo.com.au

Editors Note: In response to the article run earlier this month on Formatting the Time format in the TDateTimePicker component, Steve has wrapped the whole thing into a descendant class of TDateTimePicker.

I have had a go at putting a time format into a descendant component of TDateTimePicker (see attached zip file). Another shortcoming of the TDateTimePicker component is that it has no TabOrder property. This was a real barrel of laughs until I finally realised why I couldn't get the tab order to work correctly. Every time I set the tab order of the components on a form, the TDateTimePicker would default back to whatever it's setting was. I have added the TabOrder property to the component as well.

    {***************************************************************
     *
     * Component   : DateTimeEdit
     * Description : This component is a descendant of TDateTimePicker
     *             : that ships with Delphi 3.0.  It adds the ability
     *             : to specify the Time Format when using the Time
     *             : selection mode.  It also adds the missing TabOrder
     *             : property.
     * Author      : Steve Gill
     * Use With    : Delphi 3.0
     * History     : Version 1.00 09/07/98
     *
     ****************************************************************}

    unit DateTimeEdit;

    interface

    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls;

    type
      // TTimeFormat
      TTimeFormatKind = (tfSeconds, tfAMPM, tfTwoDigitHour);
      TTimeFormat = set of TTimeFormatKind;

      // TDateTimeEdit
TDateTimeEdit = class(TDateTimePicker)
private
{ Private declarations }
FTimeFormat : TTimeFormat;
procedure SetTimeFormat(Value
: TTimeFormat);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner : TComponent);
override;
published
{ Published declarations }
property TabOrder;
property TimeFormat : TTimeFormat
read FTimeFormat
write SetTimeFormat;
end;

    procedure Register;

    implementation

    {$R *.RES}

    // TDateTimeEdit
    constructor TDateTimeEdit.Create(AOwner : TComponent);
    begin
         inherited Create(AOwner);

         // Set default time format
FTimeFormat := [tfSeconds,
tfTwoDigitHour, tfAMPM];
end;

    procedure Register;
    begin
         RegisterComponents('Win32', [TDateTimeEdit]);
    end;

    procedure TDateTimeEdit.SetTimeFormat(Value : TTimeFormat);
    var
       MyTimeFormat : string;
    begin
         if FTimeFormat <> Value then
         begin
              FTimeFormat := Value;

              // Do you want one or two digit hours?
              if tfTwoDigitHour in FTimeFormat then MyTimeFormat := 'hh:mm'
                 else MyTimeFormat := 'h:mm';

              // Do you want seconds?
              if tfSeconds in FTimeFormat then MyTimeFormat := MyTimeFormat + ':ss';

              // Do you want AM/PM?
              if tfAMPM in FTimeFormat then MyTimeFormat := MyTimeFormat + ' tt';

              // Set the format
              SendMessage(Handle, $1005, 0, Longint(PChar(MyTimeFormat)));
              Invalidate;
         end;
    end;

    end.


Fixing a Menu Drawing Glitch in Delphi 4

 The Unofficial Newsletter of Delphi Users - by Robert Vivrette

Fixing a Menu Drawing Glitch in Delphi 4

by David Yowell - yowelld@hotmail.com

You may have noticed that the images for certain disabled menu items in the Delphi 4 look like indistinguishable gray blobs as seen in the following figure.

The glitch is in the VCL so it affects both the Delphi IDE and user applications created with Delphi. However, there is an easy fix that involves changing a few lines of code in the ImgList unit. In the TCustomImageList.DoDraw method eliminate line 583:

      ImageList_DrawEx(Handle, Index, FMonoBitmap.Canvas.Handle, 0,0,0,0, 0,0,
        ILD_MASK);
and in its place put
      FMonoBitmap.Canvas.Brush.Color := BkColor;
      FMonoBitmap.Canvas.FillRect(Rect(0, 0, Self.Width, Self.Height));
      ImageList_DrawEx(Handle, Index, FMonoBitmap.Canvas.Handle, 0,0,0,0, 0,0,
        ILD_TRANSPARENT);
With that change, your menus will now look like this!

Note: Modifying the code for your Delphi 4 VCL has a few pitfalls. You may want to make sure you understand what you are doing before changing code shipped from Borland/Inprise. If you need a little hand-holding, here is the key points you need to look out for:

Instructions for modifying the VCL:

  • Create a directory called [DelphiPath]\MyVCL where [DelphiPath] is the directory in which Delphi is installed.
  • Add [DelphiPath]\MyVCL as the first entry in the Library Path in the Environment Options dialog box.
  • Copy the source code of the unit you wish to modify to the [DelphiPath]\MyVCL directory.
  • Modify the VCL unit and recompile your application.
A few considerations:
  • Sometimes it is necessary to exit and restart Delphi before it will detect and compile your modified VCL code.
  • Never modify the interface section in a VCL unit.
  • In Delphi 3 & 4, your modifications will only appear at runtime since the IDE continues to make use of the standard VCL design package libraries. Also, this method will not work with runtime packages.


Delphi Users Groups

If you run a Delphi Users Group that is not on this list, please feel free to send me an email with the essentials. Please include basic information about where and when the group meets, and particularly any web links you may have to support the group. I am going to keep the info to a minimum so I can include in each issue (or maybe every other issue). I have provided a sample form to help you provide the right information.

Arizona

    Tucson Delphi Users Group - TDug
California
    Orange County Delphi Users Group
    North Bay Delphi SIG
    Delphi SIG of the Sacramento PC User Group
Canada
    Metro Halifax Delphi Developers Group
    The Toronto Area Delphi Developers Association
    Vancouver Delphi Developers Association
Colorado
    Western Slope Visual Developers Group
    Denver Borland Users Group
Iowa
    Central Iowa Delphi Users Group
Kansas
    Kansas City Delphi Users Group
Massachusetts
    The Delphi Developers Group of Greater Boston
Minnesota
    TCPC Delphi SIG
Michigan
    Royal Oak Delphi Users Group
North Carolina
    Research Triangle Park Delphi Users Group
Ohio
    Delphi SIG of the Greater Cleveland PC Users Group
    Columbus Delphi SIG
    Greater Dayton Delphi Group
Oregon
    Oregon Delphi Users Group
Pennsylvania
    Pittsburgh Area Delphi Users Group
    Borland Technologies User Group
Utah
    Salt Lake City Delphi Users Group


Tucson Delphi Users Group

Group Name: | Tucson Delphi Users Group - TDug
Person(s) in Charge: | Matthew J. Brock, Oscar Speed
Meeting Date/Time: | Third Saturday of each month, 9:00am-10:00am
Meeting Location: | DRA Software Training Center, 3434 E. 22nd St. Suite 100, Tucson, AZ
Dues: | Free
Email Address: | mjb@azstarnet.com
Phone Number: | 520-571-7203
Internet URL: |
Description: | One or more presentations, Q&A, Product Reviews


Orange County Delphi Users Group

Group Name: | Orange County Delphi Users Group
Person(s) in Charge: | Greg Stevenson
Meeting Date/Time: | Fourth Tuesday of each month at 7:00 pm
Meeting Location: | See Web Site
Dues: | See Web Site
Email Address: | See Web Site
Phone Number: | See Web Site
Internet URL: | http://www.ocdelphi.org
Description: |


North Bay Delphi Special Interest Group

Group Name: | North Bay Delphi Special Interest Group
Person(s) in Charge: | Bjarne Winkler
Meeting Date/Time: | Second and Fourth Wednesday of each month from 7:00 pm to 9:00 pm
Meeting Location: |
Dues: |
Email Address: | nts4618086@aol.com
Phone Number: |
Internet URL: |
Description: | Announcements, Q&A, Special topics each meeting.


Delphi SIG of the Sacramento PC User Group

Group Name: | Delphi SIG of the Sacramento PC User Group
Person(s) in Charge: | Robert Muir, Mike Prestwood
Meeting Date/Time: | 2nd Monday of the Month - 6:30pm
Meeting Location: | New Horizons Building, 1215 Howe Avenue, Sacramento, CA
Dues: | None
Email Address: | robertmuir@worldnet.att.net or mike@prestwood.com
Phone Number: |
Internet URL: | www.prestwood.com/forums/delphi/sdug
Description: | Announcements, Q&A, Special Topics each meeting


Metro Halifax Delphi Developers Group

Group Name: | Metro Halifax Delphi Developers Group
Person(s) in Charge: | Dave Hackett
Meeting Date/Time: | First Tuesday of each month from 7:00 pm to 9:00 pm
Meeting Location: | Maritime Life Business Park
Dues: | None
Email Address: | 71650.2646@compuserve.com
Phone Number: |
Internet URL: |
Description: | News, Q&A, Presentations


Toronto Area Delphi Developers Association

Group Name: | Toronto Area Delphi Developers Association (TaDDA!)
Person(s) in Charge: | Henri Fournier (President), Robert Kozak (Membership Director), Ted Nye (Executive Director)
Meeting Date/Time: | First Tuesday of each month
Meeting Location: | North Youk Public Library, Toronto, Ontario, Canada
Dues: | $60/year
Email Address: | membership@TaDDA.com
Phone Number: | 416-366-7150
Internet URL: | http://www.tadda.com
Description: | 3 Hours. Sessions by well known Delphi experts such as Mark Miller, Ray Konopka, Charlie Calvert, etc. and in depth sessions on all aspects of Delphi for New to Advanced users.


Vancouver Delphi Developers Association

Group Name: | Vancouver Delphi Developers Association
Person(s) in Charge: | Michael Li
Meeting Date/Time: | Third Wednesday of each month, 6:30pm
Meeting Location: | Liquor Distribution Branch, 2625 Rupert Street, Vancouver, BC
Dues: | None
Email Address: | mli@infocan.com
Phone Number: | 604-736-5888 x728
Internet URL: | http://www.infocan.com
Description: | Michael Li is usually the main speaker at meetings. Informal setting. Michael's main focus is on Delphi and Borland related topics and discussion, updates on new technology (hardware, software) coming out to the market, updates on books that are useful to particular products (provide evaluation copies for review), information on conferences coming up in Vancouver. May have guest speakers depending on the topic.


Western Slope Visual Developers Group

Group Name: | Western Slope Visual Developers Group
Person(s) in Charge: | Shane Holmes, Software Engineer, ViA Software Services
Meeting Date/Time: | Last Wednesday of each month, 6:30pm
Meeting Location: | ViA Software Services, 743 Horizon Court, Suite 368, Grand Junction, CO 81506
Dues: | None
Email Address: | sholmes@viagj.com
Phone Number: | 970-257-7010, 970-248-9733
Internet URL: | http://www.gj.net/~hap
Description: |


Denver Borland Users Group

Group Name: | Denver Borland Users Group (DeBUG)
Person(s) in Charge: | Ron Kocsis, Chuck Gadd
Meeting Date/Time: | 6:30pm, 2nd Tuesday of the Month
Meeting Location: | Suite #1350 at 5299 E. Prentice Ave, Greenwood Village, CO
Dues: | $30/year
Email Address: | cgadd@cfxc.com
Phone Number: | 303-933-4159
Internet URL: | www.fcxc.com/debug
Description: | Presentation by members or third-party companies.


Central Iowa Delphi Users Group

Group Name: | Central Iowa Delphi Users Group
Person(s) in Charge: | David W. Body
Meeting Date/Time: | Third Thursday of every month at 5:30 pm
Meeting Location: | Offices of Iowa Bankers Association, Liberty Building, 418 6th Ave. Suite 430, Des Moines, Iowa.
Dues: | None
Email Address: |
Phone Number: | 515-984-6243
Internet URL: | http://www.bigcreek.com/delphi
Description: |


Kansas City Delphi User Group

Group Name: | Kansas City Delphi User Group
Person(s) in Charge: | Shawn McDonald, Kerri VanMevern
Meeting Date/Time: | 1st Wednesday of each month, 6:30pm
Meeting Location: | DRT Systems, 4501 College Blvd., Leawood, KS
Dues: | $24/year
Email Address: | mofnet@aol.com
Phone Number: | 913-661-9669 x265
Internet URL: | http://www.kcdelphi.org
Description: | Flexible format includes presentations by members, code reviews, and question and answer


Delphi Developers Group of Greater Boston

Group Name: | Delphi Developers Group of Greater Boston
Person(s) in Charge: | Al Renhart, DisCom Systems
Meeting Date/Time: | Third Monday of each month, 7:00 pm
Meeting Location: | 10 New England Executive Park, Burlington, MA
Dues: |
Email Address: | reinhart@discom.com
Phone Number: | 508-869-6417
Internet URL: |
Description: |


TCPC Delphi SIG

Group Name: | TCPC Delphi SIG
Person(s) in Charge: | Richard Hansen
Meeting Date/Time: | 4th Wednesday of Month, 7pm
Meeting Location: | 2850 Metro Drive, Room 124 - Bloomington, MN
Dues: | None
Email Address: | rickh@artemisalliance.com
Phone Number: | 612-227-7172
Internet URL: | http://www.tcpc.com
Description: | Questions & Answers, Monthlu topic, Focus Groups.


Royal Oak Delphi Users Group

Group Name: | Royal Oak Delphi Users Group
Person(s) in Charge: |
Meeting Date/Time: | First Thursday of each month at 7:00 pm
Meeting Location: | William Beaumont Hospital (Lower Level), Royal Oak, MI. Classrooms in AB-West building.
Dues: | None
Email Address: |
Phone Number: | 810-551-5000
Internet URL: | http://ourworld.compuserve.com/homepages/STNICOL/
Description: | Constructing DLL's, SQL Server 6.5, CGI, Email enabled databases, data collection alternatives, VCL parties, book review night, etc.


Research Triangle Park Delphi Users Group

Group Name: | Research Triangle Park Delphi Users Group
Person(s) in Charge: | Mark Hutchinson
Meeting Date/Time: | Third Wednesday of each month, 5:00 pm
Meeting Location: | New Horizons Computer Learning Center - Willow Oak Bldg, Suite 116, 4625 Creekstone Drive, Durham, NC
Dues: |
Email Address: | aikimark@aol.com
Phone Number: |
Internet URL: | http://www.geocities.com/CapeCanaveral/Lab/1185/rtpdig.html
Description: |


Delphi SIG of the Greater Cleveland PC Users Group

Group Name: | Delphi SIG of the Greater Cleveland PC Users Group
Person(s) in Charge: | Bill Querry
Meeting Date/Time: | Fourth Wednesday of each month, 6:30 pm - 8:30 pm
Meeting Location: | 2747 SOM Center Rd, Willoughby OH 44094
Dues: | Free for Meetings. $25/year for GCPCUG
Email Address: | bq@bigfoot.com
Phone Number: | 440-944-9980
Internet URL: | http://www.gcpcug.org
Description: | Demos of some feature of Delphi or 3rd Party Add-On. General discussion of user's current projects & problems. Talk about latest magazines/book releases.


Columbus Delphi SIG

Group Name: | Columbus Delphi SIG
Person(s) in Charge: | Rick Ross
Meeting Date/Time: | 2nd Wednesday of every month. 7-9pm
Meeting Location: | 1091 W. Broad St., Columbus, OH
Dues: | None
Email Address: | rickross@compuserve.com
Phone Number: | 614-898-2767
Internet URL: |
Description: | Demonstrations, discussion, and training


Greater Dayton Delphi Group

Group Name: | Greater Dayton Delphi Group (GDDG)
Person(s) in Charge: | Keith Wire
Meeting Date/Time: | Second Thursday of each month
Meeting Location: | Dayton, OH
Dues: | $50/Year
Email Address: | kwire@compuserve.com
Phone Number: |
Internet URL: | http://www.aii-usa.com/gddg
Description: | Sharing of Delphi-related information


Oregon Delphi Users Group

Group Name: | Oregon Delphi Users Group
Person(s) in Charge: | Greg Postlewaite
Meeting Date/Time: | 3rd Monday of every month, 7pm
Meeting Location: | Lorenzen Center, Emanuel Hospital, Portland, OR
Dues: |
Email Address: |
Phone Number: |
Internet URL: |
Description: |


Pittsburgh Area Delphi Users Group

Group Name: | Pittsburgh Area Delphi Users Group
Person(s) in Charge: | Kirk A. Farra
Meeting Date/Time: | Second Thursday of the month at 7:00 pm
Meeting Location: | Mastech Inc.
Dues: | None
Email Address: |
Phone Number: | 412-452-6121
Internet URL: | http://www.nauticom.net/www/kfarra
Description: | We cover Delphi and any related products/tools. Members are exposed to many 3rd party components and have a local support network for Q/A. Members get to review many products before they are released and get information on local job opportunities and contracting positions.


Borland Technologies User Group

Group Name: | Borland Technologies User Group
Person(s) in Charge: | Matt Beckius
Meeting Date/Time: | Undetermined (we are just forming now)
Meeting Location: | Philadelphia, PA
Dues: | Undetermined
Email Address: | Undetermined
Phone Number: | 610-409-8229 extension 8
Internet URL: | http://www.sourcetechcorp.com/borland.htm
Description: | Product Reviews, Demonstrations, Discussions


Salt Lake City Delphi Users Group

Group Name: | Salt Lake City Delphi Users Group
Person(s) in Charge: | Robert Love, John Rendell, Mike Mormondo
Meeting Date/Time: | 3rd Thursday of every month
Meeting Location: | Franklin Covey Headquarters
Dues: | None
Email Address: | slcdug@lovedata.com
Phone Number: | 801-296-0809
Internet URL: | http://www.lovedata.com/delphislc
Description: | Each meeting is different but usually it is a presentation of a new idea or product that relates to delphi. There is a Q/A Session in every meeting to help you move along as well.


Form For Users Groups

If your Delphi Users Group is not mentioned in the list, please take a moment to email me the particulars about your group. To make the information as uniform as possible, please cut and paste this form into an email and send it to me at RobertV@compuserve.com. Please only send one if you are in charge of the group… I don't want to have to wade through 30-40 copies for each group… Thanks!

Group Name:
Person(s) In Charge:
Meeting Date/Time:
Meeting Location (include City & State):
Dues:
Email Address:
Phone Number:
Internet URL:
Brief description of meeting format:


 The Delphi Workout
  • Professional Delphi Training for Under £100
  • One of the World's leading Delphi Trainers
  • Great sessions to enhance your Delphi Skills
  • FREE Full 170 page course book
  • FREE Developers CD with over 1200 tools and components
  • FREE £600 off Borland Tools
  • Sessions in London (Westminster Hall) and Manchester (United Football Club)

    • Zack Urlocker (Borland VP Marketing) says: "A must for Developers who want to take their Delphi skills to the next level. Highly recommended"

    To register:

    Phone:      0800 833022
    Fax back:   0118 954 6978
    E-Mail:     workout@multizone.com
    On-Line:    http://www.multizone.com/workout
    Mail:       The Delphi Workout
                Multizone International
                Caversham Business Centre
                23 Prospect St, Caversham, RG4 8JB.
    When:       19th, 20th March 1998 and other dates TBA

    Course Outline:

    8.30-9.00 Registration

    9.00-9.30 Warming up
    In this section we'll discuss some generic tips to working with Delphi 2 including some focus on exciting new methods of working in Delphi 3

    9.00-9.30 - Delphi Overview
    Delphi 2&3, ObjectPascal, Code Insights, Components, BDE. This session will give a very quick overview of some 32-bits Delphi features, such as Code Insights, the VCL Component Palette/Packages, Data Modules, Form Inheritance, ActiveX controls, and the Database-Form Wizard, etc.

    9.30-10.45 The Top 10 Ways to becoming a better Delphi Programmer
    In this section we'll focus on ObjectPascal, exception handling, and performance optimization, positioning most of this on Delphi 2, but highlighting new better ways to do it in Delphi 3 as well

    9.30 -10.00 - ObjectPascal
    ObjectPascal, Exceptions, Try-Except, Try-Finally, Raise, Assert. This session will start with new ObjectPascal features, followed by the benefits of structured exception handling as the preferred way of error detection, error handling and resource management. All Delphi 2 compatible. At the end of the session, we'll also examine a new Delphi 3 feature called assertions, to support preconditions and error detection.

    10.00-10.45 - 32-bits Efficiency
    Profiling, Algorithms & Datastructures, Language Features. This session will identify the steps of performance optimization: finding bottle-necks, checking algorithms & datastructures, and new 32-bits Delphi language features. A number of examples will illustrate what difference it can make in performance to know and apply the tips and techniques from this session.

    10.45-11.00 Coffee

    11.00-12.30 The Top 10 Secrets to building Rapid Applications
    In this section we'll focus on the developer and his building tools (components, packages and Delphi IDE experts/wizards) to help building Rapid Applications.

    11.00-11.45 - Component Building
    Component Wizard, Properties, Methods, Events. This session will teach the basics of component building, as we focus on the Component Wizard, followed by the creation of a component skeleton, the addition of properties, methods, events and event handlers. We'll move on by installing the component in the Component Palette, or in a Delphi 3-specific package

    11.45-12.00 - Delphi 3 Packages
    Design Time, Run Time, Deployment, Versioning. This session will explain what Delphi 3 packages are, how they can benefit our projects (size of executable), how to make our own custom packages with components, and how to deploy them correctly.

    12.00-12.30 - Experts and Wizards
    IDE, Open Tools API, Experts, Wizards. This session will show how to extend the Delphi IDE itself by using the Open Tools API to write Experts (that plug into the IDE) and Wizards, including some User Interface guidelines for writing Wizards.

    12.30-13.30 Lunch

    13.30-14.00 Unleashing the hidden power of Databases within Delphi
    BDE, Tables, Queries, data-aware components. This session will show the database basics, including tables, queries, data-aware components and how to (re-) create your own tables with ObjectPascal source code.

    14.00-14.45 - The Best of Delphi (UK-BUG)
    A Borland User Group representative will highlight how to unearth the most comprehensive guide (the DIL database) where to find free Delphi Code,
    tools, samples and support.

    14.45-17.00 Building Killer Web Applications
    In this section we'll start by seeing how we can use Delphi 2 for data-aware net development, followed by some next exciting techniques and net development support in Delphi 3.

    14.45-15.10 - Table to HTML
    HTML, Tables, Image Map, Table-layout, Index Fields, Frames. This session will shortly introduce the basic concepts of HTML, followed by a Wizard that can be used to convert the contents (records) of a table to a set of static HTML-pages that can be uploaded to the web.

    15.10-15.30 - CGI and WinCGI
    CGI/WinCGI, GET/POST, State, Debugging CGI. This session will extend our HTML knowledge with the Common Gateway Interface protocol, which is a way to interact between the web client and the web server. Delphi 2 compatible.

    15.30-15.45 Afternoon Tea

    15.45-16.15 - Delphi 3 ActiveForms
    New ActiveForm, Converting existing Forms, Deployment. This session will illustrate how to write, use and deploy ActiveForms on the web, including an example where we publish a table on an ActiveForm on the Internet.

    16.15-17.00 - Delphi 3 C/S WebModules
    WebModule, Dispatcher, PageProducer, TableProducers. This session will demonstrate the Delphi 3 Client/Server-only capabilities of the Web Modules to create and support CGI/WinCGI and ISAPI/NSAPI web server applications, including an example where we connect a database to the web, with options to browse, query and update the database contents.

    17.00-17.30 Cooling Down

    17.00-17.30 - The Future of Delphi (Borland)
    A Borland Product Manager will talk to the audience for half an hour on the future of Delphi... and answer questions from the audience.


Product Reviews & Announcements

I have moved all the announcements and reviews of books, and other Delphi related products to this page. If you have a product you would like to see reviewed, or wish to do a review yourself, please feel free to contact me at RobertV@csi.com.

03/25/98 - WinHelp Office Review
Issue #24 - A Second Look at MicroEdge's Visual SlickEdit
Issue #23 - Book Review: Hidden Paths of Delphi 3
Issue #23 - Book Review: Building Delphi 2 Database Applications
Issue #23 - Raize Components
Issue #22 - Programmers Guild Animated Tray Icon
Issue #22 - MicroEdge's Visual SlickEdit
Issue #22 - IniOut Component
Issue #22 - Addict 2.2 Spell Checker for Delphi
Issue #21 - Book Review: Delphi Component Design
Issue #20 - Delphi Books and Periodicals
Issue #19 - SpeedDaemon Code Profiler
Issue #19 - A Look at MagiKit
Issue #18 - Object Express by OopSoft
Issue #18 - Announcement: IniOut Component
Issue #18 - Book Review: Delphi Component Design by Danny Thorpe

More links to come! To see the material in Issues 1 through 17, click here.


Delphi Job Sites

Below are some of the Delphi Job sites currently available. If you know of others, please let me know about them and I will add a link on this page.

    Employment at Borland/Inprise
    http://www.borland.com/about/hr/

    Borland/Inprise Delphi Jobs Newsgroup
    news://forums.inprise.com/borland.public.delphi.jobs

    Delphi Job Hunter
    http://www.inthemiddle.co.uk/jobhunter/delphi/default.htm

    Mike Strock's Delphi Jobs Site
    http://www.oz.net/~mstrock/delphijobs.html

    Greg Postlewait's Delphi Jobs Site
    http://www.teleport.com/~gpost/djobs

    Richard Fellner's Delphi Job Exchange
    http://www.user.xpoint.at/r.fellner/DELPHIJ.HTM

    Richard Maley's Delphi Jobs Service
    http://www.advdelphisys.com/jobs/jobs_all.html

    Becker Technology, Inc.
    http://www.beckertechnology.com/emplopps.htm

Additional Programming-Related Job Sites
    Jobs for Programmers
    http://www.prgjobs.com

    JobServe UK
    http://www.jobserve.com


The Unofficial Newsletter of Delphi Users - News

News Page

July 31st, 1998

Looks like the HTML Help version of UNDU is working well... Haven't had any major problems and the feedback has been overwhelmingly positive. The new format uses the Microsoft HTML Help viewer application, and if you are a user of Win95 or WinNT and cannot view this test issue of UNDU, you may want to visit the Microsoft HTML Help site to get the viewer. Win98 includes this viewer as part of its standard configuration. Also, if you have downloaded and installed IE4, you should already have the new viewer. As far as I know, there is not a system in place that allows Win3.x users to view HTML Help files. Correct me if I am wrong!

When you disable a menu item in Delphi 4 that has an associated glyph, have you ever wondered why your tiny little work of art turns into a gray shapeless blob? Turns out it is a bit of a glitch in the Delphi 4 VCL. To learn more, check out David Yowell's article Fixing a Menu Drawing Glitch in Delphi 4.

There has been a lot of interest in the Pascal/Delphi compiler story I mentioned on the 29th. I suppose there is little need for me to be a middleman for people showing interest in this, so the developer of this project has indicated it would probably be easier to just include his email and web site. So here it is:

    Email Address - michael@tfdec1.fys.kuleuven.ac.be
    Web Site - http://tfdec1.fys.kuleuven.ac.be/~michael/fpc/fpc.html

Also today, Lighthouse Software has announced the availability of DocSuite, a document management system primarily used to track Material Safety Data Sheets (MSDS). The reason I mention this is that it is a pretty neat tool developed with Delphi 3 and I had worked on some aspects of its user interface. Hey... a little free advertising never hurt anyone... ;-)

I have a bunch more stuff to put up in the next day or two but ran out of time today... stay tuned!

July 29th, 1998

A bunch of things to cover today...

First, those of you who use my IniOut component, I recently received my upgrade to Delphi 4 and have updated it to support this latest version. You all should be receiving the update today, but if for some reason you do not, please email me and I will send it right out. If you are not a user of IniOut and would like to try the shareware version, click here. If you would like to see a review of IniOut, click here.

As many of you know, at the beginning of this year, I discontinued the distribution of the downloadable versions of UNDU. Starting with February, the issues were only readable online. Due to popular demand however, it looks like this is going to change! A reader of UNDU in Indonesia, Irwan Adriansyah, has very gratiously offered to convert the material each month into a downloadable version in HTML Help format. We are still in the process of ironing out what they will look like, but he has a first draft copy of the February, 1998 "issue" of UNDU. If you would like to download it and check it out, please click here. Remember however, that this is in HTML Help format and not the older Windows HLP format. As a result, some of you (most likely Windows 3.x users) will not be able to do anything with this file. I have tested it with Win95, Win98, and WinNT and it works fine in all of these environments. I suspect, however, that some Win95 users who have older versions of some of the system DLL's will also not be able to view this file. If you have any comments or suggestions on the design or functionality of these files, please let me know. You may also want to send a brief thank-you note to Irwan as he is volunteering his spare time to do this for us. Please keep the emails brief though, because he pays for his connect time to the internet.

More interesting news... I have learned of a project which is working on implementing a free Delphi compatible 32-bit pascal compiler.

The project is still in the early stages, but it's aims are as follows:

  • Borland Pascal 7.0 and Delphi (2 through 4) compatibility.
  • A cross-platform implementation of the compiler and it's run-time library. Currently compilers are available (in different stages of completion) for DOS, Linux, OS/2 and 32-bit Windows.
  • Implementation of a Free Component Library, a counterpart to the Delphi VCL, which should also be cross-platform (as far as possible).

The project must be considered as still in beta-stage, since the Delphi compatibility isn't 100% finished yet, although this is expected in the near future. I presume from my conversations with the developer that we are just talking about the "compiler" here, not any kind of environment for designing forms, or a code editor or anything like that. I might be wrong though. However, the potential ability to take a 32-bit app designed and coded using Delphi, and then recompiling it for use on Linux will no doubt draw considerable interest.

If you are interested in this project, please let me know and I will forward your comments or questions to the developer.

July 20th, 1998

I will be taking a short vacation and will be back on July 27th. Look for a big update then!

July 15th, 1998

Last month, there was a mention about a Delphi memory checker called MemProof. I recently received an email from Mattias Linde who reports that there is another freeware solution called Snoop which can be found at the IHS Software web site. Looks interesting, but I haven't tried it out yet. Maybe someone who has had some experience with one or both of these products could do a little review/comparison of them?

Two more articles today: The first is one from Matt Hamilton on managing network lock files entitled Sorting Out Lock Files Once And For All! Also today, Steve Gill follows-up the TDateTimePicker article from earlier this month with a descendant component in Enhancing the TDateTimePicker Component.

Also, I recently have received a flurry of e-mails from users offering neat IDE and/or code editor shortcuts. You are going to be seeing a few of them over the next few days, but it got me thinking that there are probably a lot of people out there who have their own little customizations they have done to Delphi's code editor that other readers could benefit from. If you have one that you think is unique, please send it along. Remember, every contributor to UNDU gets included in the random prize drawing at the end of the month!

July 13th, 1998

Some interesting company and product announcements from Baltic Solutions as well as a very cool trick that helps you to see all your global variables in a list from within the Delphi IDE. Read more about it in Picking Global Variables from a List.

July 7, 1998

Another small adjustment to this site... I will be moving all Reviews of Delphi-related products (software, books, etc) to their own link on the button bar to the left.

There will be two prizes awarded to randomly selected contributors this month. The first goes to Grahame Marsh for his articles on the The MultiLine Hint Property Editor and the Drop File Helper Component. His prize is a copy of InputPro by FarPoint Technologies. InputPro is an impressive set of custom editing controls in their Visual Architect Series. You can learn more about InputPro by visiting FarPoint's web site at http://www.fpoint.com.

The second prize winner is Chad Roalson for bringing a Delphi Job site to my attention. His prize is a copy of the Delphi Informant Works CD which contains all issues of Delphi Informant through the end of 1997.

We start off the month of July with a bang by bringing two more great articles. As you may recall, last month Grahame Marsh presented an article on the Drop File Helper component which, as it turns out, I said could handle dragging and dropping files to and from your Delphi Apps. As it turns out, it was only a "Drop" file helper. Grahame jumped on the opportunity and wrote a companion article entitled Drag File Helper Component.

Also, a reader recently commented on a failing in the TDateTimePicker component which sparked some investigative juices in me. After some research, I came up with an article on Formatting a TDateTimePicker. It's one of those "1 line of code" solutions, so I think you will all find it interesting.

Lastly, there have been a few more additions to the Delphi Job Site link. Thanks for everyone's help on putting this together.

In order to keep the size of the News Page to a minimum, I will be archiving previous months and listing them at the bottom.
News Page for June, 1998
News Page for May, 1998
News Page for April, 1998
News Page for March, 1998
News Page for February, 1998


The Unofficial Newsletter of Delphi Users - Past UNDU Issues

Past UNDU Issues

Below are links to all the issues of UNDU that are currently available to read online. If you want to obtain these same issues in a downloadable format, please check the section on Downloadable UNDU Issues.

Issue #24 - December '97
Issue #23 - September '97
Issue #22 - June '97
Issue #21 - May '97
Issue #20 - March '97
Issue #19 - January '97
Issue #18 - November '96
Issue #17 - October '96
Issue #16 - September '96
Issue #15 - August '96
Issue #14 - June '96
Issue #13 - May '96
Issue #12 - February '96
Issue #11 - January '96
Issue #10 - December '95
Issue #9 - November '95
Issue #8 - October '95
Issue #7 - August '95
Issue #6 - July '95
Issue #5 - June '95
Issue #4 - May '95 (b)
Issue #3 - May '95 (a)
Issue #2 - April '95
Issue #1 - March'95


The Unofficial Newsletter of Delphi Users - Downloadable UNDU Issues

Downloadable UNDU Issues

Since issue #1 in March of 1995, all issues of The Unofficial Newsletter of Delphi Users has been published as Windows Help files. Below are links to each of these files so you can download them individually, or all at once. To speed downloading time, I have Zipped them, so you will need PKUNZIP or an equivalent program to decompress them. If you don't have a ZIP compatible program, you can download just the HLP file.

When you unzip them, I suggest that you put all issues in a single directory. Many of the files have links to other issues and if they are all present together, they will behave normally. Most of the later issues in ZIP file format also have a contents file (*.CNT) which is used to by the Windows help system to display a complete list of all issues available.

Effective January, 1998 - I will no longer be arranging UNDU as "issues", but rather as individual articles that will be posted on the UNDU web site every few days. At some time in the future, I may start packaging these articles as downloadable WinHelp files, but I am not promising anything at this point.

Issue # - Month of Release | Zip File | HLP File
Issue #24 - December '97 | DN971201.ZIP | DN971201.HLP
Issue #23 - September '97 | DN970901.ZIP | DN970901.HLP
Issue #22 - June '97 | DN970601.ZIP | DN970601.HLP
Issue #21 - May '97 | DN970501.ZIP | DN970501.HLP
Issue #20 - March '97 | DN970301.ZIP | DN970301.HLP
Issue #19 - January '97 | DN970101.ZIP | DN970101.HLP
Issue #18 - November '96 | DN961101.ZIP | DN961101.HLP
Issue #17 - October '96 | DN961001.ZIP | DN961001.HLP
Issue #16 - September '96 | DN960901.ZIP | DN960901.HLP
Issue #15 - August '96 | DN960801.ZIP | DN960801.HLP
Issue #14 - June '96 | DN960601.ZIP | DN960601.HLP
Issue #13 - May '96 | DN0596.ZIP | DN0596.HLP
Issue #12 - February '96 | DN0223.ZIP | DN0223.HLP
Issue #11 - January '96 | DN0118.ZIP | DN0118.HLP
Issue #10 - December '95 | DN1212.ZIP | DN1212.HLP
Issue #9 - November '95 | DN1109.ZIP | DN1109.HLP
Issue #8 - October '95 | DN1010.ZIP | DN1010.HLP
Issue #7 - August '95 | DN0831.ZIP | DN0831.HLP
Issue #6 - July '95 | DN0725.ZIP | DN0725.HLP
Issue #5 - June '95 | DN0626.ZIP | DN0626.HLP
Issue #4 - May '95 (b) | DN0524.ZIP | DN0524.HLP
Issue #3 - May '95 (a) | DN0501.ZIP | DN0501.HLP
Issue #2 - April '95 | DN0401.ZIP | DN0401.HLP
Issue #1 - March '95 | DN0315.ZIP | DN0315.HLP


Baltic Solutions

 The Unofficial Newsletter of Delphi Users - by Robert Vivrette

Programmers' Guild's Products Acquired by Baltic Solutions - May 27, 1998

Baltic Solutions would like to announce that it acquired the products DesignerForms (c) and Animated SystemTray Icon (c) previously developed and marketed by Programmers' Guild. Baltic Solutions will continue to develop/support them in the future. In forthcoming days, you'll see some more details about this agreement, and how this will effect both our and Programmers' Guild's customers.

"Effective May 25, 1998, sales, upgrades, and support for the Animated SystemTray Icon and DesignerForms will be supplied by Gintaras Pikelis of Baltic Solutions. Please contact them directly with any inquiries concerning these products."

- Brad Parks - Development coordinator, Programmers' Guild

Stay tuned, or contact us directly for more information.

Contact and additional information sources:

The Programmers' Guild web site (soon to be closed):
http://www.programmersguild.com

Baltic Solutions' web site:
http://users.voras.lt/~gintaras/bs
Email: bal-sol@klaipeda.omnitel.net

Gintaras Pikelis - Baltic Solutions
email : gintaras@takas.lt
http://www.balticsolutions.com


Group Name:
Person(s) in Charge:
Meeting Date/Time:
Meeting Location:
Dues:
Email Address:
Phone Number:
Internet URL:
Description: