home *** CD-ROM | disk | FTP | other *** search
- {*******************************************************}
- { }
- { Turbo Pascal Version 6.0 }
- { Turbo Vision Unit }
- { Copyright (c) 1990 Borland International }
- { und Dieter Craasmann (geändert 1991) }
- {*******************************************************}
-
- UNIT NEU_STDD;
-
- {$F+,O+,V-,X+,D-}
-
- INTERFACE
-
-
- USES Crt, Dos, Objects, Drivers, Memory, Views,
- Menus, Dialogs, MsgBox,
- App, Buffers;
-
- CONST
-
- { Commands }
-
- cmOpen = 100;
- cmNew = 101;
- cmHelp = 102;
- cmHelpD = 103;
- cmHelp1 = 801;
- cmHelp2 = 802;
- cmYes = 104;
-
- { Messages }
-
- cmFileFocused = 806; { Eine neue Datei wurde in TFileList eingestellt}
-
- TYPE
-
- { TSearchRec }
- { Record um die Directory-Information mit TFileDialog zu speichern}
-
- TSearchRec = RECORD
- Attr: Byte;
- Time: Longint;
- Size: Longint;
- Name: STRING[12];
- END;
-
- TYPE
-
- { TFileInputLine ist eine spezielle Eingabe-Zeile, die von }
- { TFileDialog benutzt wird um seinen Inhalt zu erneuern als Antwort }
- { auf einen Befehl von cmFileFocused von TFileList. }
-
- PFileInputLine = ^TFileInputLine;
- TFileInputLine = object(TInputLine)
- constructor Init(VAR Bounds: TRect; AMaxLen: Integer);
- PROCEDURE HandleEvent(VAR Event: TEvent); virtual;
- END;
-
- { TFileDialog isi ein normaler Datei-Eingabe-Dialog-Name }
-
- TWildStr = PathStr;
-
- CONST
- fdOkButton = $0001; { Gibt ein OK-Symbol (button) in den Dialog }
- fdOpenButton = $0002; { Gibt ein Öffne-Symbol (Open button) in den Dialog }
- fdReplaceButton = $0004; { Gibt ein Ersetze-Symbol (Replace button) in den Dialog }
- fdClearButton = $0008; { Gibt ein Lösche-Symbol (Clear button) in den Dialog }
- fdHelpButton = $0010; { Gibt ein Hilfe-Symbol (Help button) in den Dialog }
- fdNoLoadDir = $0100; { Lade nicht den Inhalt des derzeitigen Direktories }
- { in den Dialog beim Initiieren (Init). }
- { Das bedeutet, daß du beabsichtigst WildCard zu verändern}
- { indem du SetData benutzt oder den Dialog in einem }
- { stream speicherst. }
-
- TYPE
-
- PFileDialog = ^TFileDialog;
- TFileDialog = object(TDialog)
- WildCard: TWildStr;
- constructor NewParameter(LaufW, LaufW1, SubD : STRING);
- PROCEDURE Installiere(LaufWZu : STRING); virtual;
- PROCEDURE Fehler; virtual;
- PROCEDURE HandleEvent(VAR Event: TEvent); virtual;
- PROCEDURE OutOfMemory; virtual;
- PROCEDURE Hilfe; virtual;
- PROCEDURE HilfeD; virtual;
- END;
-
- {────────────────────────────────────────────OParaDialog──}
- PParaDialog = ^OParaDialog;
- OParaDialog = object(TDialog)
- END;
-
- {───────────────────────────────────────────────ParaData──}
- ParaDataRec = RECORD {DatenRec für Dialogfeld}
- FarbData: Word;
- DruckerData : Word;
- LW11 : STRING[3];
- LW2 : STRING[3];
- SubData: STRING[8];
- END;
-
- VAR {────────────────────────────────────Globale Variablen──}
- ParaData : ParaDataRec; {Fürs Dialogfenster}
- Pfad,LW22,LW33 : STRING[8];
- Farben, Drucker : Word;
- Laufwerk : STRING[3];
- LW1,LW12,LWData : STRING[3];
- LaufWerkDa : Boolean;
-
-
- IMPLEMENTATION
-
- TYPE
- PSearchRec = ^TSearchRec;
-
- { TFileInputLine }
-
- constructor TFileInputLine.Init(VAR Bounds: TRect; AMaxLen: Integer);
- BEGIN
- TInputLine.Init(Bounds, AMaxLen);
- EventMask := EventMask OR evBroadcast;
- END;
-
- PROCEDURE TFileInputLine.HandleEvent(VAR Event: TEvent);
- VAR
- Dir: DirStr;
- Name: NameStr;
- Ext: ExtStr;
- BEGIN
- TInputLine.HandleEvent(Event);
- IF (Event.What = evBroadcast) AND (Event.Command = cmFileFocused) AND
- (State AND sfSelected = 0)
- THEN
- BEGIN
- IF PSearchRec(Event.InfoPtr)^.Attr AND Directory <> 0 THEN
- Data^ := PSearchRec(Event.InfoPtr)^.Name + '\'+
- PFileDialog(Owner)^.WildCard
- ELSE Data^ := PSearchRec(Event.InfoPtr)^.Name;
- DrawView;
- END;
- END;
-
- { TFileDialog }
-
- PROCEDURE TFileDialog.Hilfe;
- VAR
- Msg : STRING;
- Msg2 : STRING;
- Msg3 : STRING;
- BEGIN
- Msg :=^C'Installations-Hinweise'#13 +
- ^C'Wählen Sie aus den Laufwerken das aus, in das das Programm installiert '#13 +
- ^C'werden soll. Als Beispiel "C:\" oder "D:\", etc. wie vorgegeben. Mit '#13 +
- ^C'dem Cursor treffen Sie die Wahl und mit "Return" erfolgt die Gesamtwahl.';
- Msg2 :=^C'Mit der Tabulator-Taste können Sie in das nächste Auswahlfeld wechseln '#13 +
- ^C'oder durch anklicken der Punkte und der Wahlknöpfe mit der Mouse wird '#13 +
- ^C'der entsprechende Befehl ausgeführt.'#13 +
- ^C'Wechsel zum Einfügen/Überschreiben mit der Einfügetaste.';
- Msg3 :=^C'Durch die Anwahl mit den Tasten "ALT" + "gekennzeichnetem" Buchstaben'#13 +
- ^C'kann auch ein Feld oder Befehlsknopf direkt angesprochen werden.'#13 +
- ^C'Wählen Sie den Monitor ihres PCs und Ihren entsprechenden Drucker aus.'#13 +
- ^C'Druckerhilfen siehe Hilfe 2 im Menü.';
- MessageBoxGross(Msg, NIL,Msg2, NIL,Msg3, NIL,80,23, mfHelp + mfOkButton);
- END;
-
- PROCEDURE TFileDialog.HilfeD;
- VAR
- Msg : STRING;
- Msg2 : STRING;
- Msg3 : STRING;
- BEGIN
- Msg :=^C'AUSWAHL DRUCKER/MODUS: SCHRIFTARTEN: ZEILEN JE SEITE: '#13 +
- ^C''#13 +
- ^C'1. Epson Schmalschrift #15 #27,#67,#72 '#13 +
- ^C' Normalschrift #18 (#72 = Zeilenzahl)'#13 +
- ^C' Blattvorschub #12 ';
- Msg2 :=^C'2. IBM Schmalschrift #15 #27,#91,72,#116 '#13 +
- ^C' Normalschrift #18 (72 = Zeilenzahl) '#13 +
- ^C' Blattvorschub #12 ';
- Msg3 :=^C'3. Laser KYOCERA EPSON über Font: !R! FRPO U7,5; EXIT;'#13 +
- ^C' Sonst wie unter 1. Epson (#72 =Zeilenzahl) '#13 +
- ^C' '#13 +
- ^C' ';
- MessageBoxGross(Msg, NIL,Msg2, NIL,Msg3, NIL,80,23, mfHelp + mfOkButton);
- END;
-
- PROCEDURE TFileDialog.OutOfMemory;
- VAR
- Msg : STRING;
- BEGIN
- Msg :=^C'Nicht genug Arbeitsspeicher'#13 +
- ^C'vorhanden';
- MessageBox(Msg, NIL,36,9, mfError + mfOkButton);
- END;
-
- PROCEDURE TFileDialog.HandleEvent(VAR Event: TEvent);
- BEGIN
- TDialog.HandleEvent(Event);
- IF Event.What = evCommand THEN
- CASE Event.Command OF
- cmOK, cmCancel:
- BEGIN
- EndModal(Event.Command);
- ClearEvent(Event);
- END;
- cmHelp1 : Hilfe;
- cmHelp2 : HilfeD;
- END;
- END;
-
- {┌─────────────────────────────────────────────────────────┐
- │ TFileDialog.Fehler │
- ├─────────────────────────────────────────────────────────┤
- │ Gibt in einem Dialogfenster über ein TDialog-Objekt │
- │ eine DOS-Fehlermeldung heraus │
- └─────────────────────────────────────────────────────────┘}
- PROCEDURE TFileDialog.Fehler;
- VAR
- Falsch,Msg,Botschaft : STRING;
-
- BEGIN
- Str(DosError,Falsch);
- IF DosError = 2 THEN BEGIN
- Botschaft:= ^C'Programm/-teil nicht gefunden !';
- END
- ELSE
- IF DosError = 3 THEN BEGIN
- Botschaft:= ^C'Kann den Pfad nicht finden !';
- END
- ELSE
- IF DosError = 4 THEN BEGIN
- Botschaft:= ^C'Zuviel Dateien geöffnet !';
- END
- ELSE
- IF DosError = 5 THEN BEGIN
- Botschaft:= ^C'Dateizugriff verweigert !';
- END
- ELSE
- IF DosError = 8 THEN BEGIN
- Botschaft:= ^C'Zuwenig Speicher !';
- END
- ELSE BEGIN
- Botschaft := ^C'Unbekannter Fehler !';
- END;
- Msg:=^C'ES LIEGT FOLGENDER DOS-FEHLER VOR'#13 +
- ^C'Fehler Nr. : ';
- Msg := Msg + Falsch +''#13 + Botschaft;
- MessageBox(Msg,NIL,36,9,mfError + mfOkButton);
- END;
-
- {┌─────────────────────────────────────────────────────────┐
- │ TFileDialog.Installiere │
- ├─────────────────────────────────────────────────────────┤
- │ Installiert Dateien wie vorgegeben │
- └─────────────────────────────────────────────────────────┘}
- PROCEDURE TFileDialog.Installiere(LaufWZu : STRING);
- VAR
- Msg : STRING;
- InstLW,S,S1 : STRING;
- Falsch : Word;
-
- PROCEDURE Meldung(Pfad1 : STRING);
- BEGIN
- Msg :=^C'Pfad kann nicht angelegt'#13 +
- ^C'werden, da bereits vorhanden, oder Eingabe ist falsch !';
- IF (MessageBox(Msg,
- NIL,60,9, mfInformation + mfOkButton + mfCancelButton))
- <> cmCancel
- THEN BEGIN LaufWerkDa := False END ELSE BEGIN
- LaufWerkDa := True;
- END;
- END;
-
- {─────────────────────────────────────────DateienEinlesen──}
- PROCEDURE DateienEinlesen(Von,Nach : STRING);
-
- BEGIN
- {Datei von kopieren nach Install.-Laufwerk}
- DoneSysError;
- DoneEvents;
- DoneVideo;
- DoneMemory;
- SetMemTop(HeapPtr);
- PrintStr(' Die Dateien werden wie gewählt installiert... ');
- SwapVectors;
- Exec(GetEnv('COMSPEC'),'/C CLS');
- Exec(GetEnv('COMSPEC'),'/C Copy ' + VON + '\*.* ' + Nach);
- SwapVectors;
- SetMemTop(HeapEnd);
- InitMemory;
- InitVideo;
- InitEvents;
- InitSysError;
- IF DosError <> 0 THEN Fehler;
- END;
-
- PROCEDURE LwWechseln(LaufWerk : STRING);
- VAR HStr : STRING[19];
- i : Word;
-
- BEGIN
- HStr:= ''; {Leerstring vorgeben}
- FOR i:= 1 TO Length(Laufwerk) DO
- BEGIN
- IF (Copy(Laufwerk,i,1)) <> ' '
- THEN HStr:= HStr + Copy(Laufwerk,i,1);
- END; {for}
- Laufwerk := HStr;
- {$I-} ChDir(Laufwerk); {$I+} {Lw wechseln}
- Falsch := IOResult;
- IF Falsch <> 0 THEN {Fehlerhafte Ausführung}
- BEGIN
- Msg:=^C'ES LIEGT EIN FEHLER VOR'#13 +
- ^C'Laufwerk '+Laufwerk+' nicht vorhanden,'#13 +
- ^C'oder konnte nicht angelegt werden, da ungültige Eingabe !';
- MessageBox(Msg,NIL,62,10,mfError + mfOkButton);
- END;
- END;
-
-
- PROCEDURE Laufwerkwechsel;
- BEGIN
- IF Drucker = 0 THEN LW22 :='\EPSON' ELSE
- IF Drucker = 1 THEN LW22 :='\IBM' ELSE
- IF Drucker = 2 THEN LW22 :='\LASER';
- IF Farben = 0 THEN LW33 :='\FARBE' ELSE
- IF Farben = 1 THEN LW33 :='\SW' ELSE
- IF Farben = 2 THEN LW33 :='\MONO';
- LwWechseln(Laufwerk); {in das zu installierende Laufwerk}
- IF Falsch <> 0 THEN Exit;
- {$I-}
- MkDir(Pfad);
- IF IOResult <> 0 THEN BEGIN
- Meldung(Pfad);
- IF LaufWerkDa THEN Exit ELSE
- END;
- InstLW:= Lw1+LaufWZu; {Ausgangslaufwerk Pfad INSTALL}
- LwWechseln(InstLW); {Ausgangslaufwerk Pfad INSTALL}
- IF Falsch <> 0 THEN Exit;
- DateienEinlesen(InstLW,Laufwerk+Pfad); {Liest Dateien ein und kopiert sie
- in das Laufwerk wie in Klammern}
- LwWechseln(InstLW+LW22); {Ausgangslaufwerk Pfad INSTALL + DruckerPfad}
- IF Falsch <> 0 THEN Exit;
- DateienEinlesen(InstLW+LW22,Laufwerk+Pfad); {Liest Dateien ein und kopiert sie
- in das Laufwerk wie in Klammern}
- LwWechseln(InstLW+LW33); {Ausgangslaufwerk Pfad INSTALL + FarbenPfad}
- IF Falsch <> 0 THEN Exit;
- DateienEinlesen(InstLW+LW33,Laufwerk+Pfad); {Liest Dateien ein und kopiert sie
- in das Laufwerk wie in Klammern}
- LwWechseln(Laufwerk+Pfad); {in das zu installierende Direktorie}
- IF Falsch <> 0 THEN Exit;
- LwWechseln(LW1); {in das Ausgangslaufwerk zurück}
- IF Falsch <> 0 THEN Exit;
- LwWechseln('C:\'); {in das Haupt-Laufwerk zurück}
- IF Falsch <> 0 THEN Exit;
- {$I+}
- END;
-
- BEGIN
- IF Farben = 0 THEN S := 'Farbe '
- ELSE IF Farben = 1 THEN S := 'Schwarz-Weiß'
- ELSE IF Farben = 2 THEN S := 'Monochrome ';
- IF Drucker = 0 THEN S1 := 'Epson '
- ELSE IF Drucker = 1 THEN S1 := 'IBM '
- ELSE IF Drucker = 2 THEN S1 := 'Laser ';
- Msg := ^C'Es wird nach wie folgt Installiert : '#13 +
- ^C'Laufwerk und Pfad: '+Laufwerk+Pfad+''#13 +
- ^C'Monitor: '+S+''#13 +
- ^C'Drucker: '+S1;
- IF (MessageBox(Msg,
- NIL,50,10, mfInformation + mfCancelButton + mfOkButton)) <> cmCancel
- THEN BEGIN
- Laufwerkwechsel;
- IF Falsch <> 0 THEN
- BEGIN
- Falsch := 0;
- Redraw;
- Exit;
- END;
- IF LaufwerkDa THEN BEGIN
- LaufwerkDa := False;
- Redraw;
- Exit;
- END
- ELSE
- Redraw;
- END
- ELSE
- Redraw;
- END;
-
- constructor TFileDialog.NewParameter(LaufW, LaufW1, SubD : STRING);
- VAR
- LaufWZu1 : STRING;
- Parameter: PFileDialog; {Dialogobjekt}
- Ptr: PView; {Zeiger auf Auswahlbox}
- Dummy: word; {Ergebnis von ExecView}
- R: TRect;
- LABEL Anfang;
-
- PROCEDURE InitParaDataRec;
- VAR
- Suchweg: STRING;
-
- BEGIN
- WITH ParaData DO
- BEGIN
- LaufWerkDa := False;
- LaufWZU1 := LaufW1;
- Suchweg:= ''; {Leerstring}
- {$I-} GetDir(0,Suchweg); {$I+} {Momentan gesetztes Lw}
- IF IOResult = 0 THEN BEGIN {Fehlerfreie Ausführung}
- LW11 := Suchweg;
- LW12 := LW11;
- END
- ELSE BEGIN
- LW1 := 'A:\';
- END;
- LW2 := LaufW;
- FarbData:= 0;
- DruckerData := 0;
- SubData:= SubD;
- END; {with}
- END;
-
- BEGIN
- InitParaDataRec;
- R.Assign(12,2,63,21);
- Parameter:= New(PFileDialog,Init(R,'INSTALL Installieren'));
- WITH Parameter^ DO
- BEGIN
- {────────────────────────────────CheckBox installieren──}
- R.Assign(2,3,20,6);
- Ptr:= New(PRadioButtons,Init(R, { LWData: String[3]; }
- { LW2 : String[3] }
- { FarbData: Word; }
- { DruckerData : Word; }
- { SubData: String[8]; }
-
- NewSItem('~F~arbe',
- NewSItem('~S~chwarz-Weiß',
- NewSItem('~M~ono',
- NIL)))
- ));
- Insert(Ptr);
- R.Assign(2,2,13,3);
- Insert(New(PLabel,Init(R,'~B~ildschirm',Ptr)));
- {────────────────────────────────RadioBox installieren──}
- R.Assign(25,3,45,6);
- Ptr:= New(PRadioButtons,Init(R,
- NewSItem('~E~pson',
- NewSItem('~I~BM',
- NewSItem('~L~aser',
- NIL)))
- ));
- Insert(Ptr);
- R.Assign(25,2,35,3);
- Insert(New(PLabel,Init(R,'~D~rucker',Ptr)));
- {─────────────────────────────Derzeitiges Laufwerk----──}
- R.Assign(3,8,8,9);
- Ptr:= New(PInputLine,Init(R,3));
- Insert(Ptr);
- R.Assign(2,7,30,8);
- Insert(New(PLabel,Init(R,
- 'Installation ~v~om Laufwerk',Ptr)));
- R.Assign(8,8,40,9);
- Insert (New (pStaticText,Init (R,
- '(min./max. 3 gültige Zeichen)')));
- {─────────────────────────────Installation nach-------──}
- R.Assign(3,11,8,12);
- Ptr:= New(PInputLine,Init(R,3));
- Insert(Ptr);
- R.Assign(2,10,30,11);
- Insert(New(PLabel,Init(R,
- '~I~nstallation nach Laufwerk',Ptr)));
- R.Assign(8,11,40,12);
- Insert (New (pStaticText,Init (R,
- '(min./max. 3 gültige Zeichen)')));
- {─────────────────────────────Eingabefeld installieren──}
- R.Assign(3,14,13,15);
- Ptr:= New(PInputLine,Init(R,8));
- Insert(Ptr);
- R.Assign(2,13,30,14);
- Insert(New(PLabel,Init(R,'~P~fadname',Ptr)));
- R.Assign(13,14,40,15);
- Insert (New (pStaticText,Init (R,
- '(max. 8 gültige Zeichen)')));
- {────────────────────────────────Schalter installieren──}
- R.Assign(2,16,11,18);
- Insert(New(PButton,Init(R,'Ende',cmCancel,bfNormal)));
- R.Assign(13,16,23,18);
- Insert(New(PButton,Init(R,'Hilfe~1~',cmHelp1,bfNormal)));
- R.Assign(25,16,35,18);
- Insert(New(PButton,Init(R,'Hilfe~2~',cmHelp2,bfNormal)));
- R.Assign(37,16,46,18);
- Insert(New(PButton, Init(R, 'O~K~', cmOK, bfdefault)));
- END; {with}
- {─────────────Nur wenn genügend Heap, in Gruppe einfügen──}
- BEGIN
- Parameter^.SetData(ParaData); {Voreinstellungen}
- Anfang:
- Dummy:= DeskTop^.ExecView(Parameter);
- IF Dummy <> cmCancel
- THEN BEGIN
- Parameter^.GetData(ParaData); {Geänderte Einträge}
- {──────────────────Den Variablen zuordnen──}
- { LW1 : String[3]; }
- { Pfad : String[8]; }
- { Drucker : Word; }
- { Farben : Word; }
- { Laufwerk : String[3]; }
- {-----------------------------------------------------------}
- IF Length(ParaData.SubData) < 1 THEN
- Pfad := 'INSTALL'
- ELSE
- Pfad:= ParaData.SubData;
- {-----------------------------------------------------------}
- IF Length(ParaData.LW11) < 3 THEN
- LW1 := LW12
- ELSE
- LW1:= ParaData.LW11;
- {-----------------------------------------------------------}
- IF Length(ParaData.LW2) < 3 THEN
- LaufWerk := 'C:\'
- ELSE
- LaufWerk:= ParaData.LW2;
- {-----------------------------------------------------------}
- IF (ParaData.DruckerData < 0) OR (ParaData.DruckerData > 2)
- THEN BEGIN {────────falsche oder Keine Option gewählt──}
- Drucker:= 0;
- END {if}
- ELSE BEGIN {─────────────Mindestens 1 Option gewählt──}
- WITH ParaData DO
- Drucker:= DruckerData
- END; {else}
- IF (ParaData.FarbData < 0) OR (ParaData.FarbData > 2)
- THEN Farben:= 0
- ELSE Farben :=ParaData.FarbData
- END
- ELSE BEGIN
- Dispose(Parameter,Done); {Objekt wieder freigeben}
- Exit
- END; {if}
- Dispose(Parameter,Done); {Objekt wieder freigeben}
- END;
- Installiere(LaufWZu1);
- END;
-
- END.
-