{$if not def AP_BLÄTTERN_H} CONST AP_BLÄTTERN_H = 0; PROCEDURE Blättern(VAR aktanzeig : p_Person); { -- Zwischen den Datensätzen umherspringen -- } CONST BWIN_WIDTH = 598; BWIN_HEIGHT = 125; VAR bgad : ARRAY[1..4] OF p_Gadget; dummy : BOOLEAN; t : ARRAY[1..15] OF TagItem; displist : p_List; btattr : TextAttr; PROCEDURE RahmenZeichnen; BEGIN Rahmen(blätterwp,2,103,590,18,TRUE); END; PROCEDURE DelDispList; VAR n,next : p_Node; BEGIN n := displist^.lh_head; WHILE n^.ln_succ<>NIL DO BEGIN next := n^.ln_succ; FreeVec(PTR(n^.ln_name)); Remove(n); Dispose(n); n := next; END; Dispose(displist); displist := NIL; END; PROCEDURE NewLine(VAR l : p_List; VAR x : STR); VAR n : p_Node; BEGIN New(n); n^.ln_name := AllocVec(length(x)+1,MEMF_ANY OR MEMF_CLEAR); CopyMem(PTR(x),PTR(n^.ln_name), length(x)+1); AddTail(l, n); END; PROCEDURE BDisplay(VAR p : p_Person); VAR rp : p_RastPort; x : STR; y,c : STRING; it : IntuiText; BEGIN IF displist <> NIL THEN DelDispList; New(displist); NewList(displist); y := "Anrede : "; CASE p^.anrede OF 0 : y := y+"Firma"; 1 : y := y+"Herrn"; 2 : y := y+"Frau"; 3 : y := y+p^.anrede_s; ELSE END; x := y; NewLine(displist,x); y := "Name : "+p^.Name; x := y; NewLine(displist,x); y := "Vorname : "+p^.vorname; x := y; NewLine(displist,x); y := "Strasse : "+p^.strasse; x := y; NewLine(displist,x); y := "PLZ : "+p^.plz; x := y; NewLine(displist,x); y := "Wohnort : "+p^.ort; x := y; NewLine(displist,x); y := "Telefon : "+p^.tel; x := y; NewLine(displist,x); y := "Telefax : "+p^.fax; x := y; NewLine(displist,x); y := "Geburtsdatum: "+p^.geb; x := y; NewLine(displist,x); y := "EMail1 : "+p^.email1; x := y; NewLine(displist,x); y := "EMail2 : "+p^.email2; x := y; NewLine(displist,x); y := "Kommentar : "+p^.kommentar; x := y; NewLine(displist,x); y := "Gruppen : "; c := ""; FOR i := 1 TO 10 DO BEGIN IF p^.select[i] THEN IF c <> "" THEN c := c + " / "+SelectTexte[i] ELSE c := SelectTexte[i]; END; IF c = "" THEN c := "keine"; y := y + c; x := y; NewLine(displist,x); t[1] := TagItem(GTLV_Labels, LONG(displist)); t[2].ti_Tag := TAG_DONE; GT_SetGadgetAttrsA(bgad[1],blätterwp,NIL,^t); END; PROCEDURE Minus; BEGIN IF PNode^.pn.ln_pred^.ln_pred<>NIL THEN BEGIN PNode := p_Person(PNode^.pn.ln_pred); BDisplay(PNode); END; END; PROCEDURE Plus; BEGIN IF PNode^.pn.ln_succ^.ln_succ<>NIL THEN BEGIN PNode := p_Person(PNode^.pn.ln_succ); BDisplay(PNode); END; END; BEGIN btattr := TextAttr("topaz.font",8,0,0); displist := NIL; ComputeFont(BWIN_WIDTH,BWIN_HEIGHT); ww := ComputeX(BWIN_WIDTH); wh := ComputeY(BWIN_HEIGHT); vonmain:=FALSE; BlätterGl := NIL; BlätterGl := CreateContext(^BlätterGl); ng := NewGadget(2,2,590,100, "",^btattr, 1,0, vi,NIL); sensitivgadget(ng); t[1] := TagItem(GTLV_Labels, LONG(displist)); t[2] := TagItem(GTLV_ReadOnly, LONG(TRUE)); t[3].ti_Tag := TAG_DONE; bgad[1] := CreateGadgetA(LISTVIEW_KIND,blättergl,^ng,^t); { ** ** PropNewLook einsetzen -> dreidimensionale Gadgets! ** ** } popigad:=blättergl^.nextgadget^.nextgadget; IF NOT OS39 THEN WHILE (popigad^.Nextgadget<>NIL) DO popigad:=popigad^.NextGadget; POPI:=NIL; PopI:=popigad^.SpecialInfo; IF POPI<>NIL THEN PopI^.Flags:= PopI^.Flags+PROPNEWLOOK; ng := NewGadget(131,105, 110,13, "_- blättern",mytattr, 2,PLACETEXT_IN, vi,NIL); SensitivGadget(ng); t[1] := TagItem(GT_Underscore,LONG("_")); t[2].ti_Tag := TAG_DONE; bgad[2] := CreateGadgetA(BUTTON_KIND,bgad[1],^ng,^t); ng := NewGadget(241,105, 110,13, "_Edieren...",mytattr, 3,PLACETEXT_IN, vi,NIL); SensitivGadget(ng); bgad[3] := CreateGadgetA(BUTTON_KIND,bgad[2],^ng,^t); ng := NewGadget(352,105, 110,13, "_+ blättern",mytattr, 4,PLACETEXT_IN, vi,NIL); SensitivGadget(ng); bgad[4] := CreateGadgetA(BUTTON_KIND,bgad[3],^ng,^t); t[1] := TagItem(WA_InnerWidth,ww); t[2] := TagItem(WA_InnerHeight,wh); t[3] := TagItem(WA_Flags, WFLG_DEPTHGADGET+WFLG_CLOSEGADGET+WFLG_DRAGBAR+ WFLG_SMART_REFRESH+WFLG_NOCAREREFRESH+WFLG_HASZOOM+ WFLG_ACTIVATE+WFLG_RMBTRAP); t[4] := TagItem(WA_Idcmp, IDCMP_CLOSEWINDOW+IDCMP_CHANGEWINDOW+IDCMP_GADGETUP+ IDCMP_VANILLAKEY); t[5] := TagItem(WA_MinWidth, 100); t[6] := TagItem(WA_MinHeight, yoff+1); t[7] := TagItem(WA_MaxWidth,640); t[8] := TagItem(WA_MaxHeight,256); t[9].ti_Tag := WA_Title; t[9].ti_Data := "Blättern"; t[10] := TagItem(WA_Gadgets,LONG(BlätterGl)); t[11] := TagItem(WA_Left, BlätterWinLeft); t[12] := TagItem(WA_Top, BlätterWinTop); t[13].ti_Tag := TAG_DONE; IF pubname <> "" THEN BEGIN t[13] := TagItem(WA_PubScreenFallBack, 1); t[14] := TagItem(WA_PubScreenName, LONG(pubname)); t[15].ti_Tag := TAG_DONE; END; blätterwp := OpenWindowTagList(NIL,^t); IF blätterwp<>NIL THEN BEGIN RahmenZeichnen; PNode := aktanzeig; BDisplay(PNode); dummy := FALSE; REPEAT GetMessage(blätterwp,class,code,qual,GadNum); CASE class OF IDCMP_CLOSEWINDOW : dummy := TRUE; IDCMP_CHANGEWINDOW : BEGIN RahmenZeichnen; BDisplay(PNode); END; IDCMP_VANILLAKEY: { -- Hier wird nicht mit ButSelecter operiert, da der User -- } { -- auch mal Datensätze ganz schnell durchblättern -- } { -- möchte, indem er seinen Finger auf der +/- - Taste -- } { -- läßt. -- } IF (code = 27) THEN dummy := TRUE ELSE BEGIN CASE CHR(code) OF "-" : Minus; "+" : Plus; "e","E" : BEGIN SetBusyWindow(blätterwp,BlättReq); Edit(PNode,TRUE); BDisplay(PNode); UnBusyWindow(blätterwp,BlättReq); END; ELSE END; END; IDCMP_GADGETUP: CASE GadNum OF 2 : Minus; 3 : BEGIN SetBusyWindow(blätterwp,BlättReq); Edit(PNode,TRUE); UnBusyWindow(blätterwp,BlättReq); BDisplay(PNode); END; 4 : Plus; ELSE END; ELSE END; UNTIL dummy; BlätterWinLeft := blätterwp^.LeftEdge; BlätterWinTop := blätterwp^.TopEdge; CloseBlätterWin; END ELSE DisplayBeep(NIL); FreeGadgets(BlätterGl); BlätterGl := NIL; END; {$endif}