Doug,
Thanks for the update and futher info!  I helped on a Lego project several 
years ago for a friend in the UK but similar experiences - all gratus and i 
didn't get to do any followup.

Cheers,
Charlie

  ----- Original Message ----- 
  From: Doug Hale 
  To: [email protected] 
  Sent: Thursday, January 15, 2009 9:18 PM
  Subject: Re: [delphi-en] Problem with ShellExecute


  Charlie,
  Thats a real good guess - not a pic - a SENIX/UBICOM/Parallax SX18/22 
  SX48/52
  these are 50/75/100Mhz versions of the small PICs

  I wrote all this due to a hardware project using 8 SXs. - but then the 
  client bailed...
  ... About 75K lines of code on my dime... but no real testing done on it.

  Doug

  Charlie Chambers wrote:
  > Doug,
  > Thanks for the explanation. I think i understand a bit better. If not too 
much trouble or too nosy are you using this for pic microprocessors type of app 
simulator? 
  >
  > Cheers,
  > Charlie
  >
  >
  > ----- Original Message ----- 
  > From: Doug Hale 
  > To: [email protected] 
  > Sent: Thursday, January 15, 2009 7:00 PM
  > Subject: Re: [delphi-en] Problem with ShellExecute
  >
  >
  > Charlie,
  >
  > > Sounds like that your getting RTTI from the DLL to build the components, 
if i'm understanding.
  > > 
  >
  > I don't use RTTI.
  > The Abstract Class defines a set of Class Functions that each Class 
  > implements.
  > This allows you to find out what class it is and not use RTTI.
  >
  > Here is the Abstract Class:
  >
  > {Copyright 2003 Doug Hale}
  > {Copyright This is an unpublished work of Doug Hale}
  > unit Model;
  > interface
  > uses
  > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
  > type
  > TRunSimCmnd = (rscStart, rscStop, rscStep, rscSlowStart, rscSlowStop, 
  > rscShow, rscHide);
  > TRunSim = Procedure(Cmnd : TRunSimCmnd) of object;
  > TSimModel = class(TForm)
  > private
  > public
  > RunSim : TRunSim;
  > class function GetStatus : String; virtual; abstract;
  > class function GetLibraryName : String; virtual; abstract;
  > class function GetAttributeNames : String; virtual; abstract;
  > function GetInstance : String; virtual; abstract;
  > function GetPin(Ndx : Integer) : Byte ; virtual; abstract;
  > function GetPinCount : Integer; virtual; abstract;
  > function GetPinName(Ndx : Integer) : String;virtual; abstract;
  > function GetPinNumber(Name : String) : Integer; virtual; abstract;
  > function Run(TimeStep : Word; AccumulatedTime : LongWord) : Boolean; 
  > virtual; abstract;
  > procedure PutInstance(Name : String); virtual; abstract;
  > procedure PutPin(Ndx : Integer; Value : Byte); virtual; abstract;
  > Property InstanceName : String read GetInstance write PutInstance;
  > Property Pin[Ndx : Integer] : Byte read GetPin write PutPin;
  > Property PinCount : Integer read GetPinCount;
  > Property PinName[Ndx : Integer] : String read GetPinName;
  > Property PinNumber[Name : String] : Integer read GetPinNumber;
  > function GetPinLoc(Ndx : Integer) : TPoint; virtual; abstract;
  > function GetShapeSize : TPoint; virtual; abstract;
  > Property PinLoc[Ndx : Integer] : TPoint read GetPinLoc;
  > Property ShapeSize : TPoint read GetShapeSize;
  > function GetDevicePinNumber(Ndx : Integer) : Integer; virtual; abstract;
  > Property DevicePinNumber[Ndx : Integer] : Integer read 
  > GetDevicePinNumber;
  > end;
  > CSimModel = Class of TSimModel;
  > function CalcPin(Pin, Width : Integer; IsLeft : Boolean) : TPoint;
  > function CalcBox(Left, Right, Width : Integer) : Tpoint;
  > function MakePoint(X, Y : Integer) : Tpoint;
  > implementation
  > uses Math;
  > function MakePoint(X, Y : Integer) : Tpoint;
  > var
  > P : TPoint;
  > begin
  > P.x := X;
  > P.y := Y;
  > result := P;
  > end;
  > function CalcPin(Pin, Width : Integer; IsLeft : Boolean) : Tpoint;
  > var
  > P : TPoint;
  > begin
  > if IsLeft then
  > P.x := 0
  > else
  > P.x := Width-1;
  > P.y := (Pin + 2) * 10;
  > result := P;
  > end;
  > function CalcBox(Left, Right, Width : Integer) : Tpoint;
  > var
  > P : TPoint;
  > begin
  > P.x := Width;
  > P.y := (Max(Left, Right) + 3) * 10;
  > result := P;
  > end;
  > end.
  >
  > And here is a simple simulator component:
  > {Copyright 2003 Doug Hale}
  > {Copyright This is an unpublished work of Doug Hale}
  > library s74244;
  > uses
  > ShareMem,
  > SysUtils,
  > Classes,
  > Windows,
  > Messages,
  > Graphics,
  > Controls,
  > Forms,
  > Dialogs,
  > U74244 in 'U74244.pas' {Generic},
  > Model in 'Model.pas';
  > {$E .mdl}
  > function GetSimClass : CSimModel; export; stdcall;
  > begin
  > result := TMC74245;
  > end;
  > exports
  > GetSimClass;
  > begin
  > end.
  >
  > {Copyright 2003 Doug Hale}
  > {Copyright This is an unpublished work of Doug Hale}
  > unit U74244;
  > interface
  > uses
  > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  > Model;
  > const
  > PartName = '74244';
  > AttribList = 'Name';
  > PinCount = 20;
  > BoxWidth = 60;
  > PinList = 
  > 
