Anzeigefehler bei XSample_170() - warum

Moderator: Moderatoren

Antworten
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Anzeigefehler bei XSample_170() - warum

Beitrag von Hans Zethofer »

Guten Tag!

Nachdem ich mich einige Zeit mit dem Beispielprogramm bei eXPress++
v 1.9 herumgespielt habe und das Problem nicht lösen kann wende ich mich
an die Anwender die eXPress++ verwenden.

Das Sample habe ich für meine Zwecke umgeändert (nur die Datenbanken ausgetauscht). Im Prinzip funktioniert es genauso wie im DEMO nur das die Anzeige der Daten im rechten Bereich (Kunden, Rechnungskopfdaten, Rechnungspositionen) nicht beim Skippen gelöscht werden sondern einfach überschrieben werden. Das Problem liegt bei der Funktion DC_GetRefresh!

Code: Alles auswählen

FUNCTION XSample_170()

/* This example shows how to create a treeview browse of
   three relational databases. */

LOCAL GetList := {}, GetOptions, oTree, oTreeCustomer, oTreeInvoice, ;
      bInv, bItems, oScrn, oCustomerGroup, oInvoiceGroup, oInvoiceItemGroup

dbeSetDefault('DBFCDX')
USE CUSTOMER INDEX CUSTOMER
USE INVOICE INDEX INVOICE NEW
USE INVITEMS INDEX INVITEMS NEW

bInv := {|| INVOICE->(DC_SetScope(0,CUSTOMER->cust_nmbr)), ;
            INVOICE->(DC_SetScope(1,CUSTOMER->cust_nmbr)), ;
            INVOICE->(DC_DbGoTop()) }

bItems := {|| INVITEMS->(DC_SetScope(0,INVOICE->inv_nmbr)), ;
              INVITEMS->(DC_SetScope(1,INVOICE->inv_nmbr)), ;
              INVITEMS->(DC_DbGoTop()) }

@ 0,0 DCTREEROOT ;
  OBJECT oTree ;
  SIZE 40,23 ;
  ITEMMARKED {|oItem|_DisplayCustomerData(oItem,GetList)}

/*
DO WHILE !CUSTOMER->(DC_Eof())
  DCTREEITEM ;
     PARENT oTree ;
     CAPTION CUSTOMER->bill_name ;
      CARGO { 'CUSTOMER', CUSTOMER->(RecNo()) } ;
      OBJECT oTreeCustomer ;
      IMAGENORMAL ICON_CUSTOMER ;
      IMAGEMARKED ICON_CUSTOMER ;
      IMAGEEXPANDED ICON_CUSTOMER
  Eval(bInv)
  DO WHILE !INVOICE->(DC_Eof())
    DCTREEITEM ;
       PARENT oTreeCustomer ;
       CARGO { 'INVOICE', INVOICE->(RecNo()) } ;
       CAPTION INVOICE->inv_nmbr ;
       OBJECT oTreeInvoice ;
       IMAGENORMAL ICON_INVOICE ;
       IMAGEMARKED ICON_INVOICE ;
       IMAGEEXPANDED ICON_INVOICE

    Eval(bItems)
    DO WHILE !INVITEMS->(DC_Eof())
      DCTREEITEM ;
        PARENT oTreeInvoice ;
        CARGO {'INVITEMS', INVITEMS->(RecNo()) } ;
        CAPTION INVITEMS->part_nmbr + ' ' + INVITEMS->desc ;
        IMAGENORMAL ICON_INVITEM ;
        IMAGEMARKED ICON_INVITEM ;
        IMAGEEXPANDED ICON_INVITEM
      INVITEMS->(DC_DbSkip())
    ENDDO
    INVOICE->(DC_DbSkip())
  ENDDO
  CUSTOMER->(DC_DbSkip())
ENDDO
*/

@ 0,45 DCGROUP oCustomerGroup CAPTION 'Customer' SIZE 60,8 FONT '9.Courier Bold'
DCSETPARENT TO oCustomerGroup
@ 1,1 DCSAY {||CUSTOMER->bill_name}
@ 2,1 DCSAY {||CUSTOMER->bill_strt}
@ 3,1 DCSAY {||CUSTOMER->bill_city}
@ 4,1 DCSAY {||CUSTOMER->bill_state}
@ 5,1 DCSAY {||CUSTOMER->bill_zip}
@ 6,1 DCSAY {||CUSTOMER->phone}
@ 7,1 DCSAY {||CUSTOMER->contact}

DCSETPARENT TO
@ 9,45 DCGROUP oInvoiceGroup CAPTION 'Invoice' SIZE 60,6 FONT '9.Courier Bold'
DCSETPARENT oInvoiceGroup
@ 1,1 DCSAY {||'Ship Date: ' + Dtoc(INVOICE->ship_date)}
@ 2,1 DCSAY {||'Balance  : ' + Alltrim(Str(INVOICE->balance))}
@ 3,1 DCSAY {||'P.O. Nmbr: ' + INVOICE->po_nmbr}
@ 4,1 DCSAY {||'Terms    : ' + INVOICE->terms}
@ 5,1 DCSAY {||'How Ship : ' + INVOICE->how_ship}

