It depends how carried away you want to go.
You can simpy do it with carefull placement of units. As the
units are only referenced by name, you could have eg UserRoutines.pas in every
project directory (not on the path) that impliments the project specific
stuff.
Alternately, you can have a base object or interface defined that
includes the relevent routines. That gets overriden for each
project. When the project starts it sets a global varaible (or uses a
factory method etc) with the correct instance.
Normally however, I would do something like that with
events. On startup, sete the appropriate event handlers. alternatly
pass them in as part of the method parameters.
Regards
Sean
-------------------------
Sean
Cross
CRM
06 835 5868
021 270 3466
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of John Bird
Sent: Friday, 11 November 2005 11:18 a.m.
To: 'NZ Borland Developers Group - Delphi List'
Subject: [DUG]User defined routines...I use several shared/library routines called from different places in programs. Sometimes in one of these I want to call a further routine which executes code that is relevant to the parent application only. What is the best way to do this in Delphi?for example in other languages I could do:example -1Program1 calls Libraryroutine1Libraryroutine1 calls routine with a fixed name eg UserRoutine1And I would have several separate source versions of UserRoutine1, one for each application and the link file for the application would specify whihch one got linked in, and hence called and executed.I can't do this in Delphi as the unit itself contains the linking information in the uses clauses.example - 2In other languages I have see code likeCallroutine(routinename,arg1,arg2,arg3.....) where routinename is a string variable that can be set to the value you want in Application1, and the Callroutine would then call this routine Routinename with the arguments arg1 arg2 etc (ie the routine name becomes a variable and can be pointed at different code. Is this possible or recommended in Delphi?example - 3This is one way you can do it in Delphi - you have a shared routine UserRoutine1 containing all the code for all applications that need it....egprocedure UserRoutine1...if ExtractFileName(Application.exename)='Fred.exe' thenbegin........endif ExtractFileName(Application.exename)='Joe.exe' thenbegin........endif ExtractFileName(Application.exename)='Bill.exe' thenbegin........endThis works but is very clumsy in that code not relevant to the application is compiled in, and also objects/forms/globals relevant to one application are not useable as other applications will not be using them. In some cases where the UserRoutine is doing very limited local stuff this may be fine, or limited numbers of these can be passed in as parameters through LibraryRoutine1 to UserRoutine1.What is the recommended or most elegant way to do this in Delphi? I am thinking maybe the easiest is using an include directive to pick up the relevant library code for LibraryRoutine1 routine directly into the application unit - which already contains code for UserRoutine1John
_______________________________________________ Delphi mailing list [email protected] http://ns3.123.co.nz/mailman/listinfo/delphi
