home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* DBXITEMS.PAS *)
- (* *)
- (* ■ RadioBut: Active wird durch Chr(7) gekennzeichnet, *)
- (* da immer Element einer Gruppe, gibt es nur Unter- *)
- (* schied aktiv-passiv. *)
- (* ■ PushBut: Immer alleine; sein Zustand (On/Off) lässt *)
- (* mit Space umschalten, gekennzeichnet durch "X". *)
- (* ■ EndBut: Hat einen Direktwahlcode zusätzlich (z.B. *)
- (* Enter für "Ok"-Endbutton. Bei seiner Wahl liefert er*)
- (* den ReturnCode "ItFinish". *)
- (* ■ StringField: Besteht aus zwei Feldern: Namensfeld *)
- (* (von SAAItem) und dem Eingabefeld, in dem der String*)
- (* bearbeitet wird, dieses ist scrollbar etc. *)
- (* ■ Integer/RealField: Ändern "StringField" dahingehend,*)
- (* dass nur Zahlen eingegeben werden können und dass *)
- (* der String am Ende umgewandelt wird. *)
- (* ■ PickList: Lässt Benutzer in einem einfachen Fenster *)
- (* ein Element auswählen, hat vertikalen Scrollbalken. *)
- (* ■ ExtPickList: Zusätzlich einen horizontalen Scroll- *)
- (* balken; also brauchen, wenn Länge der Einträge nicht*)
- (* (wie z.B. bei FileList) von vornherein bestimmt ist.*)
- (* ■ StandAlonePickList: Fenster vom Typ "SAAWindow", das*)
- (* von "ActiveStandWin" erbt, dh, bewegen und *)
- (* schliessen mit Maus möglich (ReturnCode=ItFinish, *)
- (* keine Wahl stattgefunden). *)
- (* *)
- (* (c) 1991 by R.Reichert & toolbox *)
- (* ----------------------------------------------------- *)
- UNIT DBxItems;
-
- INTERFACE
-
- USES Stuff, UBase, UMouse, MouKey, Lists,
- WinVSM, SB,
- FrameWin, ActStWi, SAAWin, SAAItemD;
-
- CONST { ReturnCodes: }
- ItOk = 0; { Alles in Ordnung }
- ItEvNotMine = 1; { Event passt mir nicht }
- ItEvAccepted = 2; { Event angenommen, => weitermachen}
- ItFinish = 3; { beenden, Abbruch }
- ItSelected = 4; { wurde gewählt }
- { hier nochmal, damit deswegen
- nicht immer SAAItemD zusätzlich
- geladen werden muss. }
-
- ItActPrev = 10; { aktiviere nächsten Item }
- ItActNext = 11; { aktiviere vorhergehenden Item }
- ResultInvalid = 12; { ungültiges Ergebnis (Integer/
- RealField }
- ActiveBarColor : BYTE = 7; { Aktiver Picklist-Eintrag }
- EndButActColor : BYTE = $7F; { Aktive Endbutton-Farbe }
-
- TYPE
- RadioButPtr = ^RadioBut;
- RadioBut =OBJECT (SAAItem)
-
- CONSTRUCTOR Init (nx, ny : BYTE;
- N : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- PROCEDURE Display; VIRTUAL;
- PROCEDURE SetActive; VIRTUAL;
- PROCEDURE SetPassive; VIRTUAL;
- PROCEDURE CheckEvent (VAR Ev : EventObj); VIRTUAL;
- END;
-
- PushButPtr = ^PushBut;
- PushBut =OBJECT (SAAItem)
-
- SaveFl, On : BOOLEAN;
-
- CONSTRUCTOR Init (nx, ny : BYTE;
- N : STRING;
- AltHKC : WORD;
- NOn : BOOLEAN;
- NewVSM : WExtVSMPtr);
- PROCEDURE Display; VIRTUAL;
- PROCEDURE SetActive; VIRTUAL;
- PROCEDURE CheckEvent (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE SaveConfiguration; VIRTUAL;
- PROCEDURE RestoreConfiguration; VIRTUAL;
- FUNCTION GetState : BOOLEAN; VIRTUAL;
- END;
-
- EndButPtr = ^EndBut;
- EndBut =OBJECT (SAAItem)
-
- ActCol : BYTE;
- HotKeyCode : WORD;
-
- CONSTRUCTOR Init (nx, ny : BYTE;
- N : STRING;
- AltHKC : WORD;
- NewHK : WORD;
- NewVSM : WExtVSMPtr);
- PROCEDURE SetColors (NC, NHKC, NAC : BYTE);
- PROCEDURE SetActive; VIRTUAL;
- PROCEDURE SetPassive; VIRTUAL;
- PROCEDURE CheckEvent (VAR Ev : EventObj); VIRTUAL;
- END;
-
- StringFieldPtr = ^StringField;
- StringField = OBJECT (SAAItem)
-
- InsState : BOOLEAN;
- sx, sy : BYTE;
- FillChr : CHAR;
- FLength,
- BegCol,
- EndCol,
- MaxLength,
- StrLength,
- CurX : BYTE;
- WorkStr : STRING;
- SaveStr : STRING;
-
- CONSTRUCTOR Init (nx, ny,
- Fl, MaxL: BYTE;
- Fc : CHAR;
- StartStr: STRING;
- tx, ty : BYTE;
- Title : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- PROCEDURE SetColors (NC : BYTE);
- PROCEDURE Display; VIRTUAL;
- PROCEDURE SetActive; VIRTUAL;
- PROCEDURE SetPassive; VIRTUAL;
- PROCEDURE SetXY (nx, ny : BYTE); VIRTUAL;
- PROCEDURE CheckMouEv (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE CheckKeyEv (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE Edit (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE SaveConfiguration; VIRTUAL;
- PROCEDURE RestoreConfiguration; VIRTUAL;
-
- FUNCTION CharValid (ch : WORD) : BOOLEAN; VIRTUAL;
- FUNCTION Result : STRING;
- FUNCTION FieldValid : BOOLEAN;
- FUNCTION GetFillChar: CHAR; VIRTUAL;
- FUNCTION GetBegCol : BYTE; VIRTUAL;
- FUNCTION GetEndCol : BYTE; VIRTUAL;
- FUNCTION GetMaxLen : BYTE; VIRTUAL;
- FUNCTION GetFieldLen: BYTE; VIRTUAL;
- FUNCTION GetStrLen : BYTE; VIRTUAL;
- FUNCTION GetCurX : BYTE; VIRTUAL;
- FUNCTION GetFieldX : BYTE; VIRTUAL;
- FUNCTION GetFieldY : BYTE; VIRTUAL;
- FUNCTION GetInsState: BOOLEAN; VIRTUAL;
- END;
-
- IntegerFieldPtr = ^IntegerField;
- IntegerField = OBJECT (StringField)
- FUNCTION CharValid (ch : WORD) : BOOLEAN; VIRTUAL;
- FUNCTION Result : INTEGER;
- FUNCTION FieldValid : BOOLEAN;
- END;
-
- RealFieldPtr = ^RealField;
- RealField = OBJECT (StringField)
- FUNCTION CharValid (ch : WORD) : BOOLEAN; VIRTUAL;
- FUNCTION Result : REAL;
- FUNCTION FieldValid : BOOLEAN;
- END;
-
- StringPtr = ^StringObj;
- StringObj = OBJECT (Base)
- s : ^STRING;
- CONSTRUCTOR Init (ns : STRING);
- FUNCTION GetStr : STRING;
- DESTRUCTOR Done; VIRTUAL;
- END;
-
- PickListPtr = ^PickList;
- PickList = OBJECT (SAAItem)
-
- LastEv : EventObj;
- MaxLen,
- ActiveItem,
- ItemNum,
- BarCol,
- x1, y1,
- x2, y2,
- Col1, Col2,
- Row1, Row2 : BYTE;
- Win : FrameWindowPtr;
- VScrollBar : ScrollBarPtr;
- ItemList : DListCollectionPtr;
-
- CONSTRUCTOR Init (nx1, ny1,
- nx2, ny2 : BYTE;
- Title : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- PROCEDURE InitData (nx1,ny1,nx2,ny2 : BYTE); VIRTUAL;
- PROCEDURE Add (Item : StringPtr); VIRTUAL;
- PROCEDURE Display; VIRTUAL;
- PROCEDURE DisplayHotKey; VIRTUAL;
- PROCEDURE SetActive; VIRTUAL;
- PROCEDURE CheckMouEv (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE CheckKeyEv (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE SetXY (nx, ny : BYTE); VIRTUAL;
-
- { die folgenden Methoden sind intern: }
- PROCEDURE SetBar (ny : INTEGER); VIRTUAL;
- PROCEDURE ShowActBar; VIRTUAL;
- PROCEDURE HideActBar; VIRTUAL;
- PROCEDURE Scroll (dx, dy : INTEGER); VIRTUAL;
- PROCEDURE ShowList; VIRTUAL;
- PROCEDURE ClearList; VIRTUAL;
- PROCEDURE SetBarCol (BC : BYTE); VIRTUAL;
-
- FUNCTION GetX1 : BYTE; VIRTUAL;
- FUNCTION GetY1 : BYTE; VIRTUAL;
- FUNCTION GetX2 : BYTE; VIRTUAL;
- FUNCTION GetY2 : BYTE; VIRTUAL;
- FUNCTION GetItemNum : BYTE; VIRTUAL;
- FUNCTION GetActItem : BYTE; VIRTUAL;
- FUNCTION GetBarCol : BYTE; VIRTUAL;
- FUNCTION GetRow1 : BYTE; VIRTUAL;
- FUNCTION GetRow2 : BYTE; VIRTUAL;
- FUNCTION GetCol1 : BYTE; VIRTUAL;
- FUNCTION GetCol2 : BYTE; VIRTUAL;
- FUNCTION GetWinPtr : FrameWindowPtr;
- FUNCTION GetVScrollBarPtr : ScrollBarPtr; VIRTUAL;
- FUNCTION GetResult : STRING; VIRTUAL;
- FUNCTION GetMaxLen : BYTE; VIRTUAL;
- DESTRUCTOR Done; VIRTUAL;
- END;
-
- ExtPickListPtr = ^ExtPickList;
- ExtPickList = OBJECT (PickList)
-
- HScrollBar : ScrollBarPtr;
-
- CONSTRUCTOR Init (nx1, ny1,
- nx2, ny2 : BYTE;
- Title : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- PROCEDURE Add (Item : StringPtr); VIRTUAL;
- PROCEDURE Display; VIRTUAL;
- PROCEDURE SetXYRel (dx, dy : INTEGER); VIRTUAL;
- PROCEDURE CheckMouEv (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE CheckKeyEv (VAR Ev : EventObj); VIRTUAL;
- PROCEDURE SetBar (ny : INTEGER); VIRTUAL;
-
- FUNCTION GetHScrollBarPtr : ScrollBarPtr; VIRTUAL;
- DESTRUCTOR Done; VIRTUAL;
- END;
-
- StandAlonePickListPtr = ^StandAlonePickList;
- StandAlonePickList = OBJECT (ExtPickList)
-
- CONSTRUCTOR Init (nx1, ny1, nx2, ny2 : BYTE;
- Title : STRING;
- NewVSM : WExtVSMPtr);
- PROCEDURE CheckEvent (VAR Ev : EventObj); VIRTUAL;
- FUNCTION GetWinPtr : SAAWindowPtr; VIRTUAL;
- END;
-
-
- IMPLEMENTATION
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von RadioBut *)
- (* ───────────────────────────────────────────────────── *)
- CONSTRUCTOR RadioBut.Init (nx, ny : BYTE;
- N : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- BEGIN
- IF N[1]<>' ' THEN N := ' '+N;
- IF NOT SAAItem.Init (nx,ny,'( )'+N,AltHKC,NewVSM) THEN
- Fail;
- END;
-
- PROCEDURE RadioBut.Display;
- BEGIN
- SAAItem.Display;
- Mouse^.Hide;
- IF Active THEN BEGIN
- Mouse^.Hide;
- VSM^.WriteChr (Succ (x), y, ItemColor, Chr (7));
- Mouse^.Show;
- END;
- END;
-
- PROCEDURE RadioBut.SetActive;
- BEGIN
- SAAItem.SetActive;
- VSM^.GotoXY (Succ (x), y);
- END;
-
- PROCEDURE RadioBut.SetPassive;
- BEGIN
- SAAItem.SetPassive;
- Display;
- END;
-
- PROCEDURE RadioBut.CheckEvent (VAR Ev : EventObj);
- BEGIN
- SAAItem.CheckEvent (Ev);
- IF ReturnCode=ItSelected THEN
- ReturnCode := ItEvAccepted;
- IF (ReturnCode=ItEvNotMine) AND
- (Active) AND
- (Ev.EventType=EvKeyPressed) THEN
- IF Ev.Key=CurUp THEN BEGIN
- SetPassive;
- ReturnCode := ItActPrev;
- END ELSE
- IF Ev.Key=CurDown THEN BEGIN
- SetPassive;
- ReturnCode := ItActNext;
- END;
- END;
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von PushBut *)
- (* ───────────────────────────────────────────────────── *)
- CONSTRUCTOR PushBut.Init (nx, ny : BYTE;
- N : STRING;
- AltHKC : WORD;
- NOn : BOOLEAN;
- NewVSM : WExtVSMPtr);
- BEGIN
- IF N[1]<>' ' THEN N := ' '+N;
- IF SAAItem.Init (nx, ny, '[ ]'+N, AltHKC, NewVSM) THEN
- On := NOn
- ELSE
- Fail;
- END;
-
- PROCEDURE PushBut.Display;
- BEGIN
- SAAItem.Display;
- IF On THEN BEGIN
- Mouse^.Hide;
- VSM^.WriteChr (Succ (x), y, ItemColor, 'X');
- Mouse^.Show;
- END;
- END;
-
- PROCEDURE PushBut.SetActive;
- BEGIN
- SAAItem.SetActive;
- VSM^.GotoXY (Succ (x), y);
- END;
-
- PROCEDURE PushBut.CheckEvent (VAR Ev : EventObj);
- BEGIN
- SAAItem.CheckEvent (Ev);
- IF (ReturnCode=ItSelected) OR
- ((ReturnCode=ItEvNotMine) AND
- (Ev.EventType=EvKeyPressed) AND
- (Ev.Key=Space) AND Active) THEN BEGIN
- On := NOT On;
- Display;
- ReturnCode := ItEvAccepted;
- END;
- END;
-
- PROCEDURE PushBut.SaveConfiguration;
- BEGIN
- SaveFl := On;
- END;
-
- PROCEDURE PushBut.RestoreConfiguration;
- BEGIN
- On := SaveFl;
- END;
-
- FUNCTION PushBut.GetState : BOOLEAN;
- BEGIN
- GetState := On;
- END;
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von EndBut *)
- (* ───────────────────────────────────────────────────── *)
- CONSTRUCTOR EndBut.Init (nx, ny : BYTE;
- N : STRING;
- AltHKC : WORD;
- NewHK : WORD;
- NewVSM : WExtVSMPtr);
- BEGIN
- IF N[1]<>' ' THEN N := ' '+N;
- IF N[Length (n)]<>' ' THEN N := N+' ';
- IF SAAItem.Init (nx, ny, '<'+N+'>',
- AltHKC, NewVSM) THEN BEGIN
- HotKeyCode := NewHK; ActCol := EndButActColor;
- END ELSE
- Fail;
- END;
-
- PROCEDURE EndBut.SetColors (NC, NHKC, NAC : BYTE);
- BEGIN
- SAAItem.SetColors (NC, NHKC);
- ActCol := NAC;
- END;
-
- PROCEDURE EndBut.SetActive;
- BEGIN
- SAAItem.SetActive;
- Mouse^.Hide;
- VSM^.FillPartAttr (x, y, Pred (x+Length (Name^)), y,
- EndButActColor);
- Mouse^.Show;
- VSM^.GotoXY (x+2, y);
- END;
-
- PROCEDURE EndBut.SetPassive;
- BEGIN
- SAAItem.SetPassive;
- Display;
- END;
-
- PROCEDURE EndBut.CheckEvent (VAR Ev : EventObj);
- BEGIN
- SAAItem.CheckEvent (Ev);
- IF (ReturnCode=ItSelected) OR
- ((ReturnCode=ItEvNotMine) AND
- (Ev.EventType=EvKeyPressed) AND
- ((Ev.Key=HotKeyCode) OR
- ((Ev.Key=Enter) AND Active))) THEN BEGIN
- SetActive;
- ReturnCode := ItFinish;
- END;
- END;
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von StringField *)
- (* ───────────────────────────────────────────────────── *)
- CONSTRUCTOR StringField.Init (nx, ny,
- Fl, MaxL: BYTE;
- Fc : CHAR;
- StartStr: STRING;
- tx, ty : BYTE;
- Title : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- VAR i : BYTE;
- InValid : BOOLEAN;
- BEGIN
- InValid := FALSE;
- FLength := Fl; MaxLength := MaxL; InsState:= FALSE;
- BegCol := 1; EndCol := FLength; FillChr := Fc;
- FOR i := 1 TO Length (StartStr) DO
- IF NOT CharValid (Ord (StartStr[i])) THEN
- InValid := TRUE;
- IF InValid THEN
- StartStr := '';
- StrLength:= Length (StartStr);
- CurX := Succ (StrLength);
- IF CurX>EndCol THEN BEGIN
- EndCol := Succ (CurX);
- BegCol := Succ (EndCol-FLength);
- END;
- FOR i := Length (StartStr) TO Pred (MaxLength) DO
- StartStr := StartStr+FillChr;
- WorkStr := StartStr;
- IF SAAItem.Init (tx, ty, Title,
- AltHKC, NewVSM) THEN BEGIN
- sx := nx; sy := ny;
- END ELSE
- Fail;
- END;
-
- PROCEDURE StringField.SetColors (NC : BYTE);
- BEGIN
- Col := NC;
- END;
-
- PROCEDURE StringField.Display;
- VAR Ch : CHAR;
- BEGIN
- SAAItem.Display;
- Mouse^.Hide;
- VSM^.WriteStr (sx, sy, Col,
- Copy (WorkStr, BegCol, FLength));
- IF (StrLength>FLength) AND
- (EndCol<StrLength) THEN Ch := Chr (16)
- ELSE Ch := ' ';
- VSM^.WriteChr (sx+FLength, sy, Col, Ch);
- IF (BegCol>1) THEN Ch := Chr (17)
- ELSE Ch := ' ';
- VSM^.WriteChr (Pred (sx), sy, Col, Ch);
- VSM^.GotoXY (sx+CurX-BegCol, sy);
- Mouse^.Show;
- END;
-
- PROCEDURE StringField.SetActive;
- BEGIN
- SAAItem.SetActive;
- IF InsState THEN BlockCursor;
- END;
-
- PROCEDURE StringField.SetPassive;
- BEGIN
- SAAItem.SetPassive;
- IF InsState THEN NormalCursor;
- END;
-
- PROCEDURE StringField.SetXY (nx, ny : BYTE);
- BEGIN
- sx := sx+nx-x; sy := sy+ny-y;
- SAAItem.SetXY (nx, ny);
- END;
-
- PROCEDURE StringField.CheckMouEv (VAR Ev : EventObj);
-
- { im Bereich des Eingabefelds - nicht des Namenfelds ? }
- FUNCTION EvInArea : BOOLEAN;
- BEGIN
- EvInArea := (Ev.X>=sx) AND (Ev.Y=sy) AND
- (Ev.X<sx+FLength)
- END;
-
- BEGIN
- SAAItem.CheckMouEv (Ev);
- IF ReturnCode=ItEvAccepted THEN
- SetActive
- ELSE BEGIN
- ReturnCode := ItEvNotMine;
- IF EvInArea THEN
- IF (EvHand^.MouReleased (Ev)) OR
- (EvHand^.MouPressed (Ev)) OR
- (Ev.Buttons>0) THEN BEGIN
- SetActive;
- REPEAT
- CurX := (Ev.X-sx) + BegCol;
- IF CurX>StrLength THEN
- CurX := Succ (StrLength);
- VSM^.GotoXY (sx+CurX-BegCol, sy);
- EvHand^.WaitForEvent (EvAll, Ev);
- UNTIL ((Ev.EventType=EvMouMove) AND
- NOT EvInArea) OR
- ((Ev.EventType AND EvKeyAll)>0) OR
- (EvHand^.MouReleased (Ev));
- IF EvInArea AND EvHand^.MouReleased (Ev) THEN
- ReturnCode := ItEvAccepted
- ELSE IF (Ev.EventType AND EvKeyAll)>0 THEN
- CheckKeyEv (Ev)
- ELSE BEGIN
- SetPassive;
- ReturnCode := ItEvNotMine;
- END;
- END;
- END;
- END;
-
- PROCEDURE StringField.CheckKeyEv (VAR Ev : EventObj);
- BEGIN
- ReturnCode := ItEvNotMine;
- IF NOT Active THEN BEGIN
- SAAItem.CheckKeyEv (Ev);
- IF ReturnCode=ItSelected THEN
- ReturnCode := ItEvAccepted;
- END;
- IF (Active) AND
- (ReturnCode=ItEvNotMine) AND
- (Ev.EventType=EvKeyPressed) THEN
- Edit (Ev);
- END;
-
- PROCEDURE StringField.Edit (VAR Ev : EventObj);
- VAR
- Quit : BOOLEAN;
- BEGIN
- Quit := FALSE;
- IF InsState THEN BlockCursor;
- REPEAT
- IF (Ev.EventType=EvKeyPressed) THEN BEGIN
- {------------- Normale Taste gedrückt ? ------------}
- IF (Ev.Key>=32) AND (Ev.Key<=255) AND
- (CurX<=MaxLength) AND
- (CharValid (Ev.Key)) THEN BEGIN
- IF InsState THEN BEGIN { einfügen }
- IF Succ (StrLength)<=MaxLength THEN BEGIN
- WorkStr[0] := Chr (Pred (MaxLength));
- System.Insert (Chr (Ev.Key), WorkStr, CurX);
- Inc (StrLength);
- END ELSE
- Dec (CurX);
- END ELSE BEGIN { oder überschreiben }
- WorkStr[CurX] := Chr (Ev.Key);
- IF CurX>StrLength THEN
- Inc (StrLength);
- END;
- Inc (CurX);
- IF (CurX>EndCol) THEN BEGIN
- Inc (EndCol); Inc (BegCol);
- END;
- IF (CurX>MaxLength) THEN BEGIN
- Dec (CurX); Dec (EndCol); Dec (BegCol);
- END;
- {----------- "Spezielle" Taste gedrückt ? ----------}
- END ELSE BEGIN
- CASE Ev.Key OF
- CtrlS : Ev.Key := CurLeft;
- CtrlD : Ev.Key := CurRight;
- END;
- CASE Ev.Key OF
- Enter : BEGIN
- SetPassive;
- ReturnCode := ItFinish;
- Quit := TRUE;
- END;
- CurLeft : IF CurX>1 THEN BEGIN
- Dec (CurX);
- IF CurX<BegCol THEN BEGIN
- Dec (BegCol); Dec (EndCol);
- END;
- END;
- CurRight: IF (CurX<=StrLength) THEN BEGIN
- Inc (CurX);
- IF CurX>EndCol THEN BEGIN
- Inc (BegCol); Inc (EndCol)
- END;
- END;
- BackSpace:IF (StrLength>0) AND
- (CurX>1) THEN BEGIN
- Dec (CurX); Dec (StrLength);
- Delete (WorkStr, CurX, 1);
- WorkStr := WorkStr+FillChr;
- IF CurX<BegCol THEN BEGIN
- Dec (BegCol); Dec (EndCol);
- END;
- END;
- Del : IF (StrLength>0) AND
- (CurX<=StrLength) THEN BEGIN
- Delete (WorkStr, CurX, 1);
- WorkStr := WorkStr+FillChr;
- Dec (StrLength)
- END;
- Ins : BEGIN
- InsState := NOT InsState;
- IF InsState THEN
- BlockCursor
- ELSE
- NormalCursor;
- END;
- CtrlY : BEGIN
- FillChar (WorkStr,
- Succ (MaxLength),
- FillChr);
- WorkStr[0] := Chr (MaxLength);
- CurX := 1; BegCol := 1;
- EndCol := FLength;
- StrLength := 0;
- END;
- CurHome : BEGIN
- CurX := 1; BegCol := 1;
- EndCol := FLength;
- END;
- CurEnd : BEGIN
- IF StrLength>FLength THEN BEGIN
- EndCol := Succ (StrLength);
- BegCol := Succ (EndCol-FLength);
- CurX := StrLength;
- END ELSE
- CurX := Succ (StrLength);
- IF (StrLength=MaxLength) THEN
- Dec (CurX);
- END;
- ELSE { Tastendruck nicht ausgewertet }
- Quit := TRUE;
- END;
- END;
- Display;
- END ELSE
- IF (Ev.EventType AND EvMouAll>0) THEN
- Quit := TRUE;
- IF NOT Quit THEN
- Evhand^.WaitForEvent (EvAll, Ev)
- ELSE
- IF (Ev.EventType AND EvMouAll)>0 THEN
- CheckMouEv (Ev);
- { vielleicht betrifft das Mausevent StringField,
- dann braucht nicht zum Aufrufer zurückgesprungen
- zu werden. }
-
- UNTIL Quit;
- END;
-
- PROCEDURE StringField.SaveConfiguration;
- BEGIN
- SaveStr := WorkStr;
- END;
-
- PROCEDURE StringField.RestoreConfiguration;
- BEGIN
- WorkStr := SaveStr;
- END;
-
- FUNCTION StringField.CharValid (ch : WORD) : BOOLEAN;
- BEGIN
- CharValid := (ch>=32) AND (ch<=255);
- END;
-
- FUNCTION StringField.Result : STRING;
- BEGIN
- Result := Copy (WorkStr, 1, StrLength);
- END;
-
- FUNCTION StringField.FieldValid : BOOLEAN;
- BEGIN
- FieldValid := TRUE;
- END;
-
- FUNCTION StringField.GetFillChar : CHAR;
- BEGIN
- GetFillChar := FillChr;
- END;
-
- FUNCTION StringField.GetBegCol : BYTE;
- BEGIN
- GetBegCol := BegCol;
- END;
-
- FUNCTION StringField.GetEndCol : BYTE;
- BEGIN
- GetEndCol := EndCol;
- END;
-
- FUNCTION StringField.GetMaxLen : BYTE;
- BEGIN
- GetMaxLen := MaxLength;
- END;
-
- FUNCTION StringField.GetFieldLen : BYTE;
- BEGIN
- GetFieldLen := FLength;
- END;
-
- FUNCTION StringField.GetStrLen : BYTE;
- BEGIN
- GetStrLen := StrLength;
- END;
-
- FUNCTION StringField.GetCurX : BYTE;
- BEGIN
- GetCurX := CurX;
- END;
-
- FUNCTION StringField.GetFieldX : BYTE;
- BEGIN
- GetFieldX := sx;
- END;
-
- FUNCTION StringField.GetFieldY : BYTE;
- BEGIN
- GetFieldY := sy;
- END;
-
- FUNCTION StringField.GetInsState : BOOLEAN;
- BEGIN
- GetInsState := InsState;
- END;
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von IntegerField *)
- (* ───────────────────────────────────────────────────── *)
- FUNCTION IntegerField.CharValid (ch : WORD) : BOOLEAN;
- BEGIN
- CharValid := ((ch>=48) AND (ch<=57)) OR
- (ch=43) OR (ch=45);
- END;
-
- FUNCTION IntegerField.Result : INTEGER;
- VAR Res, Err : INTEGER;
- s : STRING;
- BEGIN
- s := StringField.Result;
- IF (s[1]=#43) OR (s[1]=#45) THEN
- Delete (s, 1, 1);
- IF (s>'32767') THEN Err := 1
- ELSE Val (StringField.Result, Res, Err);
- IF Err>0 THEN
- ReturnCode := ResultInvalid
- ELSE
- Result := Res;
- END;
-
- FUNCTION IntegerField.FieldValid : BOOLEAN;
- VAR Res : INTEGER;
- BEGIN
- Res := Result;
- FieldValid := (ReturnCode<>ResultInvalid);
- END;
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von RealField *)
- (* ───────────────────────────────────────────────────── *)
- FUNCTION RealField.CharValid (ch : WORD) : BOOLEAN;
- BEGIN
- CharValid := ((ch>=48) AND (ch<=57)) OR
- (ch=43) OR (ch=45) OR
- (ch=46);
- END;
-
- FUNCTION RealField.Result : REAL;
- VAR Res : REAL; Err : INTEGER;
- BEGIN
- Val (StringField.Result, Res, Err);
- IF Err>0 THEN
- ReturnCode := ResultInvalid
- ELSE
- Result := Res;
- END;
-
- FUNCTION RealField.FieldValid : BOOLEAN;
- VAR Res : REAL;
- BEGIN
- Res := Result;
- FieldValid := (ReturnCode<>ResultInvalid);
- END;
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von StringObj *)
- (* ───────────────────────────────────────────────────── *)
- CONSTRUCTOR StringObj.Init (ns : STRING);
- BEGIN
- GetMem (s, Succ (Length (ns)));
- IF s<>NIL THEN s^ := ns
- ELSE Fail
- END;
-
- FUNCTION StringObj.GetStr : STRING;
- BEGIN
- GetStr := s^;
- END;
-
- DESTRUCTOR StringObj.Done;
- BEGIN
- FreeMem (s, Succ (Length (s^)));
- END;
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von PickList *)
- (* ───────────────────────────────────────────────────── *)
- CONSTRUCTOR PickList.Init (nx1, ny1,
- nx2, ny2 : BYTE;
- Title : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- BEGIN
- IF SAAItem.Init ((nx2+nx1-Length (Title)) DIV 2, ny1,
- Title, AltHKC, NewVSM) THEN BEGIN
- Win := New (FrameWindowPtr, Init (VSM));
- VScrollBar := New (VertScrollBarPtr, Init (VSM));
- ItemList := New (DListCollectionPtr, Init);
- IF (Win=NIL) OR
- (VScrollBar=NIL) OR
- (ItemList=NIL) THEN
- Fail
- ELSE
- InitData (nx1, ny1, nx2, ny2);
- END ELSE
- Fail;
- END;
-
- PROCEDURE PickList.InitData (nx1, ny1, nx2, ny2 : BYTE);
- BEGIN
- x1 := nx1; y1 := ny1; x2 := nx2; y2 := ny2;
- Row1 := 1; Row2 := Pred (y2-y1);
- Col1 := 1; Col2 := Pred (x2-x1);
- BarCol := ActiveBarColor;
- ActiveItem := 0;
- ItemNum := 0;
- Win^.SetXY (x1, y1, x2, y2);
- Win^.SetColors (Col, Col, 0, 0);
- VScrollBar^.SetXY (x2, Succ (y1), x2, Pred (y2));
- END;
-
- PROCEDURE PickList.Add (Item : StringPtr);
- BEGIN
- IF Item<>NIL THEN BEGIN
- IF Length (Item^.GetStr)>MaxLen THEN
- MaxLen := Length (Item^.GetStr);
- ItemList^.Put (Item);
- Inc (ItemNum);
- END;
- END;
-
- PROCEDURE PickList.Display;
- BEGIN
- IF ItemNum=0 THEN
- Add (New (StringPtr, Init ('')));
- Mouse^.Hide;
- Win^.Show;
- IF Win^.IsOpened THEN BEGIN
- SAAItem.Display;
- IF ActiveItem=0 THEN
- VScrollBar^.SetMaxPos (ItemNum, 1)
- ELSE
- VScrollBar^.SetMaxPos (ItemNum, ActiveItem);
- VScrollBar^.Show;
- ShowList;
- SetBar (ActiveItem);
- END;
- Mouse^.Show;
- END;
-
- PROCEDURE PickList.DisplayHotKey;
- BEGIN
- SAAItem.DisplayHotKey;
- END;
-
- PROCEDURE PickList.SetActive;
- BEGIN
- IF Displayed THEN BEGIN
- SAAItem.SetActive;
- IF ActiveItem=0 THEN
- Inc (ActiveItem);
- ShowActBar;
- END;
- END;
-
- PROCEDURE PickList.CheckKeyEv (VAR Ev : EventObj);
- BEGIN
- ReturnCode := ItEvNotMine;
- SAAItem.CheckKeyEv (Ev);
- IF ReturnCode=ItSelected THEN BEGIN
- ReturnCode := ItEvAccepted;
- SetBar (ActiveItem);
- END ELSE
- IF (ReturnCode=ItEvNotMine) AND
- (Ev.EventType=EvKeyPressed) AND (Active) THEN
- CASE Ev.Key OF
- Enter : ReturnCode := ItSelected;
- CurDown: BEGIN
- ReturnCode := ItEvAccepted;
- SetBar (Succ (ActiveItem));
- END;
- CurUp : BEGIN
- ReturnCode := ItEvAccepted;
- SetBar (Pred (ActiveItem));
- END;
- CtrlHome:BEGIN
- ReturnCode := ItEvAccepted;
- SetBar (1);
- END;
- CtrlEnd :BEGIN
- ReturnCode := ItEvAccepted;
- SetBar (ItemNum);
- END;
- END;
- END;
-
- PROCEDURE PickList.CheckMouEv (VAR Ev : EventObj);
- VAR ScrY : INTEGER; Answer : BYTE;
- BEGIN
- ReturnCode := ItEvNotMine; ScrY := 0; Answer := 0;
- {--------------- innerhalb des Fensters ? --------------}
- IF (Ev.X>x1) AND (Ev.X<x2) THEN BEGIN
- IF (Ev.Y>y1) AND (Ev.Y<y2) AND
- (EvHand^.MouPressed (Ev) OR
- EvHand^.MouReleased (Ev) OR
- (Ev.Buttons>0)) THEN BEGIN
- ReturnCode := ItEvAccepted;
- IF NOT Active THEN
- SetActive;
- SetBar (Pred (Ev.Y-y1)+Row1);
- IF (Evhand^.MouPressed (Ev)) AND
- (EvHand^.MouReleased (LastEv)) AND
- (Ev.X=LastEv.X) AND
- (Ev.Y=LastEv.Y) AND
- (Ev.Time<LastEv.Time+DoubleClickTime) THEN
- ReturnCode := ItSelected;
- END ELSE
- IF (Ev.X>x1) AND (Ev.X<x2) AND
- (EvHand^.MouPressed (Ev)) THEN BEGIN
- IF Ev.Y=y1 THEN ScrY := -1;
- IF Ev.Y=y2 THEN ScrY := 1;
- END;
- END;
- {--------------- Im ScrollBalken ? ---------------------}
- IF ((ReturnCode=ItEvNotMine) AND
- (EvHand^.MouPressed (Ev))) OR
- (ScrY<>0) THEN BEGIN
- VScrollBar^.CheckMouEv (Ev);
- Answer := VScrollBar^.GetReturnCode;
- CASE Answer OF
- SBScrollUp : ScrY := -1;
- SBScrollDown: ScrY := 1;
- SBScrollPgUp: ScrY := -Pred (y2-y1);
- SBScrollPgDn: ScrY := Pred (y2-y1);
- END;
- IF ScrY<>0 THEN BEGIN
- IF NOT Active THEN
- SetActive;
- REPEAT
- EvHand^.PeekEvent (Ev);
- IF Ev.Time=MaxLongInt THEN BEGIN
- IF Abs (ScrY)>1 THEN
- VSM^.Delay (MouseDelay*3)
- ELSE
- VSM^.Delay (MouseDelay);
- SetBar (ActiveItem+ScrY);
- END;
- UNTIL (EvHand^.MouReleased (Ev)) OR
- (Ev.EventType=EvMouMove);
- ReturnCode := ItEvAccepted;
- END;
- IF (Answer=SBGotoPos) THEN BEGIN
- IF NOT Active THEN
- SetActive;
- SetBar (VScrollBar^.GetPos);
- ReturnCode := ItEvAccepted;
- END;
- END;
- LastEv := Ev;
- END;
-
- PROCEDURE PickList.SetXY (nx, ny : BYTE);
- BEGIN
- x1 := x1+(nx-x); x2 := x2+(nx-x);
- y1 := y1+(ny-y); y2 := y2+(ny-y);
- IF Displayed THEN
- Win^.Hide;
- Win^.SetXY (x1, y1, x2, y2);
- VScrollBar^.SetXYRel (nx-x, ny-y);
- SAAItem.SetXY (nx, ny);
- { das Öffnen wird von Display übernommen, das
- von SAAItem.SetXY automatisch aufgerufen wird. }
- END;
-
- PROCEDURE PickList.SetBar (ny : INTEGER);
- BEGIN
- IF (ny=ActiveItem) AND (ActiveItem=0) THEN
- Exit;
- IF ny<1 THEN
- ny := 1;
- IF ny>ItemNum THEN
- ny := ItemNum;
- IF ActiveItem<>ny THEN BEGIN
- HideActBar;
- IF ny>Row2 THEN
- Scroll (0, ny-Row2);
- IF ny<Row1 THEN
- Scroll (0, INTEGER (ny-Row1));
- ActiveItem := ny;
- ShowActBar;
- VScrollBar^.ChangePos (ItemNum, ActiveItem);
- END;
- END;
-
- PROCEDURE PickList.ShowActBar;
- BEGIN
- Mouse^.Hide;
- VSM^.FillPartAttr (Succ(X1), Succ (Y1+ActiveItem-Row1),
- Pred(X2), Succ (y1+ActiveItem-Row1),
- BarCol);
- VSM^.GotoXY (Succ (x1),
- Succ (y1+ActiveItem-Row1));
- Mouse^.Show;
- END;
-
- PROCEDURE PickList.HideActBar;
- BEGIN
- Mouse^.Hide;
- VSM^.FillPartAttr (Succ(X1), Succ (Y1+ActiveItem-Row1),
- Pred(X2), Succ (y1+ActiveItem-Row1),
- Col);
- Mouse^.Show;
- END;
-
- PROCEDURE PickList.Scroll (dx, dy : INTEGER);
- BEGIN
- IF dx+Col2>MaxLen THEN
- dx := MaxLen-Col2;
- IF dx+Col1<1 THEN
- dx := -Pred (Col1);
- IF dy+ActiveItem>ItemNum THEN
- dy := ItemNum-ActiveItem;
- IF dy+ActiveItem<1 THEN
- dy := -Pred (ActiveItem);
- IF (dy<>0) OR (dx<>0) THEN BEGIN
- Inc (Row1, dy); Inc (Row2, dy);
- Inc (Col1, dx); Inc (Col2, dx);
- ShowList; { der Einfachkeit halber }
- END;
- END;
-
- PROCEDURE PickList.ShowList;
- VAR i : WORD; { geht den sichtbaren Listenausschnitt }
- Str : STRING; { durch und zeigt Items an }
- BEGIN
- Mouse^.Hide;
- VSM^.FillPart (Succ (x1), Succ (y1),
- Pred (x2), Pred (y2), Col, ' ');
- ItemList^.SetActNodeTo (Row1);
- Str := StringPtr (ItemList^.GetActData)^.GetStr;
- FOR i := Row1 TO Row2 DO BEGIN
- IF i<=ItemNum THEN BEGIN
- VSM^.WriteStr (Succ (x1), Succ (y1+i-Row1),
- Col,
- Copy (Str, Col1, Succ (Col2-Col1)));
- Str := StringPtr (ItemList^.GotoNextData)^.GetStr;
- END;
- END;
- Mouse^.Show;
- END;
-
- PROCEDURE PickList.ClearList;
- BEGIN
- ItemList^.Clear;
- ItemNum := 0; ActiveItem := 0;
- Row1 := 1; Row2 := Pred (y2-y1);
- Col1 := 1; Col2 := Pred (x2-x1);
- END;
-
- PROCEDURE PickList.SetBarCol (BC : BYTE);
- BEGIN
- BarCol := BC;
- END;
-
- FUNCTION PickList.GetX1 : BYTE;
- BEGIN
- GetX1 := x1;
- END;
-
- FUNCTION PickList.GetY1 : BYTE;
- BEGIN
- GetY1 := y1;
- END;
-
- FUNCTION PickList.GetX2 : BYTE;
- BEGIN
- GetX2 := x2;
- END;
-
- FUNCTION PickList.GetY2 : BYTE;
- BEGIN
- GetY2 := y2;
- END;
-
- FUNCTION PickList.GetItemNum : BYTE;
- BEGIN
- GetItemNum := ItemNum;
- END;
-
- FUNCTION PickList.GetActItem : BYTE;
- BEGIN
- GetActItem := ActiveItem;
- END;
-
- FUNCTION PickList.GetBarCol : BYTE;
- BEGIN
- GetBarCol := BarCol;
- END;
-
- FUNCTION PickList.GetRow1 : BYTE;
- BEGIN
- GetRow1 := Row1;
- END;
-
- FUNCTION PickList.GetRow2 : BYTE;
- BEGIN
- GetRow2 := Row2;
- END;
-
- FUNCTION PickList.GetCol1 : BYTE;
- BEGIN
- GetCol1 := Col1;
- END;
-
- FUNCTION PickList.GetCol2 : BYTE;
- BEGIN
- GetCol2 := Col2;
- END;
-
- FUNCTION PickList.GetWinPtr : FrameWindowPtr;
- BEGIN
- GetWinPtr := Win;
- END;
-
- FUNCTION PickList.GetVScrollBarPtr : ScrollBarPtr;
- BEGIN
- GetVScrollBarPtr := VscrollBar;
- END;
-
- FUNCTION PickList.GetResult : STRING;
- BEGIN
- WITH ItemList^ DO BEGIN
- SetActNodeTo (ActiveItem);
- GetResult := StringPtr (GetActData)^.GetStr;
- END;
- END;
-
- FUNCTION PickList.GetMaxLen : BYTE;
- BEGIN
- GetMaxLen := MaxLen;
- END;
-
- DESTRUCTOR PickList.Done;
- BEGIN
- SAAItem.Done;
- Dispose (Win, Done);
- Dispose (VScrollBar, Done);
- Dispose (ItemList, Done);
- END;
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von ExtPickList *)
- (* ───────────────────────────────────────────────────── *)
- CONSTRUCTOR ExtPickList.Init (nx1, ny1,
- nx2, ny2 : BYTE;
- Title : STRING;
- AltHKC : WORD;
- NewVSM : WExtVSMPtr);
- BEGIN
- IF PickList.Init (nx1, ny1, nx2, ny2,
- Title, AltHKC, NewVSM) THEN BEGIN
- HScrollBar := New (HorizScrollBarPtr, Init (VSM));
- IF HScrollBar=NIL THEN
- Fail
- ELSE
- HScrollBar^.SetXY (Succ (x1), y2,
- Pred (x2), y2);
- END ELSE
- Fail;
- END;
-
- PROCEDURE ExtPickList.Add (Item : StringPtr);
- BEGIN
- PickList.Add (Item);
- HScrollBar^.SetMaxPos (MaxLen, Col1);
- END;
-
- PROCEDURE ExtPickList.Display;
- BEGIN
- IF (ItemNum>0) AND NOT Displayed THEN BEGIN
- PickList.Display;
- HScrollBar^.SetMaxPos (MaxLen, Col1);
- HScrollBar^.Show;
- END;
- END;
-
- PROCEDURE ExtPickList.SetXYRel (dx, dy : INTEGER);
- BEGIN
- HScrollBar^.SetXYRel (dx, dy);
- PickList.SetXYRel (dx, dy);
- END;
-
- PROCEDURE ExtPickList.CheckMouEv (VAR Ev : EventObj);
- VAR ScrX : INTEGER; Answer : BYTE;
- BEGIN
- ReturnCode := ItEvNotMine; ScrX := 0;
- IF NOT ((Ev.X>x1) AND
- (Ev.X<x2) AND (Ev.Y=y2)) THEN
- PickList.CheckMouEv (Ev);
- { darf nur auf unterem Fensterrand sein, da sich dorg
- jetzt der horizontale Scrollbalken befindet. }
-
- IF (ReturnCode=ItEvNotMine) AND
- (Ev.Y>y1) AND (Ev.Y<y2) AND (Ev.X=x1) AND
- (EvHand^.MouPressed (Ev)) THEN
- ScrX := -1;
- IF (ReturnCode=ItEvNotMine) AND
- ((EvHand^.MouPressed (Ev)) OR (ScrX<>0)) THEN BEGIN
- HScrollBar^.CheckMouEv (Ev);
- Answer := HScrollBar^.GetReturnCode;
- CASE Answer OF
- SBScrollUp : ScrX := -1;
- SBScrollDown: ScrX := 1;
- SBScrollPgUp: ScrX := -Pred (x2-x1);
- SBScrollPgDn: ScrX := Pred (x2-x1);
- END;
- IF (ScrX<>0) THEN BEGIN
- IF NOT Active THEN
- SetActive;
- REPEAT
- EvHand^.PeekEvent (Ev);
- IF Ev.Time=MaxLongInt THEN BEGIN
- IF Abs (ScrX)>1 THEN
- VSM^.Delay (MouseDelay*3)
- ELSE
- VSM^.Delay (MouseDelay);
- Scroll (ScrX, 0);
- SetBar (ActiveItem);
- END
- UNTIL (EvHand^.MouReleased (Ev)) OR
- (Ev.EventType=EvMouMove);
- ReturnCode := ItEvAccepted;
- END;
- IF (Answer=SBGotoPos) THEN BEGIN
- IF NOT Active THEN
- SetActive;
- Scroll (INTEGER (HScrollBar^.GetPos-Col1), 0);
- SetBar (ActiveItem);
- ReturnCode := ItEvAccepted;
- END;
- LastEv := Ev;
- END;
- END;
-
- PROCEDURE ExtPickList.CheckKeyEv (VAR Ev : EventObj);
- BEGIN
- PickList.CheckKeyEv (Ev);
- IF (ReturnCode=ItEvNotMine) AND
- (Ev.EventType=EvKeyPressed) AND (Active) THEN BEGIN
- CASE Ev.Key OF
- CurRight: BEGIN
- ReturnCode := ItEvAccepted;
- Scroll (1, 0);
- END;
- CurLeft : BEGIN
- ReturnCode := ItEvAccepted;
- Scroll (-1, 0);
- END;
- CurHome : BEGIN
- ReturnCode := ItEvAccepted;
- Scroll (-Pred (Row1), 0);
- END;
- CurEnd : BEGIN
- ReturnCode := ItEvAccepted;
- Scroll (MaxLen-Row2, 0);
- END;
- END;
- IF ReturnCode=ItEvAccepted THEN
- SetBar (ActiveItem);
- END;
- END;
-
- PROCEDURE ExtPickList.SetBar (ny : INTEGER);
- BEGIN
- PickList.SetBar (ny);
- HScrollBar^.ChangePos (MaxLen, Col1);
- END;
-
- FUNCTION ExtPickList.GetHScrollBarPtr : ScrollBarPtr;
- BEGIN
- GetHScrollBarPtr := HScrollBar;
- END;
-
- DESTRUCTOR ExtPickList.Done;
- BEGIN
- PickList.Done;
- Dispose (HScrollBar, Done);
- END;
-
- (* ───────────────────────────────────────────────────── *)
- (* Implementation von StandAlonePickList *)
- (* ───────────────────────────────────────────────────── *)
- CONSTRUCTOR StandAlonePickList.Init (nx1,ny1,nx2,ny2:BYTE;
- Title : STRING;
- NewVSM : WExtVSMPtr);
- BEGIN
- IF ExtPickList.Init (nx1, ny1, nx2, ny2,
- '', 0,
- NewVSM) THEN BEGIN
- Dispose (Win, Done);
- Win := New (SAAWindowPtr, Init (VSM));
- IF Win<>NIL THEN BEGIN
- Win^.SetXY (x1, y1, x2, y2);
- Win^.SetColors (Col, Col, 0, 0);
- Win^.SetTitles (Title, '');
- MaxLen := 0;
- END ELSE
- Fail;
- END ELSE
- Fail;
- END;
-
- PROCEDURE StandAlonePickList.CheckEvent (VAR Ev : EventObj);
- VAR OldX, OldY, Answer : BYTE;
- BEGIN
- IF NOT Win^.IsOpened THEN
- Exit;
-
- ReturnCode := ItEvNotMine;
- IF NOT (((Ev.EventType AND EvMouAll)>0) AND
- (Ev.X>x1) AND (Ev.X<x2) AND (Ev.Y=y1) AND
- (Ev.Buttons>0)) THEN
- PickList.CheckEvent (Ev);
- { darf nicht auf oberem Fensterrand sein, denn das
- soll beim Fenster Bewegung auslösen. }
-
- IF (ReturnCode=ItEvNotMine) THEN BEGIN
- OldX := Win^.GetX1; OldY := Win^.GetY1;
- SAAWindowPtr (Win)^.CheckEvent (Ev);
- Answer := SAAWindowPtr (Win)^.GetReturnCode;
- IF Answer=ClosedWin THEN
- ReturnCode := ItFinish
- ELSE
- IF Answer=MovedWin THEN BEGIN
- SetXYRel (Win^.GetX1-OldX, Win^.GetY1-OldY);
- x1 := Win^.GetX1; y1 := Win^.GetY1;
- x2 := Win^.GetX2; y2 := Win^.GetY2;
- VScrollBar^.SetXYRel (Win^.GetX1-OldX,
- Win^.GetY1-OldY);
- VScrollBar^.Show;
- HScrollBar^.SetXYRel (Win^.GetX1-OldX,
- Win^.GetY1-OldY);
- HScrollBar^.Show;
- SetBar (ActiveItem);
- ReturnCode := ItEvAccepted;
- END;
- END;
- END;
-
- FUNCTION StandAlonePickList.GetWinPtr : SAAWindowPtr;
- BEGIN
- GetWinPtr := SAAWindowPtr (Win);
- END;
-
- END.
- (* ----------------------------------------------------- *)
- (* Ende von DBXITEMS.PAS *)
- (* ----------------------------------------------------- *)