DCSETPARENT TO
@ 16,45 DCGROUP oInvoiceItemGroup CAPTION 'Invoice Items' SIZE 60,7  FONT '9.Courier Bold'
DCSETPARENT oInvoiceItemGroup
@ 1,1 DCSAY {||'Description:' + Pad(INVITEMS->desc,45)}
@ 2,1 DCSAY {||'Qty Ordered:' + Alltrim(Str(INVITEMS->qty_ord))}
@ 3,1 DCSAY {||'Qty Shipped:' + Alltrim(Str(INVITEMS->qty_shp))}
@ 4,1 DCSAY {||'Qty B/O    :' + Alltrim(Str(INVITEMS->qty_bo))}
@ 5,1 DCSAY {||'Unit Issue :' + INVITEMS->u_issue}
@ 6,1 DCSAY {||'Unit Price :' + Alltrim(Str(INVITEMS->u_price))}

DCGETOPTIONS ;
   SAYFONT '7.Courier' ;
   SAYWIDTH 350 ;
   TABSTOP ;
   AUTORESIZE

DCREAD GUI ;
   FIT ;
   ADDBUTTONS ;
   OPTIONS GetOptions ;
   MODAL ;
   TITLE 'Customer/Invoice/Items Tree' ;
   EVAL {||BuildTree(oTree,bInv,bItems)}

RETURN nil

* ------------

STATIC FUNCTION BuildTree( oTree, bInv, bItems )

LOCAL oTreeCustomer, oTreeInvoice, oTreeInvoiceItem

oTree:lockUpdate(.t.)
DO WHILE !CUSTOMER->(DC_Eof())
  oTreeCustomer := XbpTreeViewItem():new()
  oTreeCustomer:caption := CUSTOMER->bill_name
  oTreeCustomer:cargo := { 'CUSTOMER', CUSTOMER->(RecNo()) }
  oTreeCustomer:image := ICON_CUSTOMER
  oTreeCustomer:expandedimage := ICON_CUSTOMER
  oTreeCustomer:markedimage := ICON_CUSTOMER
  oTreeCustomer:create()
  oTree:rootItem:additem(oTreeCustomer)
  Eval(bInv)
  DO WHILE !INVOICE->(DC_Eof())
    oTreeInvoice := XbpTreeViewItem():new()
    oTreeInvoice:caption := INVOICE->inv_nmbr
    oTreeInvoice:cargo := { 'INVOICE', INVOICE->(RecNo()) }
    oTreeInvoice:image := ICON_INVOICE
    oTreeInvoice:expandedimage := ICON_INVOICE
    oTreeInvoice:markedimage := ICON_INVOICE
    oTreeInvoice:create()
    oTreeCustomer:additem(oTreeInvoice)
    Eval(bItems)
    DO WHILE !INVITEMS->(DC_Eof())
      oTreeInvoiceItem := XbpTreeViewItem():new()
      oTreeInvoiceItem:caption := INVITEMS->part_nmbr + ' ' + INVITEMS->desc
      oTreeInvoiceItem:cargo := {'INVITEMS', INVITEMS->(RecNo()) }
      oTreeInvoiceItem:image := ICON_INVITEM
      oTreeInvoiceItem:expandedimage := ICON_INVITEM
      oTreeInvoiceItem:markedimage := ICON_INVITEM
      oTreeInvoiceItem:create()
      oTreeInvoice:additem(oTreeInvoiceItem)
      INVITEMS->(DC_DbSkip())
    ENDDO
    INVOICE->(DC_DbSkip())
  ENDDO
  CUSTOMER->(DC_DbSkip())
ENDDO
oTree:lockUpdate(.f.)

RETURN nil

* ------------

STATIC FUNCTION _DisplayCustomerData( oItem, GetList )

LOCAL a

a := oItem:cargo
(a[1])->(dbGoto(a[2]))
IF a[1]=='CUSTOMER'
  INVOICE->(dbGoBottom())
  INVOICE->(dbSkip())
  INVITEMS->(dbGoBottom())
  INVITEMS->(dbSkip())
ELSEIF a[1]=='INVOICE'
  INVITEMS->(dbGoBottom())
  INVITEMS->(dbSkip())
ENDIF

DC_GetRefresh(GetList)

RETURN nil
*** END OF EXAMPLE ***
wer kann mir dabei helfen das Anzeigeproblem zu lösen?
ps.Im Original-Demo von eXPress++ ist die Anzeige korrekt!

lg
Hans
Michael Rudrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 94
Registriert: Do, 22. Dez 2005 16:37

Refresh Problem

Beitrag von Michael Rudrich »

Hallo Hans!

Das Problem liegt darin, dass aufgrund einer Anomalie der Inhalt von
Group-Boxen u.U. nicht sauber refresh't werden.
Füge am Anfang Deines Programmes den folgenden Funktionsaufruf
ein:
DC_GroupBoxFix(.t.)

Dann sollte es funzen :)

Beschreibung und warum das alles entnimmst Du der Doku der Funktion!

Servus
Michl
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Beitrag von Hans Zethofer »

funktioniert jetzt einwandfrei, danke Michl

lg
Hans
Antworten