@ DCBROWSE und die Möglichkeiten ?

Moderator: Moderatoren

@ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Mi, 20. Apr 2016 10:36

Guten Morgen

ich probiere gerade mit Rogers Express++

Habe hier ein Beispiel von ihm an dem ich probiere !

Code: Alles auswählen
#include "Dbedit.ch"
#include "Inkey.ch"
#include "dcdialog.ch"
#include "xbp.ch"

#pragma library("c:\alaska\exp20\lib\dclipx.lib")

 PROCEDURE main

 LOCAL GetList := {}, GetOptions, oTabPage1, oTabPage2, ;
       oBrowse, cAlias, aDirectory, oDirectory

 USE COLLECT NEW SHARED

 /* ---- Tab Page #1 ---- */

 @ 3,3 DCTABPAGE oTabPage1 CAPTION 'Browse' ;
   SIZE 142,39

 cAlias := "COLLECT"

 @ 2,2 DCBROWSE oBrowse PARENT oTabPage1  ;
       DATA cAlias SIZE 140,35 FREEZELEFT { 1, 2 } FONT "14.Courier"

 DCBROWSECOL FIELD COLLECT->descrip ;
   HEADER "Description" PARENT oBrowse

 DCBROWSECOL FIELD COLLECT->type ;
   HEADER "Type" PARENT oBrowse

 DCBROWSECOL FIELD COLLECT->sub_type ;
   HEADER "SubType" PARENT oBrowse

 DCBROWSECOL FIELD COLLECT->location ;
   HEADER "Location" PARENT oBrowse

 DCBROWSECOL DATA {|a|a:={'Yes','No','Not Sure'},a[COLLECT->for_sale+1]} ;
   HEADER "For Sale?" PARENT oBrowse

 DCBROWSECOL FIELD COLLECT->date_orig ;
   HEADER "Orig Date" PARENT oBrowse

 DCBROWSECOL FIELD COLLECT->date_acqu ;
   HEADER "Acqu Date" PARENT oBrowse

 DCBROWSECOL FIELD COLLECT->orig_price ;
   HEADER "Acqu Price" PARENT oBrowse

 DCBROWSECOL FIELD COLLECT->appr_value ;
   HEADER "Appr Value" PARENT oBrowse

 DCBROWSECOL FIELD COLLECT->condition ;
   HEADER "Condition" PARENT oBrowse

 DCBROWSECOL DATA {||IIF(COLLECT->original,'Yes','No')} ;
   HEADER "Orig Owner?" PARENT oBrowse


 /* ---- Tab Page #2 ---- */

 @  0,0 DCTABPAGE oTabPage2 CAPTION 'Directory' ;
    RELATIVE oTabPage1

 aDirectory := Directory()

 @ 2,2 DCBROWSE oDirectory PARENT oTabPage2 ;
       DATA aDirectory SIZE 55,9

 DCBROWSECOL ELEMENT 1 HEADER "Name" PARENT oDirectory WIDTH 10

 DCBROWSECOL ELEMENT 2 HEADER "Size" PARENT oDirectory WIDTH 8

 DCBROWSECOL ELEMENT 3 HEADER "Date" PARENT oDirectory WIDTH 8

 DCBROWSECOL ELEMENT 4 HEADER "Time" PARENT oDirectory WIDTH 8

 DCREAD GUI ;
   TITLE "My COLLECTION" ;
   FIT ;
   ADDBUTTONS ;
   EVAL {||oBrowse:hide(), oBrowse:show()}

 RETURN
 


Dazu hätte ich an die Express++ User mal eine Frage

kann ich damit die einzelnen Tabellen Zeilen wegen der Übersichtlichkeit abwechselnd den Hintergrund verschiedenfarbig hinterlegen ?

Falls ja wie würde das in dem Beispiel ausschauen -> Danke

Mfg. Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon AUGE_OHR » Mi, 20. Apr 2016 10:51

xbaseklaus hat geschrieben:ich probiere gerade mit Rogers Express++

kann ich damit die einzelnen Tabellen Zeilen wegen der Übersichtlichkeit abwechselnd den Hintergrund verschiedenfarbig hinterlegen ?
c:\exp20\Samples\Browse\Zebra.prg
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10260
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon AUGE_OHR » Mi, 20. Apr 2016 10:53

