home *** CD-ROM | disk | FTP | other *** search
- PROGRAM DXFView;
-
- {$N+,E+ } { 8087, Emulation }
-
- { Dieses Beispielprogramm erlaubt die Betrachtung von bis zu vier DXF-
- Grafiken in Fenstern und illustriert die Anwendung des deLite-Toolkits }
-
-
- USES Kernel, Api, Dialogs, AcadDXF, firework, errors;
-
- CONST ProjektName = 'DXFVIEW'; { so heissen alle Dateien }
- DXFSuffix = '.DXF';
- IDFenster1 = 201; { Die IDs der Botschaften }
- IDFenster2 = 202;
- IDFenster3 = 203;
- IDFenster4 = 204;
- IDAlleFenster= 205;
- IDZoom = 206;
-
- OK_BUTTON = 97;
- CAN_BUTTON = 98;
- REQUESTER = 99;
-
- TYPE Darstellung = (Einzel, Alle); { Bildschirmdarstellung }
- IcoArray = Record
- DeltaX : Integer;
- DeltaY : Integer;
- IcoArr : Array[0..199] of Byte;
- End;
-
-
- CONST Tub40 : IcoArray = (DeltaX : 39; DeltaY : 39; { Das TuB Logo }
- IcoArr : (
- $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
- $1f,$ff,$ff,$e0,$00,$3f,$ff,$ff,$f1,$ff,$7f,$ff,$ff,$f9,$f9,$7f,$ff,$ff,$f9,$f7,
- $7f,$ff,$ff,$f9,$f1,$3f,$ff,$ff,$f9,$ff,$1f,$ff,$ff,$f9,$d1,$00,$00,$0f,$f9,$ff,
- $00,$7f,$8f,$f3,$82,$00,$7f,$8f,$f3,$fe,$00,$7f,$8f,$f3,$ee,$00,$7f,$8f,$f3,$e2,
- $00,$7f,$8f,$f3,$fe,$00,$7f,$8f,$f3,$ce,$00,$7f,$8f,$f3,$d6,$00,$ff,$9f,$f3,$c6,
- $00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$e4,$00,$ff,$1f,$e7,$d4,$00,$ff,$1f,$e7,$04,
- $00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$fc,$01,$ff,$1f,$e7,$fc,
- $01,$fe,$3f,$e7,$fc,$01,$fe,$3f,$cf,$fc,$01,$fe,$3f,$cf,$f8,$01,$fe,$3f,$cf,$f8,
- $01,$fe,$3f,$cf,$f8,$01,$fe,$3f,$cf,$f0,$01,$fe,$1f,$cf,$f0,$01,$fe,$0f,$cf,$e0,
- $00,$00,$07,$cf,$c0,$00,$00,$03,$cf,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00));
-
-
- VAR LaunchResult : integer;
- MyEvent : EventTyp; { eine Botschaft }
- StillRunning : boolean;
- MyID : integer;
- MyMenu : hMenu; { Handle auf das Menü }
- Modus : Darstellung;
-
- AktivWindow : integer; { Rahmenfarbe akt. Fenster }
-
- ID1,ID2 : integer; { Die IDs der Fenster }
- ID3,ID4 : integer;
- AktivID : integer; { ID des aktiven Fensters }
-
- DXFFile1 : String; { Die DXF-Files der Fenster }
- DXFFile2 : String;
- DXFFile3 : String;
- DXFFile4 : String;
-
- DXFDirectory : String;
-
- GetInitFileResult : Boolean; { Ergebnis Platzhalter für die Funktionen
- des Init Files }
-
-
- procedure StartWindow;
- Var MyDialog: Dialog;
- MyUserButton: PUserButton;
- MyLabel : ^LabelText;
- begin
- MyDialog.Init(60*FontX, 6*FontY, 0, DefEventProc);
-
- new(MyUserButton, Init(20,10,85,70,39,39,98,'T',@Tub40.IcoArr));
- Mydialog.AddItem(MyUserButton);
- MyUserButton^.MakeDefaultItem;
-
- new(MyLabel, Init(19*FontX, FontY, 10,'BrainLab DXFview Version 2.1 1/92'));
- MyDialog.AddItem(MyLabel);
-
- new(MyLabel, Init(21*FontX, 3*FontY, 11, 'Andreas Schumm & Frank Seidinger'));
- Mydialog.AddItem(MyLabel);
-
- MyDialog.Show;
- MyDialog.DoDialog;
- MyDialog.Done;
- end;
-
-
- procedure Information; { wir stellen uns noch einmal vor }
- Var ScrX,ScrY : Integer;
- WindowX : Integer;
- WindowY : Integer;
- begin
- HideMouse;
- ScrX := Succ(GetMaxX) div 2;
- ScrY := Succ(GetMaxY) div 4;
- WindowX := (74 * FontX) div 2;
- WindowY := (13 * FontY);
- OpenWindow(ScrX-WindowX,ScrY,ScrX+WindowX,ScrY+WindowY );
- WriteWin('BrainLab DXFView Version 2.1 1/92',35,1,DialogText);
- WriteWin('Andreas Schumm & Frank Seidinger',37,3,DialogStat);
- WriteWin('erstellt mit deLite für Turbo-Pascal',35,8,DialogText);
- OpenWindow(ScrX-WindowX+5,ScrY+FontY div 2,
- ScrX-WindowX+33*FontX,ScrY+12*FontY+FontY div 2);
- Bar(0,0,PortMaxX,PortMaxY,0);
- Fireworks(6,200,PortMaxX,PortMaxY,15);
- CloseWindow;
- CloseWindow;
- ShowMouse;
- end;
-
- { ***** Der File Requester ***** }
-
- procedure SelectProc(TheEvent: EventTyp); far;
- var MYDLG : PDLG;
- thefile : string;
- MyReq : PFileRequester;
- TestFile : File;
- begin
- MYDLG := TheEvent.DlgAdr;
- if TheEvent.Class = DialogEvent then
- Case TheEvent.MSG of
- DLG_OK : Begin
- MyReq := MYDLG^.FindDlgItem(REQUESTER);
- thefile := MyReq^.GetPath;
- if thefile[length(thefile)] <> '\' then
- thefile := thefile + '\';
- thefile := thefile + MyReq^.GetSelected;
- Assign(TestFile,TheFile);
- {$I- } Reset(TestFile); {$I+ }
- If (IOResult = 0) Then
- Begin
- Close(TestFile);
- MyDLG^.DestroyDialog;
- End;
- End;
- DLG_CANCEL : Begin
- MYDLG^.DestroyDialog;
- MYDLG^.flags := MYDLG^.flags or MF_CANCELLED;
- End;
- end;
- end;
-
- Function SelectFile(Beschriftung, FilePath, FileMask : String) : String;
-
- Var MyDialog : Dialog;
- MyButton : PButton;
- MyFileRequester : PFileRequester;
- TheFile : String;
-
- begin
- MyDialog.Init(440,210, MF_CAPTION, SelectProc);
- MyDialog.SetCaption(Beschriftung);
-
- new(MyButton, init(440-80, 10, 70, 30, OK_BUTTON, 'OK'));
- MyDialog.Additem(MyButton);
- MyButton^.MakeDefaultItem;
-
- new(MyButton, init(440-80, 50, 70, 30, CAN_BUTTON, 'Abbruch'));
- MyDialog.Additem(MyButton);
- MyButton^.MakeCancelItem;
-
- new(MyFileRequester, init(20,20, 6, REQUESTER, FilePath, FileMask));
- MyDialog.AddItem(MyFileRequester);
-
- MyDialog.Show;
- MyDialog.DoDialog;
- If (MyDialog.Flags and MF_CANCELLED) = 0 Then
- Begin
- TheFile := MyFileRequester^.GetPath;
- if TheFile[length(TheFile)] <> '\' Then
- TheFile := TheFile + '\';
- TheFile := TheFile + MyFileRequester^.GetSelected;
- SelectFile := TheFile
- End
- Else SelectFile := '';
- MyDialog.Done;
- end;
-
-
- procedure DoQuit; { Programm ggf. beenden }
- Var YNRsc: YesNoDialog;
- begin
- YNRsc.text := 'Programm wirklich beenden ?';
- YNRsc.xorg := 60;
- YNRsc.yorg := 60;
- YNRsc.topic := 'Programm beenden';
- IF DoYesNoDialog(YNRsc) then StillRunning := false;
- end;
-
-
- { ******************************* }
- { Die Fenster-Empfangsprozeduren }
- { ******************************* }
-
-
- Procedure Fenster1(MyMessage: EventTyp); far;
- begin
- If ((MyMessage.Class = LeMouse) and (MyMessage.Attrib = LeftButtonPressed))
- or (MyMessage.Class = Menu) then
- begin
- CheckMenuItem(MyMenu,AktivID,MF_UNCHECKED);
- Case AktivID of { aktives Fenster umrahmen }
- IDFenster1: FrameSubApplication(ID1,7);
- IDFenster2: FrameSubApplication(ID2,7);
- IDFenster3: FrameSubApplication(ID3,7);
- IDFenster4: FrameSubApplication(ID4,7);
- end;
- AktivID := IDFenster1;
- FrameSubApplication(ID1,AktivWindow);
- CheckMenuItem(MyMenu,AktivID,MF_CHECKED);
- end;
- Case MyMessage.Class of
- DoRedraw : begin
- ClearWindow;
- if DXFFile1 <> '' then
- if InterpretDXF(DXFFile1) <> ok then
- ErrWindow(30,30,'DXF kann nicht interpretiert werden.');
- end;
- end;
- end;
-
-
- Procedure Fenster2(MyMessage: EventTyp); far;
- begin
- If ((MyMessage.Class = LeMouse) and (MyMessage.Attrib = LeftButtonPressed))
- or (MyMessage.Class = Menu) then
- begin
- CheckMenuItem(MyMenu,AktivID,MF_UNCHECKED);
- Case AktivID of { aktives Fenster umrahmen }
- IDFenster1: FrameSubApplication(ID1,7);
- IDFenster2: FrameSubApplication(ID2,7);
- IDFenster3: FrameSubApplication(ID3,7);
- IDFenster4: FrameSubApplication(ID4,7);
- end;
- AktivID := IDFenster2;
- FrameSubApplication(ID2,AktivWindow);
- CheckMenuItem(MyMenu,AktivID,MF_CHECKED);
- end;
- Case MyMessage.Class of
- DoRedraw : begin
- ClearWindow;
- if DXFFile2 <> '' then
- if InterpretDXF(DXFFile2) <> ok then
- ErrWindow(30,30,'DXF kann nicht interpretiert werden.');
- end;
- end;
- end;
-
-
- Procedure Fenster3(MyMessage: EventTyp); far;
- begin
- If ((MyMessage.Class = LeMouse) and (MyMessage.Attrib = LeftButtonPressed))
- or (MyMessage.Class = Menu) then
- begin
- CheckMenuItem(MyMenu,AktivID,MF_UNCHECKED);
- Case AktivID of { aktives Fenster umrahmen }
- IDFenster1: FrameSubApplication(ID1,7);
- IDFenster2: FrameSubApplication(ID2,7);
- IDFenster3: FrameSubApplication(ID3,7);
- IDFenster4: FrameSubApplication(ID4,7);
- end;
- AktivID := IDFenster3;
- FrameSubApplication(ID3,AktivWindow);
- CheckMenuItem(MyMenu,AktivID,MF_CHECKED);
- end;
- Case MyMessage.Class of
- DoRedraw : begin
- ClearWindow;
- if DXFFile3 <> '' then
- if InterpretDXF(DXFFile3) <> ok then
- ErrWindow(30,30,'DXF kann nicht interpretiert werden.');
- end;
- end;
- end;
-
-
- Procedure Fenster4(MyMessage: EventTyp); far;
- begin
- If ((MyMessage.Class = LeMouse) and (MyMessage.Attrib = LeftButtonPressed))
- or (MyMessage.Class = Menu) then
- begin
- CheckMenuItem(MyMenu,AktivID,MF_UNCHECKED);
- Case AktivID of { aktives Fenster umrahmen }
- IDFenster1: FrameSubApplication(ID1,7);
- IDFenster2: FrameSubApplication(ID2,7);
- IDFenster3: FrameSubApplication(ID3,7);
- IDFenster4: FrameSubApplication(ID4,7);
- end;
- AktivID := IDFenster4;
- FrameSubApplication(ID4,AktivWindow);
- CheckMenuItem(MyMenu,AktivID,MF_CHECKED);
- end;
- Case MyMessage.Class of
- DoRedraw : begin
- ClearWindow;
- if DXFFile4 <> '' then
- if InterpretDXF(DXFFile4) <> ok then
- ErrWindow(30,30,'DXF kann nicht interpretiert werden.');
- end;
- end;
- end;
-
-
- Procedure Vollbild; { Zeigt ein Fenster ganz gross ! }
- Var MSG : EventTyp;
- begin
- CloseSubApplication(ID1); { Die vier Fenster schliessen }
- CloseSubApplication(ID2);
- CloseSubApplication(ID3);
- CloseSubApplication(ID4);
- ActivateApplication(MyID); { und die Hauptapplikation reaktivieren }
- SetTheViewPort(MyID);
- ClearWindow; { Bildschirm löschen }
- Msg.Class := DoRedraw;
- Case AktivID of { dann ein Redraw }
- IDFenster1 : Fenster1(Msg);
- IDFenster2 : Fenster2(Msg);
- IDFenster3 : Fenster3(Msg);
- IDFenster4 : Fenster4(Msg);
- end;
- Modus := Einzel;
- end;
-
-
- Procedure VierFenster; { zeigt vier kleine Fenster ! }
- Var ThePort: ViewPortType;
- XSize : integer;
- YSize : integer;
- XOrg : integer;
- YOrg : integer;
- XEnd : integer;
- YEnd : integer;
- Msg : EventTyp;
- begin
- ClearWindow; { Fenster löschen }
- GetViewSettings(ThePort);
- With ThePort Do
- begin
- XSize := (x2-x1) div 2 - 2; { Ausdehnung in x-Richtung berechnen }
- YSize := (y2-y1) div 2 - 4; { dito in y-Richtung }
- XOrg := x1;
- YOrg := y1 + 3;
- XEND := x2;
- YEnd := y2;
- end;
-
- ID1 := OpenSubApplication(Fenster1,0,'Fenster 1',
- XOrg,YOrg,Xorg+XSize,YOrg+YSize);
-
- ID2 := OpenSubApplication(Fenster2,0,'Fenster 2',
- XEND-XSize,YOrg,XEND,YOrg+YSize);
-
- ID3 := OpenSubApplication(Fenster3,0,'Fenster 3',
- XOrg,YEnd-YSize,Xorg+XSize,YEnd);
-
- ID4 := OpenSubApplication(Fenster4,0,'Fenster 4',
- XEnd-XSize,YEnd-YSize,XEnd,YEnd);
-
- SuspendApplication(MyID); { Hauptfenster deaktivieren }
-
- Case AktivID of { aktives Fenster umrahmen }
- IDFenster1: FrameSubApplication(ID1,AktivWindow);
- IDFenster2: FrameSubApplication(ID2,AktivWindow);
- IDFenster3: FrameSubApplication(ID3,AktivWindow);
- IDFenster4: FrameSubApplication(ID4,AktivWindow);
- end;
-
- MSG.Class := DoRedraw;
-
- PostMessage(MSG, ID1); { alle Fenster neu zeichnen }
- PostMessage(MSG, ID2);
- PostMessage(MSG, ID3);
- PostMessage(MSG, ID4);
-
- Modus := Alle;
- end;
-
-
- procedure NewWindow;
- Var MyMsg : EventTyp;
- begin
- MyMsg.Class := DoRedraw;
- Case AktivID of
- IDFenster1 : begin
- DXFFile1 := '';
- SetTheViewPort(ID1);
- Fenster1(MyMsg);
- end;
- IDFenster2 : begin
- DXFFile2 := '';
- SetTheViewPort(ID2);
- Fenster2(MyMsg);
- end;
- IDFenster3 : begin
- DXFFile3 := '';
- SetTheViewPort(ID3);
- Fenster3(MyMsg);
- end;
- IDFenster4 : begin
- DXFFile4 := '';
- SetTheViewPort(ID4);
- Fenster4(MyMsg);
- end;
- end; { Case }
- end;
-
-
- procedure LoadDXF;
- var MyMsg : EventTyp;
- LFName: string;
- begin
- LFName := SelectFile('DXF-Datei laden', DXFDirectory + '\', '*.DXF');
- if LFName <> '' then
- begin
- MyMsg.Class := DoRedraw;
- Case AktivID of
- IDFenster1 : begin
- DXFFile1 := LFname;
- SetTheViewPort(ID1);
- Fenster1(MyMsg);
- end;
- IDFenster2 : begin
- DXFFile2 := LFname;
- SetTheViewPort(ID2);
- Fenster2(MyMsg);
- end;
- IDFenster3 : begin
- DXFFile3 := LFname;
- SetTheViewPort(ID3);
- Fenster3(MyMsg);
- end;
- IDFenster4 : begin
- DXFFile4 := LFname;
- SetTheViewPort(ID4);
- Fenster4(MyMsg);
- end;
- end; { Case }
- end;
- end;
-
-
- Procedure HandleMsg(MyMessage: EventTyp); far;
- { Die Hauptempfangsprozedur behandelt die Menü-Botschaften }
- Begin
- With MyMessage Do
- Case Class Of
- Menu : begin
- Case MenuItemID of
- 0 : DoQuit;
-
- 101 : LoadDXF;
- 102 : NewWindow;
-
- 205 : begin
- ReplaceMenuItem(MyMenu,
- 205,
- '&Alle Fenster',
- 206,'A');
- Vollbild;
- end;
-
- 206 : begin
- ReplaceMenuItem(MyMenu,
- 206,
- '&Zoom',
- 205,'Z');
- VierFenster;
- end;
-
- IDFenster1: begin
- Fenster1(MyMessage);
- MyMessage.Class := DoRedraw;
- If Modus = Einzel then
- Fenster1(MyMessage);
- end;
-
- IDFenster2: begin
- Fenster2(MyMessage);
- MyMessage.Class := DoRedraw;
- If Modus = Einzel then
- Fenster2(MyMessage);
- end;
-
- IDFenster3: begin
- Fenster3(MyMessage);
- MyMessage.Class := DoRedraw;
- If Modus = Einzel then
- Fenster3(MyMessage);
- end;
-
- IDFenster4: begin
- Fenster4(MyMessage);
- MyMessage.Class := DoRedraw;
- If Modus = Einzel then
- Fenster4(MyMessage);
- end;
-
- 399 : Information;
-
- end;
- end;
- end;
- End;
-
-
- {$F- }
-
-
- Begin
- DebugOn;
- StillRunning := true;
- Modus := Alle; { 4 Fenster sichtbar }
- AktivID := IDFenster1; { Fenster 1 ist aktiv }
-
- DXFFile1 := ''; { Keine DXF-Dateien zugewiesen }
- DXFFile2 := '';
- DXFFile3 := '';
- DXFFile4 := '';
-
- LaunchResult := OpenMainApplication(HandleMsg, { deLite starten }
- 0,
- ProjektName);
- MyID := GetMainID;
- If LaunchResult = 0 then { erfolgreich gestartet }
- begin
- GetInitFileResult := GetInitFileName('PATHS','DXFDir',DXFDirectory);
- InitDXF; { DXF-Interpreter initialisieren }
- AktivWindow := 15; { Farbe des aktiven Fensters }
- MyMenu := GetMenu;
- StartWindow; { Begrüssung anzeigen }
- VierFenster;
- while StillRunning Do
- begin
- GetEvent(MyEvent); { Botschaften holen und weiterleiten }
- DispatchMessage(MyEvent);
- end;
- CloseMainApplication; { deLite schliessen }
- Writeln('Programm beendet.');
- end
- Else
- begin
- Writeln('Programm kann nicht gestartet werden. Fehler: ',LaunchResult);
- Writeln(ErrorName(LaunchResult));
- end;
- End.