home *** CD-ROM | disk | FTP | other *** search
- UNIT API;
-
- (*****************************************************************************
- Name: API.PAS
- Version: 2.10
- Edit Datum: 1.4.1992
- Autor: Andreas Schumm
- Kurzbeschreibung: deLite-API
- *****************************************************************************)
-
- INTERFACE
-
- USES RSC, Kernel, CRT, DOS, VMEM;
-
- CONST MaxClients = 8; { Anzahl der Klienten }
-
- API_ID = 0; { Timer wird mit API_ID beantragt }
- API_RPT = 1;
-
- MenueBarMode = 1; { mode eines MenueBarEntry }
- MenueItemMode = 0; { mode eines MenueItem }
- SeparatorMode = 2; { mode eines Separators }
-
- MF_CHECKED = 128; { mit Überprüfungsmarke versehen }
- MF_UNCHECKED = 0; { ohne ... }
- MF_GRAYED = 32; { dashed gezeichnet und nicht aktiv }
- MF_ENABLED = 0; { aktiv }
- MF_DISABLED = 64; { inaktiv, aber nicht unbedingt dashed }
- MF_BYPOSITION = 4; { Die ID ist als Position zu interpretieren }
- MF_BYCOMMAND = 0; { Die ID ist die ID }
- MF_APPEND = 256; { Neues Item wird angehängt }
- MF_REPLACE = 512; { ersetze altes durch neues Item }
-
- APP_FONT = 0; { Mit Vektorfont }
- APP_NOFONT = 1; { kein Vektorfont }
- APP_NOMOVEEVENT = 2; { Mausbewegungen nicht senden }
- APP_NOFRAME = 4; { kein Rahmen um Subapplikationen }
- APP_FRAME = 0; { mit Rahmen }
- APP_NOHELP = 8; { kein F1=Hilfe }
- APP_SCROLLER = 16; { Scrollbars für Hauptapplikation }
-
- WND_DEFCOLOR = 1; { Default-Farbe }
- WND_SAVE = 2; { Hintergrund retten }
- WND_DEFAULT = 3; { normal }
-
- evMouseMove = $01; { mouse moved }
- evMouseLBDn = $02; { left button pressed }
- evMouseLBUp = $04; { left button released }
- evMouseRBDn = $08; { right button pressed }
- evMouseRBUp = $10; { right button released }
- evMouseMBDn = $20; { mid button pressed }
- evMouseMBUp = $40; { mid button released }
-
- evKeyPress = $80; { key pressed }
-
- sfFocused = $01; { Item ist fokussiert }
- sfMarked = $02; { Item ist markiert (Maustaste gedrückt) }
-
- sfNoFocus = $04; { Item kann nicht fokussiert werden }
- sfDefault = $08; { Item sendet DLG_OK bei Betätigung }
- sfCancel = $10; { Item sendet DLG_CANCEL bei Betätigung }
- sfPhoenix = $20; { Phoenix }
- sfGroup = $40; { ich bin eine Gruppe }
- sfBlind = $80; { mir keine Events zuschicken, bin blind }
- sfChecked = $100; { bin gechecked }
- sfRepeat = $200; { MouseKeyPressed wiederholen }
- sfDisabled = $400; { Item ist vorübergehend passiv }
- sfIdleAbort = $800; { wurde von IDLEFUNC abgebrochen }
- sfGrpFocus = $1000; { Gruppe nur einmal fokussieren }
- sfInvisible = $2000; { Item ist unsichtbar }
-
- TTY_SCROLLER = $01; { TTYScreen mit Scroller }
- TTY_WORDWRAP = $02; { automatischer Wordwrap }
-
- DLG_CHECKED = 1; { Checkbox-Nachrichten }
- DLG_UNCHECKED = 2;
- DLG_BUTTON = 3; { Button gedrückt }
- DLG_SLIDERMOVED = 4; { Slider losgelassen }
- DLG_SLIDERRLSD = 5; { Slider bewegt }
- DLG_EDITCHGD = 6; { Textfeld verändert }
- DLG_RADIO = 7; { Radio-Button gewechselt }
- DLG_LISTSELECT = 8; { Auswahl aus ListBox getroffen }
- DLG_BOXSELECT = 9; { Auswahl aus SelectBox getroffen }
- DLG_BOXCHANGE = 10; { Selectbox verändert }
- DLG_FILEREQ = 11; { Filerequester hat ausgewählt }
- DLG_KEYPRESSED = 12; { Taste im Editierfeld betätigt }
- DLG_LISTMOVED = 13; { Markierung in ListBox verändert }
- DLG_COMBOSELECT = 14; { Auswahl aus Combobox getroffen }
- DLG_ELEVATORRLSD = 15; { Elevator losgelassen }
- DLG_ELEVATORCHGD = 16; { Elevator verschoben }
-
- DLG_SYSMSGS = 1000;
- DLG_GIVEFOCUS = 1000; { DlgItem will Fokus }
- DLG_GOTFOCUS = 1001; { DlgItem ist fokussiert worden }
- DLG_LOSTFOCUS = 1002; { DlgItem hat Fokus verloren }
- DLG_NONEXCLUSIVE = 1003; { DlgItem ist nicht mehr exclusiv }
-
- DLG_DESTROYED = 1003; { Dialog ist zerstört worden }
- DLG_BYE = 1004; { Aufforderung zum Schließen }
-
- LIST_DN = 30000; { Listbox-Knöpfe gedrückt }
- LIST_UP = 30001;
-
- SELECT_DN = 30002; { Selectbox Items }
- SELECT_UP = 30003;
- SELECT_EDIT = 30004;
-
- TTY_SCROLLUP = 30005; { TTY-Viewer Items }
- TTY_SCROLLDN = 30006;
-
- COMBO_EDIT = 30008; { ComboBox Items }
- COMBO_BUTTON = 30009;
- COMBO_LIST = 30010;
-
- ELEVATOR_LIST = 30011; { Elevator für Listbox }
- ELEVATOR_TTY = 30012; { Elevator für TTYWindow }
- MAIN_VSCROLLER = 30013; { vertikaler Elevator }
- MAIN_HSCROLLER = 30014; { horizontaler Elevator }
-
- DLG_OK = 998; { Default-Button oder CR }
- DLG_CANCEL = 999; { Dialog mit ESC abgebrochen }
-
- MF_CAPTION = $01; { Mit Titelzeile zum Anfassen }
- MF_NOCAPTION = $00; { ohne Titelzeile }
- MF_MOVEABLE = $03; { verschiebbar nur mit CAPTION }
- MF_CANCELLED = $10; { Dialog wurde gecancelled }
- MF_POPPEDUP = $20; { Dialog ist bereits gezeichnet }
- MF_NONMODAL = $40; { nichtmodal, zerstört Screen }
-
- MemLimit = 4096;
-
- TYPE MenueID = INTEGER;
- MenueFlags = BYTE;
-
- allocmode = (remaining, absolut);
-
- MenueItemString = STRING[23];
- MenueBarString = STRING[19];
-
- MenueItemPtr = ^ MenueItem;
- MenueBarPtr = ^ MenueBarEntry;
- hMenu = MenueBarPtr; { Handle auf ein Menue }
-
- MenueItem = RECORD
- mode : MenueFlags;
- hotkey : CHAR;
- ID : MenueID;
- name : MenueItemString;
- Next : MenueItemPtr;
- END;
-
- MenueBarEntry = RECORD
- mode : MenueFlags;
- hotkey : CHAR;
- ID : MenueID;
- name : MenueBarString;
- Next : MenueBarPtr;
- Menu : MenueItemPtr;
- END;
-
-
- EventReceiveProc = PROCEDURE(MyMessage: EventTyp);
- IdleFuncType = FUNCTION: BOOLEAN;
-
- { *********************************************************
- Objekte des Dialogmanagers
- ********************************************************* }
-
- TYPE DPoint = object
- X, Y : Integer;
- procedure Move(dx,dy: Integer);
- End;
-
- DRect = object
- P1, P2 : DPoint;
- procedure Assign(x1,y1,x2,y2: Integer);
- procedure Move(dx,dy : Integer);
- End;
-
- LabelStr = String[64];
- PGroup = ^DlgGroup;
- DirType = (hor, ver);
-
- PDlg = ^Dialog;
- PDialog = ^Dialog;
- PDlgItem = ^DlgItem;
-
- DlgItem = object
- Origin : DPoint; { Ursprung }
- Area : DRect; { Event-aktive Fläche }
- Status : Word;
- ID : Integer;
- Next : PDlgItem;
- parent : PDlgItem; { ggf. die dazugehörige Gruppe }
- master : PDialog;
- owner : EventReceiveProc;
- constructor Init(x1,y1, TheID: Integer);
- destructor Done; virtual;
- function GetSuccessor: PDlgItem; virtual;
- function GetNextFocus: PDlgItem; virtual;
- procedure SetFocus;
- procedure ClearFocus; virtual;
- procedure SetMark;
- procedure ClearMark;
- procedure EnableItem;
- procedure DisableItem;
- procedure ClearPhoenix;
- procedure SetPhoenix;
- procedure Check; virtual;
- procedure Uncheck; virtual;
- procedure SetRepeat;
- function IsChecked:boolean;
- procedure Draw; virtual;
- procedure HandleEvent(TheEvent: EventTyp); virtual;
- procedure SendMessage(TheMsg: Integer);
- Function IsInRect(TheEvent: EventTyp): boolean;
- procedure MakeDefaultItem;
- procedure MakeCancelItem;
- procedure GimmeFocus;
- procedure ShowItem; virtual; { macht unsichtbares Item sichtbar }
- procedure HideItem; virtual; { macht sichtbares Item unsichtbar }
- private
- OldStatus : word; { temporärer Status für Hide & Show }
- End;
-
- DlgGroup = Object(DlgItem)
- ItemGroup : PDlgItem; { Die Kette der Dialogelemente }
- constructor Init(x1,y1,TheID: Integer);
- destructor Done; virtual;
- procedure AddItem(TheItem: PDlgItem);
- function GetSuccessor: PDlgItem; virtual;
- function GetNextFocus: PDlgItem; virtual;
- procedure Draw; virtual;
- function FindGroupItem(TheID: integer):Pointer;
- procedure GlueGroup; { Items leimen }
- procedure ShowItem; virtual;
- procedure HideItem; virtual;
- End;
-
- CheckBox = object(DlgItem)
- TheLabel : LabelStr;
- constructor Init(x1,y1, TheID: Integer; TheText: LabelStr);
- procedure Draw; virtual;
- procedure HandleEvent(TheEvent: EventTyp); virtual;
- procedure Check; virtual;
- procedure Uncheck; virtual;
- End;
-
- PCheckbox = ^Checkbox;
-
- UserCheckBox = object(CheckBox)
- constructor Init(x1,y1,dx,dy,xb,yb,TheID: Integer; TheHK: char; TheIcon: Pointer);
- procedure Draw; virtual;
- private
- dxb, dyb : Integer;
- hk : char;
- IconPtr : Pointer;
- End;
-
- PUserCheckBox = ^UserCheckBox;
-
- Button = object(DlgItem)
- TheLabel : LabelStr;
- constructor Init(x1,y1,dx,dy,TheID: Integer; TheText: LabelStr);
- procedure Draw; virtual;
- procedure HandleEvent(TheEvent: EventTyp);virtual;
- end;
-
- PButton = ^Button;
-
- UserButton = object(DlgItem)
- dxb,dyb : integer; { Ausdehnung der Ikone }
- hk : char; { Der Hotkey }
- IconPtr : Pointer;
- constructor Init(x1,y1,dx,dy,xb,yb, TheID: Integer; TheHK: char; TheIcon: Pointer);
- procedure Draw; virtual;
- procedure HandleEvent(TheEvent: EventTyp); virtual;
- end;
-
- PUserButton = ^UserButton;
-
- PLabelFrame = ^LabelFrame;
-
- LabelFrame = object(DlgItem)
- TheLabel : LabelStr;
- constructor Init(x1,y1,dx,dy, TheID: integer; TheText: LabelStr);
- procedure Draw; virtual;
- End;
-
-
- PLabelText = ^LabelText;
-
- LabelText = object(DlgItem)
- TheLabel : LabelStr;
- constructor Init(x1,y1, TheId: Integer; TheText: LabelStr);
- procedure Draw; virtual;
- procedure SetLabel(TheText: LabelStr);
- End;
-
- VElevator = object(DlgItem)
- constructor Init(x,y, height, rows, max, TheID: integer);
- procedure SetLevel(TheLevel: integer);
- function GetLevel: integer;
- procedure SetMax(max : integer);
- procedure SetWindow(n: integer);
- procedure Draw; virtual;
- procedure HandleEvent(TheEvent: EventTyp); virtual;
- private
- level : longint; { aktuelle Position }
- size : longint; { Größe in Pixeln }
- entries : longint; { Anzahl Elemente insgesamt }
- scrlen : longint; { Länge des Knopfes }
- NRows : longint; { Anzahl sichtbare Elemente }
- prevlevel : longint; { vorherige Position }
- locked : integer; { Zustand während Bewegung }
- tempix : integer; { Pixelposition während Bew. }
- End;
-
- HElevator = object(VELevator)
- constructor Init(x,y, length, cols, max, TheID: integer);
- procedure Draw; virtual;
- procedure HandleEvent(TheEvent: EventTyp); virtual;
- end;
-
- PVelevator = ^VElevator;
- PHelevator = ^HElevator;
-
-
- ListString = String[63];
-
- PTextListItem = ^TextListItem;
-
- TextListItem = object { Das Grundelement der Liste }
- next : PTextListItem;
- prev : PTextListItem;
- contents : ListString;
- end;
-
- GetListProc = procedure(var item: ListString; var eol: boolean);
-
- ListBox = object(DlgGroup)
- Itemwidth : Integer; { sichtbare Breite }
- Listlength: Integer; { Anzahl der Zeilen }
- constructor Init(x,y,wid,len,TheID: Integer; GetFirst, GetNext: GetListProc);
- destructor Done; virtual;
- procedure Draw; virtual;
- procedure HandleEvent(TheEvent: EventTyp); virtual;
- procedure Update;
- function GetSelected: Liststring;
- function GetMarked : ListString;
- procedure Select(TheString: ListString);
- procedure HideItem; virtual;
- private
- ListPtr : Integer; { markierte Zeile }
- ItemCount : Integer; { Anzahl Elemente }
- CurrCount : Integer; { aktuelles Element }
- selected : ListString;
- GetFirstProc : GetListProc;
- GetnextProc : GetListProc;
- TheElevator : PVElevator;
- TheList : PTextListItem; { Beginn der Liste }
- Current : PTextListItem; { markiertes Element }
- Top : PTextListItem; { erstes sichtbares Element }
- procedure ReadList; { Liste einlesen }
- procedure RemoveList; { Liste entfernen }
- End;
-
- PListBox = ^ListBox;
-
- Dialog = object
- Origin : DPoint;
- Size : DPoint;
- Caption : LabelStr;
- topic : LabelStr;
- Flags : Word;
- rdy : boolean;
- marked : boolean;
- Focus : PDlgItem;
- FirstItem : PDlgItem;
- Exclusive : PDlgItem;
- Port : ViewPortType;
- DlgOwner : EventReceiveProc;
- BackGnd : Byte;
- constructor Init(dx,dy : Integer; Flag: Word; TheProc: EventReceiveProc);
- destructor Done;
- procedure Move(x,y : Integer); { Ursprung ändern }
- procedure SetCaption(Capt: LabelStr);
- procedure SetTopic(top: LabelStr);
- procedure Show;
- procedure AddItem(TheItem: PDlgItem);
- procedure DestroyDialog;
- procedure DoDialog;
- procedure HandleEvent(MyEvent: EventTyp);
- function FindDlgItem(ID: integer):Pointer;
- function WasNotCancelled: boolean;
- procedure SetTheFocus(ID: integer);
- procedure GetEvent(Var MyEvent: EventTyp);
- procedure SetIdleFunc(Idle: IdleFuncType);
- procedure ReceiveExclusive(TheClient: integer);
- procedure ContinueToDispatch;
- procedure SetDlgColor(color: byte);
- private
- IdleFunc : IdleFuncType;
- OldMode : byte;
- PrevRoot : PDlgItem; { altes FirstItem }
- PrevNext : PDlgItem; { altes Exclusive^.next }
- OldPort : ViewPortType;
- End;
-
- YesNoDialog = RECORD
- TEXT : String;
- xorg : INTEGER; { Abs. linke obere Eckt }
- yorg : INTEGER;
- topic : namestring; { Topic für Online-Hilfe }
- END;
-
-
- Procedure DefEventProc(TheEvent: EventTyp);
-
- FUNCTION DoYesNoDialog(rsc: YesNoDialog):BOOLEAN;
- PROCEDURE ErrWindow(x,y: INTEGER; errtext: STRING);
- FUNCTION YNDialog(YesText: ListString;
- NoText : ListString;
- LabelT : ListString):boolean;
-
- function LBReleased(Event: EventTyp):boolean;
- function LBPressed(Event: EventTyp):boolean;
-
-
- { *********************************************************
- allgemeine API-Funktionen, Menüsteuerung
- ********************************************************* }
-
-
-
- FUNCTION GetMenu:HMenu; { liefert Menüzeiger }
-
- PROCEDURE CheckMenuItem(Menu: hmenu; { setzt Häkchen }
- ID: MenueID;
- wCheck : MenueFlags);
-
- PROCEDURE EnableMenuItem(Menu: hmenu; { aktiviert Menü }
- ID: MenueID;
- WEnable: MenueFlags);
-
- FUNCTION GetMenuFlags(Menu: hMenu; { liefert Modus }
- ID : MenueID):MenueFlags;
-
- PROCEDURE GetMenuString(Menu: hmenu; { liefert Eintrag }
- ID: MenueID;
- VAR StrPtr: STRING);
-
- FUNCTION GetSubMenu(Menu: hmenu; { ID des menüs }
- nPos: MenueID):MenueID;
-
- PROCEDURE ChangeMenu(Menu : hmenu; { Menü verändern }
- ID : MenueID;
- ItemID : MenueID;
- NewItem : STRING;
- IDNewItem: MenueID;
- wChanged : MenueFlags);
-
- PROCEDURE ReplaceMenuItem(Menu :hMenu; { Eintrag ersetzen }
- ID :MenueID;
- NewItem : STRING;
- IDNewItem:MenueID;
- NewHotKey:CHAR);
-
- { *********************************************************
- low-level Fensterverwaltung
- ********************************************************* }
-
- PROCEDURE OpenWindow(x1,y1,x2,y2 : INTEGER); { Fensterprozeduren }
- PROCEDURE CloseWindow;
- PROCEDURE ClearWindow;
- PROCEDURE WriteWin(Str: STRING; x,y: INTEGER; Color : BYTE);
-
- PROCEDURE SysWindow(x,y: INTEGER; errtext: STRING); { Spezialfenster }
-
- PROCEDURE DebugWindow(x,y: INTEGER; errtext: STRING);
-
- PROCEDURE OnLineHelp(topic: STRING); { interaktive Hilfe }
-
- FUNCTION InitHelp(FileName: NameString) : BOOLEAN;
- FUNCTION GetFirstHelp(Topic: STRING):BOOLEAN;
- PROCEDURE GetNextHelp(VAR HelpText: HelpString; VAR eol: BOOLEAN);
-
- { *********************************************************
- Klienten- und Applikationsverwaltung
- ********************************************************* }
-
-
- FUNCTION OpenMainApplication(EventHandler: EventReceiveProc;
- modus : INTEGER;
- Name : NameString):INTEGER;
-
- PROCEDURE CloseMainApplication;
-
- FUNCTION GetMainID: INTEGER; { liefert ID der Hauptapplikation }
- PROCEDURE NormalizeEvent(ID: INTEGER; VAR TheEvent: EventTyp);
- PROCEDURE ForceNormalizeEvent(ID: INTEGER; VAR TheEvent: EventTyp);
- PROCEDURE DispatchMessage(TheMessage: EventTyp);
- PROCEDURE PostMessage(TheMessage: EventTyp; TheID: INTEGER);
- PROCEDURE GetTheViewPort(ID: INTEGER; VAR ViewPort: ViewPortType);
- PROCEDURE SetTheViewPort(ID: INTEGER);
- FUNCTION OpenSubApplication( EventHandler: EventReceiveProc;
- Filter : INTEGER;
- Name : NameString;
- x1,y1,x2,y2 : INTEGER):INTEGER;
- PROCEDURE CloseSubApplication(ID: INTEGER);
- PROCEDURE FrameSubApplication(ID, color: INTEGER);
- PROCEDURE SuspendApplication(ID: INTEGER);
- PROCEDURE ActivateApplication(ID: INTEGER);
-
- PROCEDURE ContinueToDispatch;
- PROCEDURE ReceiveExclusive(Receiver: INTEGER);
-
- PROCEDURE OutTextMenu(x,y : INTEGER; InString : STRING; Color : BYTE);
-
- PROCEDURE TheHelp;
-
- PROCEDURE NewOpenWindow(x1,y1,x2,y2: INTEGER;
- wFlags: word; col: byte);
-
- VAR VScroller : PVElevator;
- HScroller : PHElevator; { Scroller der Hauptapplikation }
- VScrollBar,
- HScrollBar : PDialog;
- Scr1ID, Scr2ID : INTEGER; { die IDs der Scroller }
-
- IMPLEMENTATION
-
- END.