AUGE_OHR hat geschrieben:
xbaseklaus hat geschrieben:ich probiere gerade mit Rogers Express++

kann ich damit die einzelnen Tabellen Zeilen wegen der Übersichtlichkeit abwechselnd den Hintergrund verschiedenfarbig hinterlegen ?
Code: Alles auswählen
c:\exp20\Samples\Browse\Zebra.prg
c:\exp20\Samples\Browse\browtype.prg
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10260
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Mi, 20. Apr 2016 11:04

AUGE_OHR hat geschrieben:
AUGE_OHR hat geschrieben:
xbaseklaus hat geschrieben:ich probiere gerade mit Rogers Express++

kann ich damit die einzelnen Tabellen Zeilen wegen der Übersichtlichkeit abwechselnd den Hintergrund verschiedenfarbig hinterlegen ?
Code: Alles auswählen
c:\exp20\Samples\Browse\Zebra.prg
c:\exp20\Samples\Browse\browtype.prg


DANKE .... :blob8:

habs in mein Beispiel eingebaut funktioniert 1A !
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Mi, 20. Apr 2016 11:16

Code: Alles auswählen
@ 2,2 DCBROWSE oBrowse PARENT oTabPage1  ;
       DATA cAlias SIZE 140,35 FREEZELEFT { 1, 2 } FONT "14.Courier" ZEBRA {|lEven|Jd_BrowseZebraColor(lEven)}


Code: Alles auswählen
Function Jd_BrowseZebraColor(lEven)

LOCAL aRet

if lEven
  aRet := {GRA_CLR_BLACK,GraMakeRGBColor({255,255,170})}
else
  aRet := {GRA_CLR_BLACK,GraMakeRGBColor({159,231,176})}
endif

Return aRet


um den ZEBRA Effekt zu erhalten habe ich ja jetzt folgendes eingefügt - passt :-)

Wie mache ich das, wenn ich jetzt noch die Zeile in einer anderen Hintergrund - Farbe haben will wo der Cursor grade steht ?
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon Wolfgang Ciriack » Mi, 20. Apr 2016 15:42

Schau dir mal die Funktionen

DC_BrowPres() - für allgemeine Einstelungen - und DC_BrowseSort() - für die Header-Einstellungen an.
Z.B.

DC_BrowPres({ ;
{XBP_PP_COMPOUNDNAME, cMyBrwFont }, ;
{XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK }, ;
{XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE}, ;
{XBP_PP_HILITE_FGCLR, GRA_CLR_BLACK }, ;
{XBP_PP_HILITE_BGCLR, GraMakeRGBColor({255,204,153}) }, ;
{XBP_PP_COL_DA_ROWHEIGHT, nMyBrwHoehe }, ;
{XBP_PP_COL_DA_CELLHEIGHT, nMyBrwHoehe }, ;
{XBP_PP_COL_HA_COMPOUNDNAME, cMyHeadFont } ;
})

Dann bei DCBROWSE einfach ein

PRESENTATION DC_BrowPres() ;


*** Farbe für Browse-Header mit Sort setzen
DC_BrowseSort( { GRA_CLR_BLACK, ;
GRA_CLR_HEADNORMAL , ;
GRA_CLR_WHITE, ;
GRA_CLR_HEADSORTBAR , ;
NIL, ;
NIL, ;
GRA_CLR_WHITE, ;
GRA_CLR_HEADSELECTED })

Bei der Column dann z.B.ein
SORT bMySortBlock LEFTBUTTON ;
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2232
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Mi, 20. Apr 2016 17:47

Ok , wenn ich die aktuelle Zeile farbig will geht das am besten mit:

Code: Alles auswählen
CURSORMODE (XBPBRW_CURSOR_ROW)
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon Manfred » Mi, 20. Apr 2016 17:56

das nimmt Dir aber die Möglichkeit später evtl. einzelne Felder zu editieren.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 16210
Registriert: Di, 29. Nov 2005 17:58
Wohnort: Kreis Wesel

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Mi, 20. Apr 2016 18:22

Manfred hat geschrieben:das nimmt Dir aber die Möglichkeit später evtl. einzelne Felder zu editieren.


Das stimmt , aber es soll im Browse auch nicht editiert werden ... :-)