'#1OE,1D0,2O0,1D1,2O1,1D2,2O2,1D3,2O3,GND,2D3,1O3,2D2,1O2,2D1,1O1,2D0,1O0,#2OE,VCC';
  > PinNums : Array[0..PinCount-1] of Integer = 
  > (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
  > PinPos : Array[0..PinCount-1] of Record Pos : Integer; OnLeft : 
  > Boolean; end =
  > ((Pos:0;OnLeft:True)
  > ,(Pos:1;OnLeft:True)
  > ,(Pos:2;OnLeft:True)
  > ,(Pos:3;OnLeft:True)
  > ,(Pos:4;OnLeft:True)
  > ,(Pos:5;OnLeft:True)
  > ,(Pos:6;OnLeft:True)
  > ,(Pos:7;OnLeft:True)
  > ,(Pos:8;OnLeft:True)
  > ,(Pos:9;OnLeft:True)
  >
  > ,(Pos:9;OnLeft:False)
  > ,(Pos:8;OnLeft:False)
  > ,(Pos:7;OnLeft:False)
  > ,(Pos:6;OnLeft:False)
  > ,(Pos:5;OnLeft:False)
  > ,(Pos:4;OnLeft:False)
  > ,(Pos:3;OnLeft:False)
  > ,(Pos:2;OnLeft:False)
  > ,(Pos:1;OnLeft:False)
  > ,(Pos:0;OnLeft:False)
  > );
  > const
  > AV : Array[False..True] of Array[False..True] of Byte = ((0,6), (3,3));
  > type
  > TMC74245 = class(TsimModel)
  > procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
  > private
  > _InstanceName : String;
  > I1, I2, O1, O2 : Array[0..3] of Boolean;
  > NE1, NE2 : Boolean;
  > PinNames : TStringList;
  > public
  > function Run(TimeStep : Word; AccumulatedTime : LongWord) : Boolean; 
  > override;
  > function GetInstance : String; override;
  > function GetPin(Ndx : Integer) : Byte ; override;
  > function GetPinCount : Integer; override;
  > function GetPinName(Ndx : Integer) : String;override;
  > function GetPinNumber(Name : String) : Integer; override;
  > procedure PutInstance(Name : String); override;
  > procedure PutPin(Ndx : Integer; Value : Byte); override;
  > Property InstanceName : String read GetInstance write PutInstance;
  > class function GetStatus : String; Override;
  > class function GetAttributeNames : String; Override;
  > class function GetLibraryName : String; Override;
  > Property PinCount : Integer read GetPinCount;
  > Property PinName[Ndx : Integer] : String read GetPinName;
  > Property PinNumber[Name : STring] : Integer read GetPinNumber;
  > Property Pin[Ndx : Integer] : Byte read GetPin write PutPin;
  > function GetPinLoc(Ndx : Integer) : TPoint; Override;
  > function GetShapeSize : TPoint; Override;
  > Property PinLoc[Ndx : Integer] : TPoint read GetPinLoc;
  > Property ShapeSize : TPoint read GetShapeSize;
  > function GetDevicePinNumber(Ndx : Integer) : Integer; override;
  > Property DevicePinNumber[Ndx : Integer] : Integer read 
  > GetDevicePinNumber;
  > end;
  > implementation
  > {$R *.DFM}
  > var
  > PinNames : TStringList;
  > function TMC74245.GetDevicePinNumber(Ndx : Integer) : Integer;
  > begin
  > if (Ndx < 0) or (Ndx > PinCount-1) then
  > result := -1
  > else
  > result := PinNums[Ndx];
  > end;
  > function TMC74245.GetPinLoc(Ndx : Integer) : TPoint;
  > begin
  > if (Ndx < 0) or (Ndx > PinCount-1) then
  > result := MakePoint(0, 0)
  > else
  > result := CalcPin(PinPos[Ndx].Pos, BoxWidth, PinPos[Ndx].OnLeft);
  > end;
  > function TMC74245.GetShapeSize : TPoint;
  > var
  > i, L, R : Integer;
  > begin
  > L := 0;
  > R := 0;
  > for i := 0 to PinCount-1 do
  > begin
  > if PinPos[i].OnLeft then
  > begin
  > if PinPos[i].Pos+1 > L then L := PinPos[i].Pos+1;
  > end
  > else
  > begin
  > if PinPos[i].Pos+1 > R then R := PinPos[i].Pos+1;
  > end;
  > end;
  > result := CalcBox(L, R, BoxWidth);
  > end;
  > function TMC74245.GetInstance : String;
  > begin
  > result := _InstanceName;
  > end;
  > function TMC74245.GetPinCount : Integer;
  > begin
  > result := PinNames.Count;
  > end;
  > function TMC74245.GetPinName(Ndx : Integer) : String;
  > begin
  > if Ndx < 0 then result := ''
  > else if Ndx < PinNames.Count then result := PinNames[Ndx]
  > else result := '';
  > end;
  > function TMC74245.GetPinNumber(Name : String) : Integer;
  > begin
  > result := PinNames.IndexOf(Name);
  > end;
  > class function TMC74245.GetStatus : String;
  > begin
  > result := 'Functional';
  > end;
  > class function TMC74245.GetAttributeNames : String;
  > begin
  > result := AttribList;
  > end;
  > class function TMC74245.GetLibraryName : String;
  > begin
  > result := PartName;
  > end;
  > // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
  > 17 18 19
  > 
//#1OE,1D0,2O0,1D1,2O1,1D2,2O2,1D3,2O3,GND,2D3,1O3,2D2,1O2,2D1,1O1,2D0,1O0,#2OE,VCC
  > function TMC74245.Run(TimeStep : Word; AccumulatedTime : LongWord) : 
  > Boolean;
  > var
  > i : Integer;
  > begin
  > for i := 0 to 3 do
  > begin
  > O1[i] := I1[i];
  > O2[i] := I2[i];
  > end;
  > result := False;
  > end;
  > function TMC74245.GetPin(Ndx : Integer) : Byte ;
  > begin
  > case Ndx of
  > 2: result := AV[NE2, O2[0]];
  > 4: result := AV[NE2, O2[1]];
  > 6: result := AV[NE2, O2[2]];
  > 8: result := AV[NE2, O2[3]];
  > 17: result := AV[NE1, O1[0]];
  > 15: result := AV[NE1, O1[1]];
  > 13: result := AV[NE1, O1[2]];
  > 11: result := AV[NE1, O1[3]];
  > 0, 1, 3, 5, 7, 9, 10, 12, 14, 16, 18, 19: result := 3;
  > else result := 7;
  > end;
  > end;
  > procedure TMC74245.PutPin(Ndx : Integer; Value : Byte);
  > begin
  > case Ndx of
  > 0: NE1 := Value > 3;
  > 1: I1[0] := Value > 3;
  > 3: I1[1] := Value > 3;
  > 5: I1[2] := Value > 3;
  > 6: I1[3] := Value > 3;
  > 10: I2[3] := Value > 3;
  > 12: I2[2] := Value > 3;
  > 14: I2[1] := Value > 3;
  > 16: I2[0] := Value > 3;
  > 18: NE2 := Value > 3;
  > else;
  > end;
  > end;
  > procedure TMC74245.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
  > begin
  > case Msg.CharCode of
  > 112: // F1
  > begin
  > end;
  > 113: // F2
  > begin
  > Handled := True;
  > end;
  > 114: // F3
  > begin
  > Handled := True;
  > end;
  > 115: // F4
  > begin
  > Handled := True;
  > end;
  > 116: // F5
  > begin
  > Handled := True;
  > end;
  > 117: // F6
  > begin
  > Handled := True;
  > end;
  > 118: // F7 handled by MainForm
  > begin
  > Handled := False;
  > end;
  > 119: // F8 handled by MainForm
  > begin
  > Handled := False;
  > end;
  > 120: // F9 handled by MainForm
  > begin
  > Handled := False;
  > end;
  > 121: // F10
  > begin
  > Handled := True;
  > end;
  > 122: // F11
  > begin
  > Handled := True;
  > end;
  > 123: // F12
  > begin
  > TForm(Owner).SHow;
  > Handled := True;
  > end;
  > 27: // ESC
  > begin
  > Close;
  > Handled := True;
  > end;
  > else
  > begin
  > Handled := False;
  > end;
  > end;
  > end;
  > procedure TMC74245.PutInstance(Name : String);
  > var
  > P : Integer;
  > i : Integer;
  > L : TStringList;
  > begin
  > if _InstanceName <> '' then Exit;
  > L := TStringList.Create;
  > _InstanceName := Name;
  > L.CommaText := Name;
  > P := Pos(' -', Caption);
  > if P <> 0 then Caption := Copy(Caption, 1, P-1);
  > L.CommaText := Name;
  > for i := 0 to L.Count-1 do
  > begin
  > case i of
  > 0:
  > begin
  > Caption := Caption+' - '+L[i];
  > end;
  > else;
  > end;
  > end;
  > PinNames := TStringList.Create;
  > PinNames.CommaText := PinList;
  > Visible := False;
  > L.Free;
  > end;
  > var
  > PosPin : Integer;
  > procedure B(N : String; OnLeft : Boolean);
  > var
  > i : Integer;
  > begin
  > i := PinNames.IndexOf(N);
  > PinPos[i].Pos := PosPin;
  > PinPos[i].OnLeft := OnLeft;
  > end;
  > procedure A(L, R : String);
  > begin
  > if L <> '' then B(L, True);
  > if R <> '' then B(R, False);
  > Inc(PosPin);
  > end;
  > begin
  > PosPin := 0;
  > PinNames := TStringList.Create;
  > PinNames.CommaText := PinList;
  > A('', 'VCC');
  > A('', '');
  > A('1D3', '1O3');
  > A('1D2', '1O2');
  > A('1D1', '1O1');
  > A('1D0', '1O0');
  > A('#1OE', '');
  > A('', '');
  > A('2D3', '2O3');
  > A('2D2', '2O2');
  > A('2D1', '2O1');
  > A('2D0', '2O0');
  > A('#2OE', '');
  > A('', 'GND');
  > end.
  >
  > Doug
  >
  > ----------
  >
  > ----------
  >
  > No virus found in this outgoing message.
  > Checked by AVG - http://www.avg.com 
  > Version: 8.0.176 / Virus Database: 270.10.7/1895 - Release Date: 1/15/2009 
7:46 AM
  >
  > [Non-text portions of this message have been removed]
  >
  >
  >
  > 
  >
  > [Non-text portions of this message have been removed]
  >
  >
  > ------------------------------------
  >
  > -----------------------------------------------------
  > Home page: http://groups.yahoo.com/group/delphi-en/
  > To unsubscribe: [email protected]! Groups Links
  >
  >
  >
  > 
  > ----------------------------------------------------------
  >
  >
  > No virus found in this incoming message.
  > Checked by AVG - http://www.avg.com 
  > Version: 8.0.176 / Virus Database: 270.10.7/1895 - Release Date: 1/15/2009 
7:46 AM
  >
  > 

  ----------

  ----------

  No virus found in this outgoing message.
  Checked by AVG - http://www.avg.com 
  Version: 8.0.176 / Virus Database: 270.10.7/1895 - Release Date: 1/15/2009 
7:46 AM

  [Non-text portions of this message have been removed]



   

[Non-text portions of this message have been removed]

Reply via email to