{$if not def AP_SUCHEN_H} CONST AP_SUCHEN_H = 0; VAR gefunden:BOOLEAN;STATIC; weitersuchen:BOOLEAN;STATIC; merk,lauf : p_person;STATIC; PROCEDURE deakt13; BEGIN t[1] := TagItem(GT_UNDERSCORE,LONG('_')); t[2] := TagItem(GTCB_SCALED,1); t[3] := TagItem(GTCB_CHECKED,0); t[4].ti_Tag := TAG_DONE; GT_SetGadgetAttrsA(sgad[13],wp2,NIL,^t); END; PROCEDURE allesakt; BEGIN t[1] := TagItem(GT_UNDERSCORE,LONG('_')); t[2] := TagItem(GTCB_SCALED,1); t[3] := TagItem(GTCB_CHECKED,1); t[4].ti_Tag := TAG_DONE; IF (sgad[13]^.flags AND SELECTED) <> SELECTED THEN t[3].ti_data:=0; FOR i:=2 TO 12 DO GT_SetGadgetAttrsA(sgad[i],wp2,NIL,^t); END; PROCEDURE startesuche; VAR vergleich : STRING; ge,ig,an : BOOLEAN; er : BOOLEAN; { Aus Verlegenheit *-=8-) er=erster} PROCEDURE ps1; BEGIN IF an THEN { von Anfang} BEGIN aktuelleperson:=p_person(plist^.lh_head) er:=TRUE; END ELSE aktuelleperson:=merk; END; PROCEDURE ps2 BEGIN IF ig THEN FOR i:=1 TO length(vergleich) DO vergleich[i]:=upcase(vergleich[i]); IF ge THEN BEGIN IF (suchbuf=vergleich) THEN gefunden:=TRUE END ELSE IF Pos(suchbuf,vergleich)<>0 THEN gefunden:=TRUE; END; PROCEDURE suchname; BEGIN ps1; {v-- = letzter Knoten vor NIL} WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tailpred^.ln_succ)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.name ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; {-- andere Suchprozeduren ---} PROCEDURE suchvorname; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.vorname; ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; PROCEDURE suchstrasse; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.strasse; ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; PROCEDURE suchplz; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.plz; ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; PROCEDURE suchort; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.ort; ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; PROCEDURE suchtelefon; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.tel; ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; PROCEDURE suchgeburtstag; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.geb; ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; PROCEDURE suchfax; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.fax; ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; PROCEDURE suchemail1; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.email1 ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; PROCEDURE suchemail2; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.email2; ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; PROCEDURE suchkommentar; BEGIN ps1; WHILE (aktuelleperson^.pn.ln_succ<>p_person(plist^.lh_tail)) AND NOT gefunden DO BEGIN IF NOT er THEN aktuelleperson:=p_person(aktuelleperson^.pn.ln_succ) ELSE er:=FALSE; vergleich:=aktuelleperson^.kommentar; ps2; END; {OF WHILE } IF gefunden THEN lauf:=aktuelleperson; END; BEGIN lauf:=aktuelleperson; gefunden:=FALSE; weitersuchen:=FALSE; si:=sgad[1]^.specialinfo; suchbuf:=si^.buffer; setwindowtitles(wp2,'Suche Datensatz ...',PTR(-1)); IF (sgad[15]^.flags AND selected) = SELECTED THEN ge:=TRUE ELSE ge:=FALSE; IF (sgad[16]^.flags AND selected) = SELECTED THEN ig:=TRUE ELSE ig:=FALSE; IF (sgad[17]^.flags AND selected) = SELECTED THEN an:=TRUE ELSE an:=FALSE; merk:=aktuelleperson; IF ig THEN FOR i:=1 TO length(suchbuf) DO suchbuf[i]:=upcase(suchbuf[i]); { groß klein ignore?} IF (sgad[2]^.flags AND selected) = SELECTED THEN suchname; IF ((sgad[3]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchvorname; IF ((sgad[4]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchstrasse; IF ((sgad[5]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchplz; IF ((sgad[6]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchort; IF ((sgad[7]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchtelefon; IF ((sgad[8]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchgeburtstag; IF ((sgad[9]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchfax; IF ((sgad[10]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchemail1; IF ((sgad[11]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchemail2; IF ((sgad[12]^.flags AND selected) = SELECTED) AND NOT gefunden THEN suchkommentar; IF gefunden THEN setwindowtitles(wp2,'Datensatz gefunden!',PTR(-1)) ELSE BEGIN aktuelleperson:=merk; setwindowtitles(wp2,'Kein Datensatz gefunden!',PTR(-1)); END; END; PROCEDURE Suchen; { -- Such-Prozedur -- } BEGIN SuchenOberfläche; t[1] := TagItem(WA_Innerwidth,ww); t[2] := TagItem(WA_Innerheight,wh); t[3] := Tagitem(WA_Top,suchwintop); t[4] := TagItem(WA_Left,suchwinleft); t[5].ti_Tag := WA_Title; t[5].ti_Data := "AddiPro - Suchen"; t[6] := TagItem(WA_Idcmp,IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_RAWKEY); t[7] := TagItem(WA_Flags,WFLG_CLOSEGADGET+WFLG_DRAGBAR+WFLG_ACTIVATE+WFLG_DEPTHGADGET+ WFLG_RMBTRAP+WFLG_SMART_REFRESH+WFLG_NOCAREREFRESH); t[8].ti_Tag := TAG_DONE; IF pubname <> "" THEN BEGIN t[8] := TagItem(WA_PubScreenFallBack, 1); t[9] := TagItem(WA_PubScreenName, LONG(pubname)); t[10].ti_Tag := TAG_DONE; END; wp2 := OpenWindowTagList(NIL,^t); IF wp2=NIL THEN exit; raster(wp2,0,1,322,148{-1}); clearq(wp2,6,4,311,127); Rahmen(wp2,6,4,312,128,TRUE); l:=addgList(wp2,gl2,0,-1,NIL); refreshglist(wp2^.firstgadget,wp2,NIL,-1); GT_Refreshwindow(wp2,NIL); dummy:=FALSE; REPEAT GetMessage(wp2,class,code,qual,gadnum); CASE Class OF IDCMP_CLOSEWINDOW: dummy:=TRUE; IDCMP_RAWKEY: IF qual in [32768,32769,32770,32772] THEN BEGIN CASE code OF 53,69:BEGIN {B, ESC} Butselecter(wp2,sgad[20]); dummy:=TRUE; END; 33 : BEGIN {S} ok:=ActivateGadget(sgad[1],wp2,NIL); END; 54 : BEGIN {N} deakt13; checkit(wp2,sgad[2]); END; 52 : BEGIN {V} deakt13; checkit(wp2,sgad[3]); END; 11 : BEGIN {ß} deakt13; checkit(wp2,sgad[4]); END; 25 : BEGIN {P} deakt13; checkit(wp2,sgad[5]); END; 24 : BEGIN {O} deakt13; checkit(wp2,sgad[6]); END; 20 : BEGIN {T} deakt13; checkit(wp2,sgad[7]); END; 18 : BEGIN {E} deakt13; checkit(wp2,sgad[8]); END; 35 : BEGIN {F} deakt13; checkit(wp2,sgad[9]); END; 1 : BEGIN {1} deakt13; checkit(wp2,sgad[10]); END; 2 : BEGIN {2} deakt13; checkit(wp2,sgad[11]); END; 55 : BEGIN {M} deakt13; checkit(wp2,sgad[12]); END; 32 : BEGIN {A} checkit(wp2,sgad[13]) allesakt; END; { 39 : BEGIN {K} Butselecter(wp2,sgad[14]); allesdeakt; END;} 36 : BEGIN {G} checkit(wp2,sgad[15]); END; 23 : BEGIN {I} checkit(wp2,sgad[16]); END; 57 : BEGIN {.} checkit(wp2,sgad[17]); END; 21 : BEGIN {Z} Butselecter(wp2,sgad[18]); blättern(aktuelleperson); ComputeFont(322,149); END; 22 : BEGIN {U} Butselecter(wp2,sgad[19]); startesuche; END; ELSE END; END; IDCMP_GadgetUP: CASE gadnum OF 2..12: deakt13; 13:allesakt; 18:BEGIN blättern(aktuelleperson); Computefont(322,149); END; 19:startesuche; 20:dummy:=TRUE ; ELSE END; ELSE END; UNTIL dummy; suchwintop:=wp2^.topedge; suchwinleft:=wp2^.leftedge; si:=sgad[1]^.specialinfo; suchbuf:=si^.buffer; err:=removegList(wp2,wp2^.firstgadget,-1); Fenster_zu(wp2); Freegadgets(gl2); ComputeFont(MainWinWidth,MainWinHeight); END; {$endif}