Ich mach das mit DCTABPAGE .. auf der nächsten TABPAGE wird dann der Aktuelle Datensatz vom Browse mit DCSAY / GET geändert

Mfg. Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Do, 21. Apr 2016 8:16

Guten Morgen,

Also wenn ich der Browse TabPage1 auf die TabPage2 wechsle um den Datensatz anzuzeugen auf dem ich im Browse stehe funktioniert das nicht ... er steht in TabPage 2 immer auf
dem ersten ?

Code: Alles auswählen
@ 4,6 DCSAY "Description" get collect->descrip PARENT oTabPage2


wenn ich das mit DBedit gemacht habe war er bei einer Anzeige mit SAY/GET immer auf dem Datensatz in dem er in DBedit gerstanden ist ...

das scheint mit Express++ anders zu sein ... wie muß ich das dann jetzt machen ?

Mfg Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Do, 21. Apr 2016 8:17

xbaseklaus hat geschrieben:Guten Morgen,

Also wenn ich von der Browse TabPage1 auf die TabPage2 wechsle um den Datensatz anzuzeugen auf dem ich im Browse stehe funktioniert das nicht ... er steht in TabPage 2 immer auf
dem ersten ?

Code: Alles auswählen
@ 4,6 DCSAY "Description" get collect->descrip PARENT oTabPage2


wenn ich das mit DBedit gemacht habe war er bei einer Anzeige mit SAY/GET immer auf dem Datensatz in dem er in DBedit gerstanden ist ...

das scheint mit Express++ anders zu sein ... wie muß ich das dann jetzt machen ?

Mfg Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Do, 21. Apr 2016 9:29

Das schlimme ist wenn ich von Tabpage1 auf 2 wechsle schreibt er mir auch gleichzeitig den 1.Datensatz in die Datenbank wo ich gerade in meinem Browse stehe ...

???
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon Tom » Do, 21. Apr 2016 9:49

Code: Alles auswählen
@ DCBROWSE ... ITEMMARKED (oder ITEMSELECTED, je nachdem, ob durch einen einfachen oder einen Doppelklick die zweite Tabpage aktualisiert werden soll) {||DC_GetRefresh(oTab2)}


Dies bewirkt, dass die zweite Tabpage mit jedem einfachen oder mit jedem Doppelklick aktualisiert wird, also die Daten neu eingelesen werden. Dadurch würdest Du dort jederzeit die Daten zum aktuellen Satz aus dem Browse sehen.

ABER.

Ich würde so nicht arbeiten, also auf der Tabpage direkt auf der Tabelle, weil Du dann auf Feldebene für das Locking sorgen und bei jedem Fokuswechsel prüfen müsstest, ob etwas mit Daten passiert ist. Stattdessen würde ich die Inhalte des jeweiligen Datensatzes in Variablen oder in ein Array einlesen und diese zur Bearbeitung anbieten. Die Felder auf der Tabpage würde ich mit EDITPROTECT sperren und über eine Schaltfläche in den Bearbeiten-Modus wechseln:

Code: Alles auswählen
lEdit := .F.
@ 1,1 DCSAY "Name:" GET cName EDITPROTECT {||!lEdit} GETOBJECT oErstesFeld
..
@ 20,1 DCPUSHBUTTON CAPTION {||IF(lEdit,'Speichern','Bearbeiten')} SIZE 15,1 ACTION {||lEdit := !lEdit,IF(lEdit,SetAppFocus(oErstesFeld),NIL)}

* und auf Tab1 (vermutlich auch noch an anderen Stellen erforderlich):

@ x,y DCTABPAGE ... WHEN {||!lEdit} // dies verhindert, dass im Browse gearbeitet werden kann, während das Bearbeiten aktiv ist.


Man könnte auch dafür sorgen, dass der Bearbeiten-Modus eingeschaltet wird, sobald man auf Tab2 wechselt:

Code: Alles auswählen
@ 0,0 DCTABPAGE oTab2 GOTFOCUS {||lEdit := .T.}

und umgekehrt auf Tab1, dass Daten gespeichert werden, falls vorher das Bearbeiten aktiviert war:

Code: Alles auswählen
... oTab1 GOTFOCUS {||SaveData(),lEdit := .F.}


Entsprechend dann auch beim Verlassen des Dialogs usw.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6706
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Do, 21. Apr 2016 10:17

