home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / delite / dxfview / dxfview.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-04-01  |  18.1 KB  |  550 lines

  1. PROGRAM DXFView;
  2.  
  3. {$N+,E+ }     { 8087, Emulation }
  4.  
  5. { Dieses Beispielprogramm erlaubt die Betrachtung von bis zu vier DXF-
  6.   Grafiken in Fenstern und illustriert die Anwendung des deLite-Toolkits }
  7.  
  8.  
  9. USES  Kernel, Api, Dialogs, AcadDXF, firework, errors;
  10.  
  11. CONST ProjektName  = 'DXFVIEW';                { so heissen alle Dateien  }
  12.       DXFSuffix    = '.DXF';
  13.       IDFenster1   =  201;                     { Die IDs der Botschaften  }
  14.       IDFenster2   =  202;
  15.       IDFenster3   =  203;
  16.       IDFenster4   =  204;
  17.       IDAlleFenster=  205;
  18.       IDZoom       =  206;
  19.  
  20.       OK_BUTTON  = 97;
  21.       CAN_BUTTON = 98;
  22.       REQUESTER  = 99;
  23.  
  24. TYPE  Darstellung  =  (Einzel, Alle);          { Bildschirmdarstellung   }
  25.       IcoArray     = Record
  26.                        DeltaX : Integer;
  27.                        DeltaY : Integer;
  28.                        IcoArr : Array[0..199] of Byte;
  29.                      End;
  30.  
  31.  
  32. CONST Tub40        : IcoArray = (DeltaX : 39; DeltaY : 39; { Das TuB Logo }
  33.                                  IcoArr : (
  34.       $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  35.       $1f,$ff,$ff,$e0,$00,$3f,$ff,$ff,$f1,$ff,$7f,$ff,$ff,$f9,$f9,$7f,$ff,$ff,$f9,$f7,
  36.       $7f,$ff,$ff,$f9,$f1,$3f,$ff,$ff,$f9,$ff,$1f,$ff,$ff,$f9,$d1,$00,$00,$0f,$f9,$ff,
  37.       $00,$7f,$8f,$f3,$82,$00,$7f,$8f,$f3,$fe,$00,$7f,$8f,$f3,$ee,$00,$7f,$8f,$f3,$e2,
  38.       $00,$7f,$8f,$f3,$fe,$00,$7f,$8f,$f3,$ce,$00,$7f,$8f,$f3,$d6,$00,$ff,$9f,$f3,$c6,
  39.       $00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$e4,$00,$ff,$1f,$e7,$d4,$00,$ff,$1f,$e7,$04,
  40.       $00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$fc,$01,$ff,$1f,$e7,$fc,
  41.       $01,$fe,$3f,$e7,$fc,$01,$fe,$3f,$cf,$fc,$01,$fe,$3f,$cf,$f8,$01,$fe,$3f,$cf,$f8,
  42.       $01,$fe,$3f,$cf,$f8,$01,$fe,$3f,$cf,$f0,$01,$fe,$1f,$cf,$f0,$01,$fe,$0f,$cf,$e0,
  43.       $00,$00,$07,$cf,$c0,$00,$00,$03,$cf,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00));
  44.  
  45.  
  46. VAR   LaunchResult      : integer;
  47.       MyEvent           : EventTyp;                  { eine Botschaft        }
  48.       StillRunning      : boolean;
  49.       MyID              : integer;
  50.       MyMenu            : hMenu;                     { Handle auf das Menü   }
  51.       Modus             : Darstellung;
  52.  
  53.       AktivWindow       : integer;                   { Rahmenfarbe akt. Fenster }
  54.  
  55.       ID1,ID2           : integer;                   { Die IDs der Fenster   }
  56.       ID3,ID4           : integer;
  57.       AktivID           : integer;                   { ID des aktiven Fensters }
  58.  
  59.       DXFFile1          : String;                    { Die DXF-Files der Fenster }
  60.       DXFFile2          : String;
  61.       DXFFile3          : String;
  62.       DXFFile4          : String;
  63.  
  64.       DXFDirectory      : String;
  65.  
  66.       GetInitFileResult : Boolean; { Ergebnis Platzhalter für die Funktionen
  67.                                      des Init Files }
  68.  
  69.  
  70. procedure StartWindow;
  71. Var MyDialog: Dialog;
  72.     MyUserButton: PUserButton;
  73.     MyLabel     : ^LabelText;
  74. begin
  75.   MyDialog.Init(60*FontX, 6*FontY, 0, DefEventProc);
  76.  
  77.   new(MyUserButton, Init(20,10,85,70,39,39,98,'T',@Tub40.IcoArr));
  78.   Mydialog.AddItem(MyUserButton);
  79.   MyUserButton^.MakeDefaultItem;
  80.  
  81.   new(MyLabel, Init(19*FontX, FontY, 10,'BrainLab DXFview Version 2.1  1/92'));
  82.   MyDialog.AddItem(MyLabel);
  83.  
  84.   new(MyLabel, Init(21*FontX, 3*FontY, 11, 'Andreas Schumm & Frank Seidinger'));
  85.   Mydialog.AddItem(MyLabel);
  86.  
  87.   MyDialog.Show;
  88.   MyDialog.DoDialog;
  89.   MyDialog.Done;
  90. end;
  91.  
  92.  
  93. procedure Information; { wir stellen uns noch einmal vor }
  94. Var ScrX,ScrY : Integer;
  95.     WindowX   : Integer;
  96.     WindowY   : Integer;
  97. begin
  98.   HideMouse;
  99.   ScrX    := Succ(GetMaxX) div 2;
  100.   ScrY    := Succ(GetMaxY) div 4;
  101.   WindowX := (74 * FontX)  div 2;
  102.   WindowY := (13 * FontY);
  103.   OpenWindow(ScrX-WindowX,ScrY,ScrX+WindowX,ScrY+WindowY );
  104.   WriteWin('BrainLab DXFView Version 2.1   1/92',35,1,DialogText);
  105.   WriteWin('Andreas Schumm & Frank Seidinger',37,3,DialogStat);
  106.   WriteWin('erstellt mit deLite für Turbo-Pascal',35,8,DialogText);
  107.   OpenWindow(ScrX-WindowX+5,ScrY+FontY div 2,
  108.              ScrX-WindowX+33*FontX,ScrY+12*FontY+FontY div 2);
  109.   Bar(0,0,PortMaxX,PortMaxY,0);
  110.   Fireworks(6,200,PortMaxX,PortMaxY,15);
  111.   CloseWindow;
  112.   CloseWindow;
  113.   ShowMouse;
  114. end;
  115.  
  116. { ***** Der File Requester ***** }
  117.  
  118. procedure SelectProc(TheEvent: EventTyp); far;
  119. var MYDLG    : PDLG;
  120.     thefile  : string;
  121.     MyReq    : PFileRequester;
  122.     TestFile : File;
  123. begin
  124.   MYDLG := TheEvent.DlgAdr;
  125.   if TheEvent.Class = DialogEvent then
  126.     Case TheEvent.MSG of
  127.       DLG_OK      : Begin
  128.                       MyReq := MYDLG^.FindDlgItem(REQUESTER);
  129.                       thefile := MyReq^.GetPath;
  130.                       if thefile[length(thefile)] <> '\' then
  131.                         thefile := thefile + '\';
  132.                       thefile := thefile + MyReq^.GetSelected;
  133.                       Assign(TestFile,TheFile);
  134.                       {$I- } Reset(TestFile); {$I+ }
  135.                       If (IOResult = 0) Then
  136.                         Begin
  137.                           Close(TestFile);
  138.                           MyDLG^.DestroyDialog;
  139.                         End;
  140.                     End;
  141.       DLG_CANCEL  : Begin
  142.                       MYDLG^.DestroyDialog;
  143.                       MYDLG^.flags := MYDLG^.flags or MF_CANCELLED;
  144.                     End;
  145.     end;
  146. end;
  147.  
  148. Function SelectFile(Beschriftung, FilePath, FileMask : String) : String;
  149.  
  150. Var   MyDialog        : Dialog;
  151.       MyButton        : PButton;
  152.       MyFileRequester : PFileRequester;
  153.       TheFile         : String;
  154.  
  155. begin
  156.   MyDialog.Init(440,210, MF_CAPTION, SelectProc);
  157.   MyDialog.SetCaption(Beschriftung);
  158.  
  159.   new(MyButton, init(440-80, 10, 70, 30, OK_BUTTON, 'OK'));
  160.   MyDialog.Additem(MyButton);
  161.   MyButton^.MakeDefaultItem;
  162.  
  163.   new(MyButton, init(440-80, 50, 70, 30, CAN_BUTTON, 'Abbruch'));
  164.   MyDialog.Additem(MyButton);
  165.   MyButton^.MakeCancelItem;
  166.  
  167.   new(MyFileRequester, init(20,20, 6, REQUESTER, FilePath, FileMask));
  168.   MyDialog.AddItem(MyFileRequester);
  169.  
  170.   MyDialog.Show;
  171.   MyDialog.DoDialog;
  172.   If (MyDialog.Flags and MF_CANCELLED) = 0 Then
  173.     Begin
  174.       TheFile := MyFileRequester^.GetPath;
  175.       if TheFile[length(TheFile)] <> '\' Then
  176.         TheFile := TheFile + '\';
  177.       TheFile := TheFile + MyFileRequester^.GetSelected;
  178.       SelectFile := TheFile
  179.     End
  180.   Else SelectFile := '';
  181.   MyDialog.Done;
  182. end;
  183.  
  184.  
  185. procedure DoQuit;                     { Programm ggf. beenden }
  186. Var YNRsc: YesNoDialog;
  187. begin
  188.   YNRsc.text := 'Programm wirklich beenden ?';
  189.   YNRsc.xorg := 60;
  190.   YNRsc.yorg := 60;
  191.   YNRsc.topic := 'Programm beenden';
  192.   IF DoYesNoDialog(YNRsc) then StillRunning := false;
  193. end;
  194.  
  195.  
  196. { ******************************* }
  197. { Die Fenster-Empfangsprozeduren  }
  198. { ******************************* }
  199.  
  200.  
  201. Procedure Fenster1(MyMessage: EventTyp); far;
  202. begin
  203.   If ((MyMessage.Class = LeMouse) and (MyMessage.Attrib = LeftButtonPressed))
  204.     or (MyMessage.Class = Menu) then
  205.   begin
  206.     CheckMenuItem(MyMenu,AktivID,MF_UNCHECKED);
  207.     Case AktivID of                     { aktives Fenster umrahmen  }
  208.        IDFenster1: FrameSubApplication(ID1,7);
  209.        IDFenster2: FrameSubApplication(ID2,7);
  210.        IDFenster3: FrameSubApplication(ID3,7);
  211.        IDFenster4: FrameSubApplication(ID4,7);
  212.       end;
  213.     AktivID := IDFenster1;
  214.     FrameSubApplication(ID1,AktivWindow);
  215.     CheckMenuItem(MyMenu,AktivID,MF_CHECKED);
  216.   end;
  217.   Case MyMessage.Class of
  218.     DoRedraw  : begin
  219.                   ClearWindow;
  220.                   if DXFFile1 <> '' then
  221.                     if InterpretDXF(DXFFile1) <> ok then
  222.                       ErrWindow(30,30,'DXF kann nicht interpretiert werden.');
  223.                 end;
  224.     end;
  225. end;
  226.  
  227.  
  228. Procedure Fenster2(MyMessage: EventTyp); far;
  229. begin
  230.   If ((MyMessage.Class = LeMouse) and (MyMessage.Attrib = LeftButtonPressed))
  231.     or (MyMessage.Class = Menu) then
  232.   begin
  233.     CheckMenuItem(MyMenu,AktivID,MF_UNCHECKED);
  234.     Case AktivID of                     { aktives Fenster umrahmen  }
  235.        IDFenster1: FrameSubApplication(ID1,7);
  236.        IDFenster2: FrameSubApplication(ID2,7);
  237.        IDFenster3: FrameSubApplication(ID3,7);
  238.        IDFenster4: FrameSubApplication(ID4,7);
  239.       end;
  240.     AktivID := IDFenster2;
  241.     FrameSubApplication(ID2,AktivWindow);
  242.     CheckMenuItem(MyMenu,AktivID,MF_CHECKED);
  243.   end;
  244.   Case MyMessage.Class of
  245.     DoRedraw  : begin
  246.                   ClearWindow;
  247.                   if DXFFile2 <> '' then
  248.                     if InterpretDXF(DXFFile2) <> ok then
  249.                       ErrWindow(30,30,'DXF kann nicht interpretiert werden.');
  250.                 end;
  251.     end;
  252. end;
  253.  
  254.  
  255. Procedure Fenster3(MyMessage: EventTyp); far;
  256. begin
  257.   If ((MyMessage.Class = LeMouse) and (MyMessage.Attrib = LeftButtonPressed))
  258.     or (MyMessage.Class = Menu) then
  259.   begin
  260.     CheckMenuItem(MyMenu,AktivID,MF_UNCHECKED);
  261.     Case AktivID of                     { aktives Fenster umrahmen  }
  262.        IDFenster1: FrameSubApplication(ID1,7);
  263.        IDFenster2: FrameSubApplication(ID2,7);
  264.        IDFenster3: FrameSubApplication(ID3,7);
  265.        IDFenster4: FrameSubApplication(ID4,7);
  266.       end;
  267.     AktivID := IDFenster3;
  268.     FrameSubApplication(ID3,AktivWindow);
  269.     CheckMenuItem(MyMenu,AktivID,MF_CHECKED);
  270.   end;
  271.   Case MyMessage.Class of
  272.     DoRedraw  : begin
  273.                   ClearWindow;
  274.                   if DXFFile3 <> '' then
  275.                     if InterpretDXF(DXFFile3) <> ok then
  276.                       ErrWindow(30,30,'DXF kann nicht interpretiert werden.');
  277.                 end;
  278.     end;
  279. end;
  280.  
  281.  
  282. Procedure Fenster4(MyMessage: EventTyp); far;
  283. begin
  284.   If ((MyMessage.Class = LeMouse) and (MyMessage.Attrib = LeftButtonPressed))
  285.     or (MyMessage.Class = Menu) then
  286.   begin
  287.     CheckMenuItem(MyMenu,AktivID,MF_UNCHECKED);
  288.       Case AktivID of                     { aktives Fenster umrahmen  }
  289.        IDFenster1: FrameSubApplication(ID1,7);
  290.        IDFenster2: FrameSubApplication(ID2,7);
  291.        IDFenster3: FrameSubApplication(ID3,7);
  292.        IDFenster4: FrameSubApplication(ID4,7);
  293.       end;
  294.     AktivID := IDFenster4;
  295.     FrameSubApplication(ID4,AktivWindow);
  296.     CheckMenuItem(MyMenu,AktivID,MF_CHECKED);
  297.   end;
  298.   Case MyMessage.Class of
  299.     DoRedraw  : begin
  300.                   ClearWindow;
  301.                   if DXFFile4 <> '' then
  302.                     if InterpretDXF(DXFFile4) <> ok then
  303.                       ErrWindow(30,30,'DXF kann nicht interpretiert werden.');
  304.                 end;
  305.     end;
  306. end;
  307.  
  308.  
  309. Procedure Vollbild;             { Zeigt ein Fenster ganz gross ! }
  310. Var  MSG    : EventTyp;
  311. begin
  312.   CloseSubApplication(ID1);     { Die vier Fenster schliessen }
  313.   CloseSubApplication(ID2);
  314.   CloseSubApplication(ID3);
  315.   CloseSubApplication(ID4);
  316.   ActivateApplication(MyID);    { und die Hauptapplikation reaktivieren }
  317.   SetTheViewPort(MyID);
  318.   ClearWindow;                { Bildschirm löschen }
  319.   Msg.Class := DoRedraw;
  320.   Case AktivID of               { dann ein Redraw }
  321.     IDFenster1 : Fenster1(Msg);
  322.     IDFenster2 : Fenster2(Msg);
  323.     IDFenster3 : Fenster3(Msg);
  324.     IDFenster4 : Fenster4(Msg);
  325.     end;
  326.   Modus := Einzel;
  327. end;
  328.  
  329.  
  330. Procedure VierFenster;              { zeigt vier kleine Fenster ! }
  331. Var ThePort: ViewPortType;
  332.     XSize  : integer;
  333.     YSize  : integer;
  334.     XOrg   : integer;
  335.     YOrg   : integer;
  336.     XEnd   : integer;
  337.     YEnd   : integer;
  338.     Msg    : EventTyp;
  339. begin
  340.   ClearWindow;                       { Fenster löschen }
  341.   GetViewSettings(ThePort);
  342.   With ThePort Do
  343.     begin
  344.       XSize := (x2-x1) div 2 - 2;       { Ausdehnung in x-Richtung berechnen }
  345.       YSize := (y2-y1) div 2 - 4;       { dito in y-Richtung }
  346.       XOrg  := x1;
  347.       YOrg  := y1 + 3;
  348.       XEND  := x2;
  349.       YEnd  := y2;
  350.     end;
  351.  
  352.   ID1 := OpenSubApplication(Fenster1,0,'Fenster 1',
  353.                      XOrg,YOrg,Xorg+XSize,YOrg+YSize);
  354.  
  355.   ID2 := OpenSubApplication(Fenster2,0,'Fenster 2',
  356.                      XEND-XSize,YOrg,XEND,YOrg+YSize);
  357.  
  358.   ID3 := OpenSubApplication(Fenster3,0,'Fenster 3',
  359.                      XOrg,YEnd-YSize,Xorg+XSize,YEnd);
  360.  
  361.   ID4 := OpenSubApplication(Fenster4,0,'Fenster 4',
  362.                      XEnd-XSize,YEnd-YSize,XEnd,YEnd);
  363.  
  364.   SuspendApplication(MyID);           { Hauptfenster deaktivieren }
  365.  
  366.   Case AktivID of                     { aktives Fenster umrahmen  }
  367.     IDFenster1: FrameSubApplication(ID1,AktivWindow);
  368.     IDFenster2: FrameSubApplication(ID2,AktivWindow);
  369.     IDFenster3: FrameSubApplication(ID3,AktivWindow);
  370.     IDFenster4: FrameSubApplication(ID4,AktivWindow);
  371.     end;
  372.  
  373.   MSG.Class := DoRedraw;
  374.  
  375.   PostMessage(MSG, ID1);              { alle Fenster neu zeichnen }
  376.   PostMessage(MSG, ID2);
  377.   PostMessage(MSG, ID3);
  378.   PostMessage(MSG, ID4);
  379.  
  380.   Modus := Alle;
  381. end;
  382.  
  383.  
  384. procedure NewWindow;
  385. Var MyMsg : EventTyp;
  386. begin
  387.   MyMsg.Class := DoRedraw;
  388.   Case AktivID of
  389.     IDFenster1 : begin
  390.                    DXFFile1 := '';
  391.                    SetTheViewPort(ID1);
  392.                    Fenster1(MyMsg);
  393.                  end;
  394.     IDFenster2 : begin
  395.                    DXFFile2 := '';
  396.                    SetTheViewPort(ID2);
  397.                    Fenster2(MyMsg);
  398.                  end;
  399.     IDFenster3 : begin
  400.                    DXFFile3 := '';
  401.                    SetTheViewPort(ID3);
  402.                    Fenster3(MyMsg);
  403.                  end;
  404.     IDFenster4 : begin
  405.                    DXFFile4 := '';
  406.                    SetTheViewPort(ID4);
  407.                    Fenster4(MyMsg);
  408.                  end;
  409.   end; { Case }
  410. end;
  411.  
  412.  
  413. procedure LoadDXF;
  414. var MyMsg : EventTyp;
  415.     LFName: string;
  416. begin
  417.   LFName := SelectFile('DXF-Datei laden', DXFDirectory + '\', '*.DXF');
  418.   if LFName <> '' then
  419.     begin
  420.       MyMsg.Class := DoRedraw;
  421.       Case AktivID of
  422.         IDFenster1 : begin
  423.                        DXFFile1 := LFname;
  424.                        SetTheViewPort(ID1);
  425.                        Fenster1(MyMsg);
  426.                      end;
  427.         IDFenster2 : begin
  428.                        DXFFile2 := LFname;
  429.                        SetTheViewPort(ID2);
  430.                        Fenster2(MyMsg);
  431.                      end;
  432.         IDFenster3 : begin
  433.                        DXFFile3 := LFname;
  434.                        SetTheViewPort(ID3);
  435.                        Fenster3(MyMsg);
  436.                      end;
  437.         IDFenster4 : begin
  438.                        DXFFile4 := LFname;
  439.                        SetTheViewPort(ID4);
  440.                        Fenster4(MyMsg);
  441.                      end;
  442.         end; { Case }
  443.     end;
  444. end;
  445.  
  446.  
  447. Procedure HandleMsg(MyMessage: EventTyp); far;
  448. { Die Hauptempfangsprozedur behandelt die Menü-Botschaften }
  449. Begin
  450.   With MyMessage Do
  451.     Case Class Of
  452.       Menu    : begin
  453.                   Case MenuItemID of
  454.                      0       : DoQuit;
  455.  
  456.                      101     : LoadDXF;
  457.                      102     : NewWindow;
  458.  
  459.                      205     : begin
  460.                                  ReplaceMenuItem(MyMenu,
  461.                                                  205,
  462.                                                  '&Alle Fenster',
  463.                                                  206,'A');
  464.                                  Vollbild;
  465.                                end;
  466.  
  467.                      206     : begin
  468.                                  ReplaceMenuItem(MyMenu,
  469.                                                  206,
  470.                                                  '&Zoom',
  471.                                                  205,'Z');
  472.                                  VierFenster;
  473.                                end;
  474.  
  475.                    IDFenster1: begin
  476.                                  Fenster1(MyMessage);
  477.                                  MyMessage.Class := DoRedraw;
  478.                                  If Modus = Einzel then
  479.                                    Fenster1(MyMessage);
  480.                                end;
  481.  
  482.                    IDFenster2: begin
  483.                                  Fenster2(MyMessage);
  484.                                  MyMessage.Class := DoRedraw;
  485.                                  If Modus = Einzel then
  486.                                    Fenster2(MyMessage);
  487.                                end;
  488.  
  489.                    IDFenster3: begin
  490.                                  Fenster3(MyMessage);
  491.                                  MyMessage.Class := DoRedraw;
  492.                                  If Modus = Einzel then
  493.                                    Fenster3(MyMessage);
  494.                                end;
  495.  
  496.                    IDFenster4: begin
  497.                                  Fenster4(MyMessage);
  498.                                  MyMessage.Class := DoRedraw;
  499.                                  If Modus = Einzel then
  500.                                    Fenster4(MyMessage);
  501.                                end;
  502.  
  503.                      399     : Information;
  504.  
  505.                   end;
  506.                 end;
  507.     end;
  508. End;
  509.  
  510.  
  511. {$F- }
  512.  
  513.  
  514. Begin
  515.   DebugOn;
  516.   StillRunning := true;
  517.   Modus        := Alle;              { 4 Fenster sichtbar  }
  518.   AktivID      := IDFenster1;        { Fenster 1 ist aktiv }
  519.  
  520.   DXFFile1 := '';                    { Keine DXF-Dateien zugewiesen }
  521.   DXFFile2 := '';
  522.   DXFFile3 := '';
  523.   DXFFile4 := '';
  524.  
  525.   LaunchResult := OpenMainApplication(HandleMsg,      { deLite starten }
  526.                                       0,
  527.                                       ProjektName);
  528.   MyID := GetMainID;
  529.   If LaunchResult = 0 then                      { erfolgreich gestartet }
  530.     begin
  531.       GetInitFileResult := GetInitFileName('PATHS','DXFDir',DXFDirectory);
  532.       InitDXF;                           { DXF-Interpreter initialisieren }
  533.       AktivWindow   := 15;               { Farbe des aktiven Fensters }
  534.       MyMenu := GetMenu;
  535.       StartWindow;                       { Begrüssung anzeigen }
  536.       VierFenster;
  537.       while StillRunning Do
  538.         begin
  539.           GetEvent(MyEvent);             { Botschaften holen und weiterleiten }
  540.           DispatchMessage(MyEvent);
  541.         end;
  542.       CloseMainApplication;              { deLite schliessen }
  543.       Writeln('Programm beendet.');
  544.     end
  545.   Else
  546.     begin
  547.       Writeln('Programm kann nicht gestartet werden. Fehler: ',LaunchResult);
  548.       Writeln(ErrorName(LaunchResult));
  549.     end;
  550. End.