<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Message</TITLE>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content=2002-11-01 name=date>
<STYLE type=text/css></STYLE>

<META content="MSHTML 6.00.2900.2769" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=359190401-11112005><FONT face=Arial 
color=#0000ff>It depends how carried away you want to go.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=359190401-11112005><FONT face=Arial 
color=#0000ff></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=359190401-11112005><FONT face=Arial 
color=#0000ff>You can simpy do it with carefull placement of units.&nbsp; 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.&nbsp;</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=359190401-11112005><FONT face=Arial 
color=#0000ff>&nbsp; </FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=359190401-11112005><FONT face=Arial 
color=#0000ff>Alternately, you can have a base object or interface defined that 
includes the relevent routines.&nbsp; That gets overriden for each 
project.&nbsp; When the project starts it sets a global varaible (or uses a 
factory method etc) with the correct instance.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=359190401-11112005><FONT face=Arial 
color=#0000ff></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=359190401-11112005><FONT face=Arial 
color=#0000ff>Normally however, I would do something like that with 
events.&nbsp; On startup, sete the appropriate event handlers.&nbsp; alternatly 
pass them in as part of the method parameters.</FONT></SPAN></DIV><!-- Converted from text/plain format -->
<P><FONT size=2>Regards<BR><BR>Sean<BR>-------------------------<BR>Sean 
Cross<BR>CRM<BR>06 835 5868<BR>021 270 3466 </FONT></P>
<DIV>&nbsp;</DIV><BR>
<BLOCKQUOTE dir=ltr 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> delphi-bounces@ns3.123.co.nz 
  [mailto:delphi-bounces@ns3.123.co.nz] <B>On Behalf Of </B>John 
  Bird<BR><B>Sent:</B> Friday, 11 November 2005 11:18 a.m.<BR><B>To:</B> 'NZ 
  Borland Developers Group - Delphi List'<BR><B>Subject:</B> [DUG]User defined 
  routines...<BR></FONT><BR></DIV>
  <DIV></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff size=2>I 
  use several shared/library routines called from different places in 
  programs.&nbsp; Sometimes in one of these I want to call a further routine 
  which executes code that is relevant to the parent application only.&nbsp; 
  What is the best way to do this in Delphi?</FONT></SPAN></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff size=2>for 
  example in other languages I could do:</FONT></SPAN></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2>example&nbsp; -1</FONT></SPAN></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2>Program1 calls Libraryroutine1</FONT></SPAN></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2>Libraryroutine1 calls routine with a fixed name eg 
  UserRoutine1</FONT></SPAN></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff size=2>And 
  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.</FONT></SPAN></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff size=2>I 
  can't do this in Delphi as the unit itself contains the linking information in 
  the uses clauses.</FONT></SPAN></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2></FONT>&nbsp;</DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2>example - 2</FONT></SPAN></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff size=2>In 
  other languages I have see code like</FONT></SPAN></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2>Callroutine(routinename,arg1,arg2,arg3.....)&nbsp;&nbsp;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&nbsp; (ie the routine name becomes a variable 
  and can be pointed at different code.&nbsp; Is this possible or recommended in 
  Delphi?</FONT></SPAN></DIV>
  <DIV><SPAN class=859364820-10112005><FONT face=Arial color=#0000ff 
  size=2></FONT></SPAN>&nbsp;</DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>example - 3</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005></SPAN></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN class=859364820-10112005>This 
  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....</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005></SPAN></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN class=859364820-10112005>eg 
  </SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005></SPAN></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>procedure&nbsp;UserRoutine1...</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005></SPAN></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>if&nbsp; 
  ExtractFileName(Application.exename)='Fred.exe' then</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>begin</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>&nbsp;&nbsp;&nbsp; ....</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>&nbsp;&nbsp;&nbsp; ....</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>end</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN class=859364820-10112005>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>if&nbsp; 
  ExtractFileName(Application.exename)='Joe.exe' then</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>begin</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>&nbsp;&nbsp;&nbsp; ....</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>&nbsp;&nbsp;&nbsp; ....</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>end</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005><SPAN class=859364820-10112005>&nbsp; 
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>if&nbsp; 
  ExtractFileName(Application.exename)='Bill.exe' then</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>begin</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>&nbsp;&nbsp;&nbsp; ....</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>&nbsp;&nbsp;&nbsp; ....</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005>end</SPAN></FONT></DIV></SPAN></SPAN></FONT></DIV></SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005></SPAN></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN class=859364820-10112005>This 
  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.&nbsp; 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.</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005></SPAN></FONT>&nbsp;</DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN class=859364820-10112005>What 
  is the recommended or most elegant&nbsp;way to do this in Delphi?&nbsp; I am 
  thinking maybe&nbsp;the easiest is&nbsp;using an include&nbsp;directive to 
  pick up the relevant library code for LibraryRoutine1&nbsp;routine directly 
  into the application unit - which already contains code for 
  UserRoutine1</SPAN></FONT></DIV>
  <DIV><FONT face=Arial color=#0000ff size=2><SPAN 
  class=859364820-10112005></SPAN></FONT>&nbsp;</DIV>
  <DIV class=Section1>
  <P class=MsoAutoSig align=left>John<FONT face=arial color=navy 
  size=1></P></DIV></BLOCKQUOTE></FONT></BODY></HTML>