Code: Alles auswählen
* *
* *
* *
* *
* letzte Änderung:19.02.2011 *
********************************************************************************
* titelsuchen.prg Suchen von Titel/Interpreten im Vostamm *
* (c) Manfred Kunz Dezember 2008 *
********************************************************************************
#include "appevent.ch"
#include "common.ch"
#include "q:\include\inkey.ch"
#include "Xbp.ch"
********************************************************************************
PROCEDURE titelsuchen()
LOCAL aPbSize := {100,20}
LOCAL aSleSize := {300,20}
LOCAL aTextSize := {70,20}
LOCAL lRahmen := .T.
LOCAL nEvent := 0
LOCAL mp1 := 0
LOCAL mp2 := 0
LOCAL nRahmenEingabeHoehe := 40
LOCAL oBrowse := NIL
LOCAL oDialog := NIL
LOCAL oMaske := masken():new()
LOCAL oPbEnde := NIL
LOCAL oPbStart := NIL
LOCAL oRahmenBrowse := NIL
LOCAL oRahmenEingabe := NIL
LOCAL oText := NIL
LOCAL oThreadF4 := threadf4():new()
LOCAL oVideoF4Temp := videof4temp():new()
LOCAL oXbp := NIL
MEMVAR oVostamm
oVostamm:felderleeren()
oDialog := DialogFenster():new()
oDialog:title := "Interpret-/Titelsuche"
oDialog:create()
oDialog:setFrameState(XBPDLG_FRAMESTAT_MAXIMIZED)
oRahmenEingabe := rahmen():new(oDialog,,{5,oDialog:clientsize[2]-nRahmenEingabeHoehe},{oDialog:clientsize[1]-10,nRahmenEingabeHoehe},,,lRahmen)
oRahmenEingabe:create()
oRahmenBrowse := rahmen():new(oDialog,,{5,5},{oDialog:clientsize[1]-10,oDialog:clientsize[2]-nRahmenEingabeHoehe},,,lRahmen)
oRahmenBrowse:create()
oText := feldtexte():new(oRahmenEingabe,,{1,5},aTextSize)
oText:caption := "Interpret:"
oText:create()
oVostamm:oV_Darstell := mk_sle():new(oRahmenEingabe,,{oText:currentsize()[1]+oText:currentPos()[1]+5,5},aSleSize)
oVostamm:oV_Darstell:bufferlength := Len(oVostamm:v_darstell)
oVostamm:oV_Darstell:cuebanner := "Interpret eingeben"
oVostamm:oV_Darstell:datalink := {|x| IIf(x==NIL, oVostamm:v_darstell, oVostamm:v_darstell := x ) }
oVostamm:oV_Darstell:keyboard := {|nKey,x,o| geaendert("v_darstell",oVostamm,oPbStart) }
oVostamm:oV_Darstell:create()
oText := feldtexte():new(oRahmenEingabe,,{oVostamm:oV_darstell:currentsize()[1]+oVostamm:oV_darstell:currentPos()[1],5},aTextSize)
oText:caption := "Titel:"
oText:create()
oVostamm:oV_Titel := mk_sle():new(oRahmenEingabe,,{oText:currentsize()[1]+oText:currentPos()[1]+5,5},aSleSize)
oVostamm:oV_Titel:bufferlength := Len(oVostamm:v_Titel)
oVostamm:oV_Titel:cuebanner := "Titel eingeben"
oVostamm:oV_Titel:datalink := {|x| IIf(x==NIL, oVostamm:v_Titel, oVostamm:v_Titel := x ) }
oVostamm:oV_Titel:keyboard := {|nKey,x,o| geaendert("v_titel",oVostamm,oPbStart) }
oVostamm:oV_Titel:create()
oPbStart := pushButton():new(oRahmenEingabe,,{oVostamm:oV_titel:currentsize()[1]+oVostamm:oV_titel:currentPos()[1]+10,5},aPbSize)
oPbStart:activate := {|| IF(! oThreadF4:lGestartet, oVideoF4Temp:schliesse_datenbank(),oVideoF4Temp:db_oeffnen(,,.T.),oThreadF4:start("suchen",oThreadF4,oPbStart,oPbEnde,oBrowse,oVostamm)),oThreadF4:lGestartet := .F.)}
oPbStart:caption := "Start"
oPbStart:create()
oPbStart:disable()
oPbEnde := pushButton():new(oRahmenEingabe,,{oPbStart:currentsize()[1]+oPbStart:currentPos()[1],5},aPbSize)
oPbEnde:caption := "Ende"
oPbEnde:create()
oBrowse := mk_browseDb():new(oRahmenBrowse,,{5,5},{oRahmenBrowse:currentsize()[1]-10,oRahmenBrowse:currentsize()[2]-20})
oBrowse:create()
IF oMaske:leseBrowseFelder("videof4")
oVideoF4Temp:db_oeffnen(,,.T.) // muß direkt vor der Erzeugung der Spalten stehen
oBrowse:erzeugeSpalten(oMaske,{XBP_PP_COMPOUNDNAME,"8.Arial"} )
SetAppFocus(oVostamm:oV_Darstell)
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
ENDIF
oDialog:destroy()
oVideoF4Temp:schliesse_datenbank()
RETURN
********************************************************************************
PROCEDURE geaendert(cWoher,oVostamm,oPbStart)
IF Upper(cWoher) == "V_DARSTELL"
IF ! Empty(oVostamm:oV_Darstell:editbuffer())
oPbStart:enable()
oVostamm:oV_titel:disable()
ELSE
oVostamm:oV_Titel:enable()
oPbStart:disable()
ENDIF
ELSE
IF ! Empty(oVostamm:oV_titel:editbuffer())
oPbStart:enable()
oVostamm:oV_darstell:disable()
ELSE
oVostamm:oV_darstell:enable()
oPbStart:disable()
ENDIF
ENDIF
RETURN
********************************************************************************
PROCEDURE suchen(oThread,oPbStart,oPbEnde,oBrowse,objekt)
LOCAL cSuch
LOCAL lWeicheSuche := .F.
LOCAL oGenre := genre():new()
LOCAL oSysteme := systeme():new()
LOCAL oVideoF4Temp := videof4temp():new()
LOCAL oVo := kassette():new()
LOCAL oVostamm := fstamm():new()
MEMVAR oSysPara
oThread:lGestartet := .T.
oPbEnde:disable()
oPbStart:setCaption("Abbruch")
oGenre:db_oeffnen()
oSysteme:db_oeffnen()
oVo:db_oeffnen("idvostamm")
oVostamm:db_oeffnen()
oVideoF4Temp:db_oeffnen()
(oVostamm:nArea)->(DbSetRelation((oGenre:nArea) ,{|| Str((oVostamm:nArea)->idgenre,8,0) },,"id" ) )
(oVostamm:nArea)->(DbSetRelation((oSysteme:nArea),{|| Str((oVostamm:nArea)->idsystem,8,0) },,"id" ) )
IF ! Empty(objekt:oV_Darstell:editbuffer())
oVostamm:indexfocus("darst")
IF "*" $ objekt:oV_Darstell:editbuffer() .OR. "?" $ objekt:oV_darstell:editbuffer()
objekt:oV_darstell:getData()
objekt:v_darstell := StrTran(Trim(objekt:v_darstell)," " ,"?") // ein evtl. "*" wird gegen ein "?" ausgetauscht wegen OrdWildSeek
oPbStart:disable()
oPbStart:setCaption("Suche..")
(oVostamm:nArea)->(OrdWildSeek(Upper(objekt:v_darstell)))
oPbStart:setCaption("Abbruch")
oPbStart:enable()
lWeicheSuche := .T.
ELSE
cSuch := ConvToAnsiCP(Upper(objekt:oV_darstell:editBuffer()))
(oVostamm:nArea)->(DbSetScope(SCOPE_TOP ,cSuch))
(oVostamm:nArea)->(DbSetScope(SCOPE_BOTTOM,cSuch))
ENDIF
ELSE
oVostamm:indexfocus("titel")
ENDIF
IF ! lWeicheSuche
IF (oVostamm:nArea)->(Eof())
oSysPara:oMessage:anzeigen("Es wurden keine Einträge gefunden zum Suchbegriff")
oThread:lGestartet := .F.
ENDIF
ENDIF
DO WHILE .T.
Sleep(0)
IF ! oThread:lGestartet
EXIT
ENDIF
erstelleSatz(oVideoF4Temp,oBrowse,oVostamm,oVo,oSysteme,oGenre)
IF lWeicheSuche
IF (oVostamm:nArea)->(Found())
(oVostamm:nArea)->(OrdWildSeek())
ELSE
oThread:lGestartet := .F.
ENDIF
ELSE
(oVostamm:nArea)->(Dbskip())
IF (oVostamm:nArea)->(Eof())
oThread:lGestartet := .F.
ENDIF
ENDIF
ENDDO .T.
(oVostamm:nArea)->(DbClearRelation())
oVideoF4Temp:schliesse_datenbank(.T.) // klappt das hier mit dem .T.
oPbStart:setCaption("Start")
oPbEnde:enable()
oThread:lGestartet := .F.
RETURN
********************************************************************************
PROCEDURE erstelleSatz(oVideoF4Temp,oBrowse,oVostamm,oVo,oSysteme,oGenre)
(oVo:nArea)->(DbClearScope())
(oVo:nArea)->(DbSetScope(SCOPE_BOTH,Str((oVostamm:nArea)->id,8,0)))
DO WHILE ! (oVo:nArea)->(Eof())
(oVideoF4Temp:nArea)->(DbAppend())
(oVideoF4Temp:nArea)->datumleih := (oVo:nArea)->datumleih
(oVideoF4Temp:nArea)->datumrueck := (oVo:nArea)->datumrueck
(oVideoF4Temp:nArea)->ean := (oVo:nArea)->ean
(oVideoF4Temp:nArea)->genre := (oGenre:nArea)->bez
(oVideoF4Temp:nArea)->interpret := (oVostamm:nArea)->v_darstell
(oVideoF4Temp:nArea)->lagertg := Date()-(oVo:nArea)->datumein+1
(oVideoF4Temp:nArea)->lagernr := (oVo:nArea)->lagernr
(oVideoF4Temp:nArea)->preis := (oVo:nArea)->preissoll
(oVideoF4Temp:nArea)->reserve := (oVo:nArea)->reserve
(oVideoF4Temp:nArea)->system := (oSysteme:nArea)->bez
(oVideoF4Temp:nArea)->titel := (oVostamm:nArea)->v_titel
(oVideoF4Temp:nArea)->(DbGoTop())
oBrowse:refreshAll()
(oVo:nArea)->(Dbskip())
ENDDO
RETURN