@ TOM genau das habe ich verzweifelt gesucht . DANKE

Deine Anmerkungen sind echt zu bedenken ...

Ich sehe schon ... mit Express++ arbeiten ist echt viel zu beachten ... und man sollte vorher genau überlegen wie man alles macht um sich nicht in eine Sackgasse zu programmmieren


Kann man eigentlich auf einer TabPage noch mehrere sozusagen UNTER-TabPages anlegen ? Ist das vom Aufwand her sinnvoll ?

Mfg. Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon Tom » Do, 21. Apr 2016 10:44

Kann man eigentlich auf einer TabPage noch mehrere sozusagen UNTER-TabPages anlegen ? Ist das vom Aufwand her sinnvoll ?


Klar. Du kannst fast alles auf allem machen.

Code: Alles auswählen
@ 1,1 DCTABPAGE oSubTab1 ... PARENT oTab2


erzeugt eine neue Tab auf einer anderen.

BTW, so:

Code: Alles auswählen
@ x,y DCTABPAGE oTab
DCSETPARENT TO oTab
... weitere Controls
DCSETPARENT TO


erspart Dir, immer den Parent anzugeben, und wenn sich dieser ändert, sind nur zwei Zeilen Code zu überarbeiten.

Ich empfehle Dir dringend, die Samples und die dazugehörigen Codes anzuschauen, außerdem die Doku z.B. zu DCBROWSE, DCTABPAGE, DCSAYGET usw. Da ist eine Menge möglich.

Und übrigens gibt es in eXpress++ eine Funktion (von vielen), die da "DC_AutoLockEditedRecord()" heißt. Wenn sie mit .T. aufgerufen wird, sperrt eXpress++ solche Felder, die z.B. über DCSAY/GET bearbeitet werden, im Moment der Bearbeitung automatisch. Allerdings ist das mit großer Vorsicht zu genießen.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6706
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Do, 21. Apr 2016 11:51

Ok , wenn ich dann einen Refresh vom geänderten im oBrowse haben will muß ich folgendes einfügen: VALID

Code: Alles auswählen
 @ 4,6 DCSAY "Description" get collect->descrip PARENT oTabPage2 VALID {||DC_GetRefresh(obrowse)}


Was mich jetzt stört , warum ist wenn ich ins DCsay/Get Feld klicke auf oTabPage2 der CURSOR so komisch ... d.h. ein schwarzes Rechteck hinter dem der Cursor blinkt

kann man das ändern das es so ist wie beim Clipper Code ? Ich hoffe es ist verständlich was ich meine.

Mfg. Klaus
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon Tom » Do, 21. Apr 2016 11:57

Äh. Warum tust Du das? DC_GetRefresh(oBrowse) bewirkt, dass das Browse refresht wird: Die Daten werden neu eingelesen, die Anzeige wird stabilisiert. Das passiert dann mit jedem Tipper im Feld. Sinnvoller wäre das hier:

Code: Alles auswählen
@ x,y DCSAY ... GET ... LOSTFOCUS {||oBrowse:RefreshCurrent()}


Das aktualisiert die jeweilige Zeile im Browse, aber nur nach dem Verlassen des Eingabefelds. Alternativ kannst Du auch einfach bei der Browse-Tabpage das hier machen:

Code: Alles auswählen
@ x,y DCTABPAGE ... GOTFOCUS {||oBrowse:RefreshAll()}


Dann wird das Browse mit jedem Wechsel auf die Tabpage aktualisiert, auf der es sich befindet.

Edit: Der Valid-Codeblock muss .T. (Feld ist in Ordnung) oder .F. zurückliefern. Deiner liefert NIL.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6706
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: @ DCBROWSE und die Möglichkeiten ?

Beitragvon xbaseklaus » Do, 21. Apr 2016 13:21

Was mich jetzt stört , warum ist wenn ich ins DCsay/Get Feld klicke auf oTabPage2 der CURSOR so komisch ... d.h. ein schwarzes Rechteck hinter dem der Cursor blinkt
kann man das ändern das es so ist wie beim Clipper Code ? Ich hoffe es ist verständlich was ich meine.


Das hat sich erledigt , war nur der Einfügemodus ... keine Ahnung warum ich nicht gemerkt habe dass der an war :-(
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN


Zurück zu eXpress++

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 1 Gast