|
Install
Setup program (source)
BDE installation problems with InstallShield
Overriding default InstallShield target directory
Setup program (source)
Question
Answer
A:
{ this is a setup program for an application I wrote.
Maybe it's useful to others who are about to write their
own Setup-programs.
Dr. Norbert Hartkamp
hartkamp@uni-duesseldorf.de
n-hartkamp@nadeshda.gun.de
}
{file setupscl.pas}
program Setupscl;
uses
Forms,
Setupsc1 in 'SETUPSC1.PAS' {Form1};
{$R *.RES}
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
{file setupsc1.pas}
unit Setupsc1;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, LZExpand, DdeMan;
const ProgName = 'SCL90.EXE';
LZProgName = 'SCL90.EX_';
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Panel1: TPanel;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label2: TLabel;
Label6: TLabel;
Label7: TLabel;
Panel2: TPanel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
ProgrammpfadEdit: TEdit;
DatenpfadEdit: TEdit;
Label11: TLabel;
Label12: TLabel;
Panel3: TPanel;
Label14: TLabel;
AuswerterEdit: TEdit;
Label15: TLabel;
Inst1Edit: TEdit;
Inst2Edit: TEdit;
Inst3Edit: TEdit;
CheckBox1: TCheckBox;
Panel4: TPanel;
Image1: TImage;
Label13: TLabel;
Label16: TLabel;
Label17: TLabel;
DdeClientConv1: TDdeClientConv;
Image2: TImage;
Label19: TLabel;
Label20: TLabel;
Label18: TLabel;
Panel5: TPanel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
DialogNo : byte;
WinDir : array [0..144] of char;
Programmverzeichnis : string[127];
Datenverzeichnis : string[127];
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormPaint(Sender: TObject);
var Rows, Height:Integer;
begin
Height:=(ClientHeight + 255) div 256;
for Rows := 0 to 255 do
begin
Canvas.Brush.Color := RGB(0,0,Rows);
Canvas.FillRect(Rect(0,(255-Rows)*Height,ClientWidth,((255-Rows)+1)*Height));
end;
Canvas.Font.Size := 32;
Canvas.Font.Color:= clBlack;
Canvas.Brush.Style := bsClear;
Canvas.TextOut(13, 13, 'Setup SCL-90-Auswertung');
Canvas.Font.Color:= clYellow;
Canvas.TextOut(10, 10, 'Setup SCL-90-Auswertung');
Canvas.Font.Size := 11;
Canvas.Font.Style:= [fsBold];
Canvas.Font.Color:= clWhite;
Canvas.TextOut(10, ClientHeight-(ClientHeight div 20), '=AE N.Hartkamp, 1996');
end;
procedure TForm1.FormCreate(Sender: TObject);
var fileHandle: THandle;
fileBuffer: Array [0..40] of Char;
begin
BorderStyle := bsNone;
WindowState := wsMaximized;
BitBtn1.Top := trunc(ClientHeight * 0.90);
BitBtn2.Top := trunc(ClientHeight * 0.90);
BitBtn1.Left:= trunc(ClientWidth * 0.80);
BitBtn2.Left:= trunc(ClientWidth * 0.60);
DialogNo := 0;
FillChar(WinDir, SizeOf(WinDir), #0);
GetWindowsDirectory(WinDir, 144);
ProgrammpfadEdit.Text := StrPas(WinDir);
ProgrammpfadEdit.Text := ProgrammpfadEdit.Text[1] + ':\SCL90R';
DatenpfadEdit.Text := ProgrammpfadEdit.Text;
AuswerterEdit.Text := 'Anwendername';
{ Get user name and company name }
fileHandle := LoadLibrary('USER');
if fileHandle >= HINSTANCE_ERROR then begin
If LoadString(fileHandle, 514, @fileBuffer, 40) <> 0 Then
AuswerterEdit.Text :=3D StrPas(fileBuffer);
FreeLibrary(fileHandle);
end;
Inst1Edit.Text := 'Bezeichnung der Institution';
Inst2Edit.Text := 'Bezeichnung der Institution (Fortsetzung)';
Inst3Edit.Text := '- z.B.: Angabe der Abteilung -';
CheckBox1.Checked := true;
Panel1.Left := (ClientWidth div 2) - (Panel1.Width div 2);
Panel1.Top := (ClientHeight div 2) - (Panel1.Height div 2);
Panel2.Left := (ClientWidth div 2) - (Panel2.Width div 2);
Panel2.Top := (ClientHeight div 2) - (Panel2.Height div 2);
Panel3.Left := (ClientWidth div 2) - (Panel3.Width div 2);
Panel3.Top := (ClientHeight div 2) - (Panel3.Height div 2);
Panel4.Left := (ClientWidth div 2) - (Panel4.Width div 2);
Panel4.Top := (ClientHeight div 2) - (Panel4.Height div 2);
Panel5.Left := (ClientWidth div 2) - (Panel5.Width div 2);
Panel5.Top := (ClientHeight div 2) - (Panel5.Height div 2);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var aResultStr : array[0..144] of char;
strIniPath : array[0..144] of char;
ResultStr : string[144];
fromStruct : TOFStruct;
toStruct : TOFStruct;
ret : word;
fromHandle : integer;
toHandle : integer;
BDEOk : boolean;
CurPath : string[144];
Ok : Longint;
i : word;
DDE_Link : Boolean;
Macro : string;
function iif(cond : boolean; exp1, exp2 : string) : string;
begin
if cond then result := exp1 else result := exp2;
end;
begin
if DialogNo = 0 then begin
ret := GetProfileString('IDAPI', 'CONFIGFILE01', 'NIX', aResultStr,
80);
ResultStr := StrPas(aResultStr);
BDEOk := (ResultStr <> 'NIX') and FileExists(ResultStr);
if not BDEOk then begin
Panel1.Hide;
MessageDlg('Installationsfehler:'+#13#13+
'Bevor Sie das SCL-90 Auswertungsprogramm installieren'+
#13+
'k=F7nnen, m=B3ssen Sie die Database-Engine installieren
.'+#13#13+
'F=B3hren Sie dazu das Program SETUP.EXE von'+#13+
'der BDE-Diskette 1 aus.', mtError, [mbOk], 0);
Close;
end;
end;
Inc(DialogNo);
case DialogNo of
1: begin
Panel1.Hide;
Panel2.Show;
ProgrammpfadEdit.SetFocus;
end;
2: begin
GetDir(0, CurPath);
Ok := 0;
ret := IOResult;
{$I-}
ChDir(ProgrammpfadEdit.Text);
if IOResult <> 0 then ok := 1;
ChDir(DatenpfadEdit.Text);
if IOResult <> 0 then if ok = 0 then ok := 2 else ok := 3;
if ok <> 0 then begin
case ok of
1 : CurPath := 'Das Programmverzeichnis ist ';
2 : CurPath := 'Das Datenverzeichnis ist ';
3 : CurPath := 'Programm- und Datenverzeichnis sind ';
end;
Panel2.Hide;
if MessageDlg(CurPath + 'nicht vorhanden'+#13+
iif(ok=3,'Sollen die Verzeichnisse ', 'Soll das
Verzeichnis ') +
'angelegt werden?', mtConfirmation, [mbYes, mbNo]
, 0) = mrNo
then begin
Panel2.Show;
Dec(DialogNo);
if odd(Ok) then ProgrammpfadEdit.SetFocus
else DatenpfadEdit.SetFocus;
end else begin
MkDir(ProgrammpfadEdit.Text);
MkDir(DatenpfadEdit.Text);
DialogNo := 2;
ret := IOResult;
Ok := 0;
end;
end;
ChDir(CurPath);
if Ok = 0 then begin
Panel2.Hide;
Panel3.Show;
AuswerterEdit.SetFocus;
end;
end;
3: begin
Panel3.Hide;
Panel4.Show;
Invalidate;
Application.ProcessMessages;
ResultStr := ProgrammpfadEdit.Text;
if ResultStr[length(ResultStr)] <> '\' then ResultStr := ResultStr
+ '\';
StrPCopy(strIniPath, ResultStr + 'SCL90.INI');
WritePrivateProfileString('Passwort', 'Passwort', '=C1=C2=BF',
strIniPath);
StrPCopy(aResultStr, DatenpfadEdit.Text);
WritePrivateProfileString('Vorgaben', 'Datenpfad', aResultStr,
strIniPath);
StrPCopy(aResultStr, Inst1Edit.Text);
WritePrivateProfileString('Vorgaben', 'Inst1' , aResultStr,
strIniPath);
StrPCopy(aResultStr, Inst2Edit.Text);
WritePrivateProfileString('Vorgaben', 'Inst2' , aResultStr,
strIniPath);
StrPCopy(aResultStr, Inst3Edit.Text);
WritePrivateProfileString('Vorgaben', 'Inst3' , aResultStr,
strIniPath);
StrPCopy(aResultStr, AuswerterEdit.Text);
WritePrivateProfileString('Vorgaben', 'Auswerter', aResultStr,
strIniPath);
WritePrivateProfileString('Vorgaben', 'TWerte', '1', strIniPath);
fromHandle := LZOpenFile(LZProgName, fromStruct, OF_READ);
ResultStr := ProgrammpfadEdit.Text;
if ResultStr[length(ResultStr)] <> '\' then ResultStr := ResultStr
+ '\';
StrPCopy(aResultStr, ResultStr+ProgName);
toHandle := LZOpenFile(aResultStr, toStruct, OF_CREATE);
ok := LZCopy(fromHandle, toHandle);
if ok < 0 then begin
case ok of
LZERROR_BADINHANDLE : ResultStr := 'Das Handle, das die
Quelldatei bezeichnet, ist nicht g=B3ltig.';
LZERROR_BADOUTHANDLE : ResultStr := 'Das Handle, das die
Zieldatei bezeichnet, ist nicht g=B3ltig.';
LZERROR_BADVALUE : ResultStr := 'Der eingegebene Parameter
ist au=DFerhalb des erlaubten Bereichs.';
LZERROR_GLOBALLOC : ResultStr := 'F=B3r die ben=F7tigten
Puffer steht nicht gen=B3gend Speicher zu'+ 'Verf=B3gung.';
LZERROR_GLOBLOCK : ResultStr := 'Das Handle, das die
internen Datenstrukturen bezeichnet, ist nicht'+
'g=B3ltig.';
LZERROR_READ : ResultStr := 'Die Quelldatei hat ein
ung=B3ltiges Format.';
LZERROR_UNKNOWNALG : ResultStr := 'Die Quelldatei ist mi=
t einem unbekannten Algorithmus komprimiert worden.';
LZERROR_WRITE : ResultStr := 'Es steht nicht gen=B3=
gend Platz f=B3r die Ausgabedatei zur Verf=B3gung.';
end;
MessageDlg('Fehler beim Expandieren von SCL90.EXE:'+#13#13+
ResultStr, mtError, [mbOk], 0);
end else
begin
Panel4.Hide;
Ok := 0;
with DdeClientConv1 do begin
DDE_Link := FALSE;
DDE_LINK := SetLink('ProgMan','ProgMan');
if DDE_LINK = TRUE then
begin
OpenLink;
Macro := ' [CreateGroup ("SCL-90-Auswertung")]';
StrPCopy (aResultStr, Macro);
if not ExecuteMacro(aResultStr, False) then
MessageDlg('Programmgruppe konnte nicht eingerichtet
werden...',
mtInformation, [mbOK], 0) else
begin
Macro := ' [ShowGroup("SCL90AUS.GRP",1)]';
StrPCopy (aResultStr, Macro);
ExecuteMacro(aResultStr, False);
ResultStr := ProgrammpfadEdit.Text;
if ResultStr[length(ResultStr)] <> '\'
then ResultStr := ResultStr + '\'+ProgName;
Macro := ' [AddItem('+ResultStr+
', "SCL-90-Eingabe", )]';
StrPCopy (aResultStr, Macro);
if not ExecuteMacro(aResultStr, False) then
MessageDlg('Programm konnte nicht in Gruppe eingef=B3g=
t werden...',
mtInformation, [mbOK], 0) else
begin
Panel4.Hide;
Panel5.Show;
end;
end;
CloseLink;
end; { if DDE_LINK = TRUE }
end; { with DdeClientConv1 do }
end; { ok > 0 }
end { DialogNo = 3 }
else Close; { => end of program }
end; { of case }
end; { TForm1.BitBtn1Click }
end.
{ file setupscl.dfm }
object Form1: TForm1
Left = 200
Top = 99
Width = 435
Height = 300
Caption = 'Form1'
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'System'
Font.Style = []
PixelsPerInch = 96
TextHeight = 16
end
{ file setupsc1.dfm }
object Form1: TForm1
Left = -4
Top = -4
Width = 648
Height = 488
BorderIcons = []
Caption = 'Form1'
Color = clBlack
Font.Color = clBlack
Font.Height = -43
Font.Name = 'Arial'
Font.Style = [fsBold, fsItalic]
PixelsPerInch = 96
WindowState = wsMaximized
OnCreate = FormCreate
OnPaint = FormPaint
TextHeight = 49
object BitBtn1: TBitBtn
Left = 648
Top = 512
Width = 97
Height = 33
Caption = 'Weiter...'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
OnClick = BitBtn1Click
Kind = bkOK
end
object BitBtn2: TBitBtn
Left = 528
Top = 512
Width = 97
Height = 33
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
OnClick = BitBtn2Click
Kind = bkCancel
end
object Panel1: TPanel
Left = 128
Top = 112
Width = 400
Height = 217
TabOrder = 2
object Label1: TLabel
Left = 25
Top = 40
Width = 147
Height = 16
Caption = 'Herzlich Willkommen! '
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label3: TLabel
Left = 25
Top = 64
Width = 294
Height = 16
Caption = 'Dieses Setup-Programm richtet das SCL-90-R'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label4: TLabel
Left = 25
Top = 80
Width = 266
Height = 16
Caption = 'Eingabe- und Auswertungsprogramm auf '
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label5: TLabel
Left = 25
Top = 96
Width = 126
Height = 16
Caption = 'Ihrer Festplatte ein.'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label2: TLabel
Left = 25
Top = 120
Width = 337
Height = 16
Caption = 'Wenn Sie das Programm nicht installieren m=F7chten,'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label6: TLabel
Left = 25
Top = 136
Width = 265
Height = 16
Caption = 'k=F7nnen Sie den Vorgang jetzt abbrechen.'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label7: TLabel
Left = 25
Top = 160
Width = 341
Height = 16
Caption = 'Um fortzufahren dr=B3cken Sie bitte die Eingabetaste..=
.'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
end
object Panel3: TPanel
Left = 120
Top = 104
Width = 401
Height = 225
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = []
ParentFont = False
TabOrder = 4
Visible = False
object Label14: TLabel
Left = 16
Top = 22
Width = 64
Height = 16
Caption = 'Auswerter'
end
object Label15: TLabel
Left = 16
Top = 70
Width = 260
Height = 16
Caption = 'Bezeichnung der Institution (drei Zeilen)'
end
object AuswerterEdit: TEdit
Left = 16
Top = 40
Width = 177
Height = 24
TabOrder = 0
Text = 'AuswerterEdit'
end
object Inst1Edit: TEdit
Left = 16
Top = 88
Width = 345
Height = 24
TabOrder = 1
Text = 'Inst1Edit'
end
object Inst2Edit: TEdit
Left = 16
Top = 120
Width = 345
Height = 24
TabOrder = 2
Text = 'Inst2Edit'
end
object Inst3Edit: TEdit
Left = 16
Top = 152
Width = 345
Height = 24
TabOrder = 3
Text = 'Inst3Edit'
end
object CheckBox1: TCheckBox
Left = 16
Top = 184
Width = 161
Height = 17
Caption = 'Anzeige mit T-Werten'
TabOrder = 4
end
end
object Panel2: TPanel
Left = 128
Top = 112
Width = 401
Height = 185
TabOrder = 3
Visible = False
object Label8: TLabel
Left = 16
Top = 16
Width = 274
Height = 16
Caption = 'Bitte geben Sie das Programmverzeichnis'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label9: TLabel
Left = 16
Top = 32
Width = 198
Height = 16
Caption = 'und das Datenverzeichnis ein:'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label10: TLabel
Left = 16
Top = 68
Width = 71
Height = 16
Caption = 'Programm:'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label11: TLabel
Left = 16
Top = 100
Width = 42
Height = 16
Caption = 'Daten:'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object Label12: TLabel
Left = 14
Top = 136
Width = 341
Height = 16
Caption = 'Um fortzufahren dr=B3cken Sie bitte die Eingabetaste...'
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = [fsBold]
ParentFont = False
end
object ProgrammpfadEdit: TEdit
Left = 104
Top = 64
Width = 225
Height = 24
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = []
ParentFont = False
TabOrder = 0
Text = 'ProgrammpfadEdit'
end
object DatenpfadEdit: TEdit
Left = 104
Top = 96
Width = 225
Height = 24
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = []
ParentFont = False
TabOrder = 1
Text = 'DatenpfadEdit'
end
end
object Panel4: TPanel
Left = 152
Top = 160
Width = 337
Height = 113
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = []
ParentFont = False
TabOrder = 5
Visible = False
object Image1: TImage
Left = 256
Top = 40
Width = 33
Height = 33
Picture.Data = {
055449636F6E0000010001002020100000000000E80200001600000028000000
2000000040000000010004000000000080020000000000000000000000000000
0000000000000000000080000080000000808000800000008000800080800000
C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000
FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF333333FFFFFFFFFFFFFFFFF
FFFFFFFFFF33FF33FFFFF11FFFFFF1111FFFFFFFFFF3FFFFFFFFFFF115FF11FF
1155FFFFFFF33FFFFFFFFFFF115511F511F55FFFFFF33FFFFFFFFF11111511F5
11F55FFFFFF33FFFFFFFF11FF11511F511F55444FFF33FFFFFFFF11F511F1145
11F55FF4FFFF33FFFFF9911F5119119511F55FF4FFF3333FFFFFF11F51191199
11F55FF4FFFFFFFFFFFFFF111199511114F55FF4FFFFFFFFFFFF999995996699
55556666FFF3333FFFF99FF99F99449944F66FF6FF33FFF33FF99FF99F994499
64F66F56F33FFFFFFFF99FF99F99F69966F66556F33FFFFFFFF99FF99F996699
66566556F33FFFFFFFFF9999FFF9999566566556F333FFFFFFFFFF22FFFF6655
66566556FF33FFFF3FFFFFFF22FF665566566556FFF33FFF33FFFFFFF22FF666
62556666FFFFF333F3FFFFF222CCF255F2CCCC5FFFFFFFFFFFFFFF22FF22CC25
5CCFFCC5F3F333FFFFFFFF22AA22FCCFACCAFCCFF33FF33FFFFFFF22FFACCCCC
ACCAACC1FF3FF33FFFFFFF22FFCCA2CCACCAACCFFFFF333FFFFFFFF22ACCAACC
ACCAACCFFFFF33FFFFFFFFFFAACCAACCACCAACCFFFF33FFFFFFFFFFFAACCAACC
ACCAACCFFFF33FF3FFFFFFFFAAFCCCCAA1CCCCFFFFF33F33FFFFFFFFAAFFAA1A
A11AA1FFFFFF333F3FFFFFFFFAAAA11FAAAA11FFFFFFFFFFFFFFFFFFFFFFFF11
11FFF11100000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000}
end
object Label13: TLabel
Left = 24
Top = 24
Width = 117
Height = 16
Caption = 'Einrichtung l=F5uft...'
end
object Label16: TLabel
Left = 24
Top = 48
Width = 166
Height = 16
Caption = 'Erstellen von SCL90.INI...'
end
object Label17: TLabel
Left = 24
Top = 72
Width = 198
Height = 16
Caption = 'Kopieren der Programmdatei...'
end
end
object Panel5: TPanel
Left = 120
Top = 80
Width = 353
Height = 281
Font.Color = clBlack
Font.Height = -13
Font.Name = 'System'
Font.Style = []
ParentFont = False
TabOrder = 6
Visible = False
object Image2: TImage
Left = 24
Top = 16
Width = 33
Height = 33
Picture.Data =3D {
055449636F6E0000010001002020100000000000E80200001600000028000000
2000000040000000010004000000000080020000000000000000000000000000
0000000000000000000080000080000000808000800000008000800080800000
C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000
FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF333333FFFFFFFFFFFFFFFFF
FFFFFFFFFF33FF33FFFFF11FFFFFF1111FFFFFFFFFF3FFFFFFFFFFF115FF11FF
1155FFFFFFF33FFFFFFFFFFF115511F511F55FFFFFF33FFFFFFFFF11111511F5
11F55FFFFFF33FFFFFFFF11FF11511F511F55444FFF33FFFFFFFF11F511F1145
11F55FF4FFFF33FFFFF9911F5119119511F55FF4FFF3333FFFFFF11F51191199
11F55FF4FFFFFFFFFFFFFF111199511114F55FF4FFFFFFFFFFFF999995996699
55556666FFF3333FFFF99FF99F99449944F66FF6FF33FFF33FF99FF99F994499
64F66F56F33FFFFFFFF99FF99F99F69966F66556F33FFFFFFFF99FF99F996699
66566556F33FFFFFFFFF9999FFF9999566566556F333FFFFFFFFFF22FFFF6655
66566556FF33FFFF3FFFFFFF22FF665566566556FFF33FFF33FFFFFFF22FF666
62556666FFFFF333F3FFFFF222CCF255F2CCCC5FFFFFFFFFFFFFFF22FF22CC25
5CCFFCC5F3F333FFFFFFFF22AA22FCCFACCAFCCFF33FF33FFFFFFF22FFACCCCC
ACCAACC1FF3FF33FFFFFFF22FFCCA2CCACCAACCFFFFF333FFFFFFFF22ACCAACC
ACCAACCFFFFF33FFFFFFFFFFAACCAACCACCAACCFFFF33FFFFFFFFFFFAACCAACC
ACCAACCFFFF33FF3FFFFFFFFAAFCCCCAA1CCCCFFFFF33F33FFFFFFFFAAFFAA1A
A11AA1FFFFFF333F3FFFFFFFFAAAA11FAAAA11FFFFFFFFFFFFFFFFFFFFFFFF11
11FFF11100000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000}
end
object Label19: TLabel
Left = 24
Top = 64
Width = 256
Height = 16
Caption = 'Die Einrichtung des SCL-Programms ist'
end
object Label20: TLabel
Left = 24
Top = 80
Width = 103
Height = 16
Caption = 'abgeschlossen.'
end
object Label18: TLabel
Left = 24
Top = 112
Width = 294
Height = 16
Caption = 'Das SCL-Programm verwendet ein Passwort, '
end
object Label21: TLabel
Left = 24
Top = 240
Width = 260
Height = 16
Caption = 'Eingabetaste dr=B3cken, um zu beenden...'
end
object Label22: TLabel
Left = 24
Top = 128
Width = 254
Height = 16
Caption = 'um bestimmte Programmfunktionen zu '
end
object Label23: TLabel
Left = 24
Top = 144
Width = 63
Height = 16
Caption = 'sch=B3tzen.'
end
object Label24: TLabel
Left = 24
Top = 160
Width = 300
Height = 16
Caption = 'Dieses Passwort k=F7nnen Sie jederzeit =F5ndern.'
end
object Label25: TLabel
Left = 24
Top = 176
Width = 235
Height = 16
Caption = 'Das voreingestellte Passwort lautet:'
end
object Label26: TLabel
Left = 144
Top = 208
Width = 39
Height = 22
Caption = 'SCL'
Font.Color = clBlack
Font.Height = -19
Font.Name = 'Arial'
Font.Style = [fsBold]
ParentFont = False
end
end
object DdeClientConv1: TDdeClientConv
ServiceApplication = 'ProgMan'
ConnectMode = ddeManual
Left = 88
Top = 32
end
end
{ file scl90.ex_ (UUencoded) }
begin 644 SCL90.EX_
M4UI$1(CP)S-!90`H``#_35H``0$```#_"``0`/__"``)`/3Q]?!``@,.#1T+
M`03P,PU##5,-8`FZ$``._Q^T"&J#"(9T!(PT!)*RA$"M!T0)B!A*B(M`24A1]8V(H\#)2&AW!$"_[;6
M$0)W]!$"?%0BW5;H$0*Y8"+22"(H^A%K`EAR(GUR(IT%`@'_"7-C;#DP+D4#
M6$5@#:(MLBW"+=3D(M(`S_+"!!8W1U86R?;'DL('2!`8(`;O]O=3D"!A(&9U;G]C
M=3D&EO;F%LA`7_+CP@271S(&_W;FQYC`!A64\86YD@C+W=3DV%N0C!O(&UO?V1I9GD@:70P,O\V
M('5S92!W:?MT:((Q6_L`(>5Y!"?J)"OP(`#E=3DJE$B2K$,OLTVM
M0FS)3:-,CB3?3:U"R_]-K4,!%EVD2TDP*UVM0DU+7:-,:6%=3DTJU"
M`/\QP%#_-D8!N/T"/62A'``K!B#_`/C7_A@#<>!FM&(@``=3DQX&8'<9X$=3DD0!Z*01>P=3DS
M(MPE=3DW5B@#YE%&`*@/L^9A1@`^AW_[CU_^AE19]`'H`^9+\``'4#Z;.S8G:]
M"`MR)?Y0Z.%01E4(DG(&/G(1GG`RHG`V_E`(.\A@=3D0G*4=3D1@@W1YNG068Y)S
M)G;#=3D13V3G9V!B9ZH2``*RM&",MC(@N`!M=3DA`W#G,=3D)2'H3C=3D`BC(.;G<:,B
MY&?C4$W*!+D`@W+$8CX!0"%R__\V'`#H7_U0Z,N`_<]C0%>".H$>`)OH1F2`
M9_T^8T6!R_[$4@2A8``!1@3^_U`[!AH`?`:A]QH`*9>"]R88`/\#1@;$/CH!
M`__XB?B,PHE&_#N)5M]0_(M6XE?*5`\ZZ#+]-V'*4,=3DM&H(\J7)Y@(O_4E#_
M4!>`[CYCZ&3]RH5^!#;W_W7\'9#ZZ*;_?AJ0,<`VB47\*Y+_^C'`HQP`_P;S
M'@#08)R!=3D5G_#DT>.Y!@`).`0Y(%-Y#Y8+-C>8`D_XG'CO_"!E?_-A@`L'T@
M%7JA2`'WV!Z-!N-IP@)+@Y"`OV6\@+.2__J#?@8`=3DP/I_YH`Q'X()HH%_SP@
M@(_^O_2#P-=3D095Z/[__NL^/`AU+H/_/AP``'XE_P[TWY'?E%CGDB;&!2#V
M])+\??N3_.L,//,'=3D:5Q7&-&"/]._P;I7?__=3DOS__W;ZZ&/^@#XVZA1@!4"'
M!DN#C7X&HQ97)G9%@J26%)!"C8]^ZA97`7,$=3D)!""?_`=3D!^#?NP2=3D8\#Z)S\
MI:*@IY=3DCQO^#/F(``+``?O\!0(A&_8I&_?2(@J:4`I!'",!U+-_&!F8``6AS
M`^C;E/O\J73R#[6_^]X*L0"@<`'IH/\.;V(`OW$>8+]P'F#G_S9BE$/LK`8Q
MP/>)1OB00HA&^XK[1OL;H!.#?O@`?W8+_T[XL`@^8ZOK+,Z0*-*0),I02/](
M.T;X=3DAJ*5N_[BT;XR)`#^":?B!7_1OAPL#YC@/]^^PUT#8`^-[H48*6VL!IU
MGYR]^':VL747G[;&!0JJL!.P#3YCXW3XO(#"@'>D_I]`Q@9D``&A&/KF@!I#
M93H!B18\S0&R@097%,5SE8`^Y3B+
MZST!+M-`^E%0/0+'`'4+,=3D`,@/I10#WU`TK3`U'3,#T&`/MU!V.Q_NLD/0?[
M`'7V51<]!`!U40PETP%A_5$*W5<(PU.A!`F`^E`4@/^R""S1&O[WP*$^`9FY
M`@![]_D*,#!$G:_4.CN]EH#NX#^B[@A
MJ^@$/656QK[@&G+68\'6X+*G4.BMU>/^`<#^Q'X$)HE%RIB`_"#S!JGMXW/0
MH?]&`;$$T^`#PD36X"#S#.CHW>GSYM""D*?1X-%.\U'V#AWV$)XG]A+HSO8(
M:$#`=3D-\)@'X$`\2@H_>>WZ%`?0^*EX#@H(@_A7`!_P9BH9)AP]ZR^W/WN!&U
MIK``_7WGH?_'1OP!`/?K`__#@'[\T>?_T>>!QV0`'@?^RY`Z1@1U'R:*?T4!
M.D;_=3D18D`"\",.10)``#,0"T8/_H8/WK!H-^_.<,=3DM4/0(!_W4)BD8*4.AWW_[K1CT`+A66_OOK.'31!>C__NLW+CT(2A$)_W+0
M2=3D#?!>@3_^NZT`[_0W8,[0(C$4"#P`!6`<#_^HM6_%]>C6;K_A]'@`JEE0+$
M?O\&)H-]"`!T'Z\F_W4.HQ`,HQ`(#)!"F1`QP"/PKA-CL0'&X$J$EA2D%ZV3
MF1&)10K@MQ/"'?6D^AV2&(%]`O^QUW4:N/__NOO__R/P%":)51:ZMQ(8(_`:
MZR69$<>/10*RUS,K,R9&(%44,B3M$QP](!X1+:>432+9!3<@42"PUU`@!(#_
M`":-A8``C,+45_$](`XS)A`](!(FY\9%,$2*B'-2_S;]4F!@4`"_Y@`>=3DJF@
MNO]98/\V$&!@U1)@8!1@8!8`=3D/\V(9JS8">&R`">8YR40SR*_O.C@>R6`*$V
M`?^+%C@!HZX`B?,6L(9@BG.)`*&T[P`+!K9S<.E]`-^XY@",VGH3C;Y7:/\6
M;I`F8&`DTJ`!^LRD&&%R,Q9Y3,>?!T#`)XU^Z*BHMZ46MS*@I+;0->O3B(8^
MF(MP.M^AF@"C1+-AN`#U?Q,W1O@]HT@`QW\&2@`&`+\Z[2!`IT0>92U':UVC
M1EQDFNHCP[A0/63K(NLBOV.N`&V+3C"C-B/`.`$S(_Y*-%W+B``#`:'_`04`
M6P`#`*:O`?\`$:9`JZI``:JF0+BJ0!>F0,FJ0!:JID#.ND3?PD3DND3U6L)$
M^KI$!`*[0Q7R0*K%01KR1"OZ1##R1$&J^D1&\D10\D1A^D1FJO)$=3D_I$?/)$
MAO)$EZKZ1)SR1*WZ1++R1,.J^D3(\D30\D`2GD`RKP,#`">>0$"24$*^GD!0
M`P(`5YY`5JJB4"V>0&:24+2>0&TJHE`)GD!ZLE2!HE"U0*L!DZI4J))0*)Y`
MMZJ24$2>0-"24*.>0/&JDE"EGD#ZDE"GGD`$KP0#`*2>0"<"8$"JGD`[`F`^
MGD!:"F1OKA)C`(T$BU/T$F0150438SPZ8#V>0%$Z8'U\ID"4!?\`")Y`WQP&
M`@`AID"'!K?_`!J>0*4&0V.NU&I@36&_8F`"GD!E!W<#`&BF0(,'_[Q1*P"=3D
MBF`#ID"QBF!]857(@F!MGD#?@F!QGD"UZ8)@;I@!DYANF`$ID#"ENID`PGK8PCZ8(UA+0&L:<)N>0!H*]EMC`PM38Z`+`@!]79Y`O@L#`+.>0%7*
M0G3>0G3Q0G3]0G2K!PQ#0.0J@*UA[BJ`?K5@`101`P"NGD!5)GJ`K9Y`.7J`.:9`7T,1_P`*
MID!-DH!6K8``4I*`%:9`7)*$U6:2@!FF0&NB@P%][Q$!`#&>0(P1!*X@0`4`
MGY*`$'Q@HOC2@MZ-?&!%58OL'O\+P'1-C`:X`'^)-I@`B3Z:3##_G`")'IX`
MC`:'H``S4J4.,/*R]X`@_O*R,]*HP'4&0O^H`G4!0H@6PGX<0,``__^+Y>8P
M_[C_3,TA65OK_P0SR3/;H[(`_XO!"\-T#(/[__]T!X[#)HL>]H^@#K0*D+8`
M@S[UN%H"1EHV-KD*`/^@L@`RY+O5`/_H30"Y$`"AMK\`N]T`Z$%:,;OOX@#H
M.!*1N\0`?QY34%"X$!")`_J(D+1*D,0>K@",7M#DGCR@A.0B0,+TG4>9:+U&&N@.V^@4(=3D*CH0Y+W@%"CL/\#.P:D`'(?Z'](`'-%@SZD`^#_(*&P`XL>I@!_@^L,
M.\-W$L>@?^L+Z$,`)`_CMPSI@)/QEHA*.P=3D_H6@!S$W6G[NB_
M#@!R"^A%#I"B_P"+PXS"PU"A_Z8`Z+'_`]V7C9RRRCL.+
MV?\F@3X``%10=3D7]3]L,#=3D4Z^E[#__B:+-`OV=3D`;_.]YW\W0\)HG?-R:)1P)M
MHB:C_P@`!0P`.P:F_P!T0^@%`":)]QV+WYFP`W<")NL[-Z40BZ'P!R:+_T0"
M)@%'`OC#??FM`#O#=3D/A3'Y6Y[HRD);0SP(QDD!;^>*#:=3D!2AH@".]\`FH7B@
MPW7V)OV)6,",P*.B`.O_O#/`AP:Z`,OW@SZZWR`!RZ&Z_P#IP/R+]#:._BK`
M.U4"?P=3D\%-\F.P5R#Y/`!GS_"'\')CM%!'?_`WV#8[BK!R#,;`#OZCH#:C#@#+N,K_`.EN_+HSTHO_W!XVQ'\(
M-L7W=3DP3\;+&PUZNX_8!QLJNKC45TJ^V,;;#__P32,\"Y_PX`\ZL&5P97^[E/
MDJ$)K#K(=3DO\$BLCC"*P*P/]T`ZKB^#+`JG[3,A_*"`"+W.7`CPHVBT\!F`.LD4@:_5P[H*`!:6M%5_0)!KC=3D!C/2Z/_L_G4*)H-_&O);`7TGHH\@K#P-=3D/\,
M/!IT$3OS=3D?WSLO##._-T":S_/`IT`4XSP,/WN/(&J?<"`+[D+FDPZ%'_NO1[W`(CB,](SR000_P)"S2$M@`"#[=3DJCH#/`X,#*B]#\!!%7$(V5@`"Y@/4`
M*.-SAN`SVSO8]W0@@'40&G0#0W_K\HO3*]"Y09"P5!-1$5SA%^",VNG`"O;E
MP`8V%/#\._=3DS_P<#\0/Y3D_]G_.D_([:9-`\T@@^M1`&-HI'!"[P.=3D!6O4`!
M)\1@'IY`,,R"?(>`Q&"$``4!4<1@4G6!QR!`S5%QHD"IGD!YGZ)`M8`!*P(%
M)(*Y-AX@C5%,`P6\@E>L+B`-<`%<+B`1Q&`6ZBI@''Q@&D8B`P%$4035<;O`
MVF`=3D?&`'7B)7!0`?VF`??&`B;B)7!0`UVF`>?&`X?B)7!0!2VF`@?&!7CB)`
MFBVJ+;HMRBW:+>0F!>0IQ8``,U"T@.0E6T$H2?]N86-T:79E(`Q@ZX0&3?HF'4$`@#@!,?\D'D#`P,`D0"%!@%Q!$3-!0DM!&)%%
M05A,\]
BDE installation problems with InstallShield
Question
I have a customer that installed our application that includes the BDE.
Quattro Pro now comes up with an error message "Cannot load language
driver". Has anyone else experienced anything like this?
Answer
This problem is common with multiple BDE applications. What probably
happened is that the used installed your application and specified a new
directory for IDAPI. This would have update you WIN.INI in two(2) sections
[IDAPI] and [Borland Language Drivers]. You should have an entry in you
WIN.INI such as the following.
[Borland Language Drivers]
LDPath=C:\IDAPI\LANGDRV
Now load BDE Configuration Utility, click on Paradox and look at the
language driver. This is the driver that QPW is trying to load from the
path mentioned above. See if the driver exists in that directory.
Overriding default InstallShield target directory
Question
When using InstallShield Express, the installer always uses "C:\Program
Files" as the default directory, regardless of whether or not you want
it.
Answer
The default value of the Express Directory Specifier is
[WindowsDrive]:\Program Files\[CompanyName]\[AppName]. You can
overwrite this default. (This means that any Program Group assigned a
Destination Directory of , along with the uninstall-related
files that Express includes with your setup, will be installed to this
default directory.)
Go to the Express Dialog Boxes dialog, highlight Choose Destination
Location, and click the Settings tab. In the textbox, enter your
default installation directory. Please do not hardcode this entire
entry, but instead use Directory Specifiers.
For example, the entry "\Test" would cause your setup to create
a root directory named "Test," and this directory would be placed in the
drive on which your end user's Windows directory is installed (most
likely C:). This setting will apply even if you don't include the Choose
Destination Location dialog in your setup.
Note: Do not use the specifier to indicate the default
destination directory in the Choose Destination Location dialog.
(For more information on Express Directory Specifiers, please refer to
the "Express Directory Specifiers" topic in Express Help.)
|