DBedit / TBrowse Einzelne Zeilen einfärben

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
denjo303
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 18. Jul 2011 18:10

DBedit / TBrowse Einzelne Zeilen einfärben

Beitrag von denjo303 »

Hi Leute,

ich mal wieder,

gibts eine möglichkeit einzelne Zeilen Fest einzufärben? Also anhand eines Datenbankfeldes?

Mein Ansatz wäre: Ich Modifiziere das TBrowse Objekt so das er beim einfügen einer Zeile zuerst schaut ob das besagte DB Feld .t. oder .f. hat. Dann die Farbe setzen und alles wird Prima... :doubt:

Es geht darum das eine Auftragsdatenbank besteht und die erledigten Aufträge nur mit einer Flag Markiert werden(Feld) und nicht aus der Datenbank verschwinden. Das hat Revisionstechnische gründe.

grüsse euer Anfänger
Über 4.000.000 Menschen hören Hiphop. Schreib dich nicht ab, lern reden und gehen.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DBedit / TBrowse Einzelne Zeilen einfärben

Beitrag von brandelh »

Hi,

schau mal unter TBrowse():colorRect() das kannst du bestimmt so einstellen, dass es die Zeile je nach Inhalt einfärbt.

So habe ich meine Cursorzeile komplett eingefärbt (statt nur dem Cursorfeld) :

Code: Alles auswählen

otab:colorRect( {otab:rowpos,1,otab:rowpos,otab:colcount}, {2,3} )                 // Cursorzeile hervorheben
t := inkey(0)
otab:colorRect( {otab:rowpos,1,otab:rowpos,otab:colcount}, {1,2} )                 // Cursorzeile auf Standard !
Gruß
Hubert
Benutzeravatar
denjo303
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 18. Jul 2011 18:10

Re: DBedit / TBrowse Einzelne Zeilen einfärben

Beitrag von denjo303 »

wo setzt man das?? in der DBedit Funktion?
Über 4.000.000 Menschen hören Hiphop. Schreib dich nicht ab, lern reden und gehen.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DBedit / TBrowse Einzelne Zeilen einfärben

Beitrag von brandelh »

Hi,

ich arbeite nicht mit DBEDIT(), was selbst ja aus TBrowse() zusammengebaut wurde.
Ich rufe es nach stabilize auf, da dann die Daten ruhig stehen, aber du müsstest im Prinzip wissen welcher
Datensatz wo angezeigt wird und danach dann den Färbungsbereich ermitteln. ODER ?

Ich nutze ja GUI und dort gibt es XbpBrowse() dessen Spalten mit XbpColumn() erstellt werden,
und diese nutzen XbpColumn():colorBlock zur Einfärbung je nach Zellinhalt.

Und das gibt es auch unter TBrowse :!: (man ist das lange her ... ;-) )
TBColumn():colorBlock Farbe einer Tabellenspalte in Abhängigkeit des anzuzeigenden Werts ändern.
das passt besser zu deiner Aufgabe.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: DBedit / TBrowse Einzelne Zeilen einfärben

Beitrag von AUGE_OHR »

denjo303 hat geschrieben:wo setzt man das?? in der DBedit Funktion?
wie Hubert schon sagte ist ein DBEDIT() in Xbase++ ein Tbrowse().
kopiere c:\ALASKA\XPPW32\Source\SYS\dbedit.prg in dein Projekt Verzeichniss und modifiziere es so

Code: Alles auswählen

/* 
 * TBrowse ist stabil
 */
IF oTBrowse:stable  
   IF MyDBF->Color = .T.
      oTBrowse:COLORRECT({oTBrowse:ROWPOS, 1, oTBrowse:ROWPOS, oTBrowse:COLCOUNT}, {5, 5})
   ELSE
      oTBrowse:COLORRECT({oTBrowse:ROWPOS, 1, oTBrowse:ROWPOS, oTBrowse:COLCOUNT}, {2, 5})
   ENDIF
   // evtl.
   oTBrowse:hilite()
gruss by OHR
Jimmy
Benutzeravatar
denjo303
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 18. Jul 2011 18:10

Re: DBedit / TBrowse Einzelne Zeilen einfärben

Beitrag von denjo303 »

AUGE_OHR:

genau sowas :D

Aber kann man jede zeile im vorhinein schon einfärben?

also das man schon sieht welche markiert sind und nicht erst beim drüber scrollen
Über 4.000.000 Menschen hören Hiphop. Schreib dich nicht ab, lern reden und gehen.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DBedit / TBrowse Einzelne Zeilen einfärben

Beitrag von brandelh »

Ich habe doch geschrieben, dass dafür der TBColumn():colorBlock da ist.
Im Quellcode muss es eine Stelle geben in der die TBColumn() hinzugefügt werden.
Jeder dieser TBColumn() musst du mit :colorBlock := {|| if MyAlias->FeldTyp = ??? , aFarbeTyp1, aFarbeTyp2 }
die Farbe unterschieben. Die genau Syntax habe ich nicht im Kopf, aber du kannst einfach auf ein Feld mit alias zugreifen
(notfalls field->Feld????) damit alle Spalten die gleiche Farbe bekommen.

PS: normalerweise sieht der codeblock so aus:

Code: Alles auswählen

{| Feldinhalt | iif( feldinhalt = ??? , aFarbeBeiJA, aFarbeBeiNein ) }
aber man kann auch direkt auf ein Feld gehen, der Datensatz ist immer der aktuelle:

Code: Alles auswählen

{|| iif( field->ZeilenTyp="???" , aFarbeBeiJA, aFarbeBeiNein ) }
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: DBedit / TBrowse Einzelne Zeilen einfärben

Beitrag von UliTs »

Ich habe DBEdit so erweitert, dass ich für jede Spalte beim Aufruf Codeblöcke für die Farben angeben kann:

Code: Alles auswählen

PROCEDURE UTsDbEdit( nTop,nLeft,nBottom,nRight,aColumns,bcUserFunc,acPicture,
                     acHeading,acHeadSep,acColSep,acFootSep,acFooting,cColor,
                     abColorBlock,nRowPos )
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: DBedit / TBrowse Einzelne Zeilen einfärben

Beitrag von AUGE_OHR »

denjo303 hat geschrieben:Aber kann man jede zeile im vorhinein schon einfärben?
also das man schon sieht welche markiert sind und nicht erst beim drüber scrollen
du hast o:Colorblock() für jede Columne und o:ColorRect() der dir einen Bereich einfärbt.

der o:Colorblock() müsste, wie der Name schon sagt, ein Codeblock enthalten der darüber entscheidet welche Farbe er für eine Cell nehmen soll.

Code: Alles auswählen

AADD( aDBF, { { || ABZU->ABZUDATE  }, 5, "Date"    , "", "", "" } )
AADD( aDBF, { { || ABZU->ABZUMODUS }, 4, "Modus"   , "IF(ABZU->ABZUMODUS='AUS',{7,1},{5,1})", "", "" } )
AADD( aDBF, { { || ABZU->ABZUVK    }, 5, "Vk"      , "IF(ABZU->ABZUVK>0,{7,1},{1,0})", "", "" } )
...

      oCol := XBPCOLUMN() :new( oBrowse,,,, aPP3 )

      IF VALTYPE( aDBF[ i, 1 ] ) == "C"                // hier datalink
         oCol:dataLink := &( "{||" + aDBF[ i, 1 ] + "}" )
      ELSE
         oCol:dataLink := aDBF[ i, 1 ]
      ENDIF

      IF EMPTY( aDBF[ i, 4 ] )                         // colorblock
      ELSE
         // hier Colorblock
         IF VALTYPE( aDBF[ i, 4 ] ) == "C"
            oCol:colorBlock := &( "{||" + aDBF[ i, 4 ] + "}" )
         ELSEIF VALTYPE( aDBF[ i, 4 ] ) == "B"
            oCol:colorBlock := aDBF[ i, 4 ]
         ENDIF
      ENDIF
der o:ColorRect() ist nun der "hilite Cursor" welcher sich über alle Columne erstreckt.
gruss by OHR
Jimmy
Antworten