Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

BlackTDN :: Tips & Tricks ~ ADVPL Estendendo a Class dbTree

Tive certa dificuldade, não por falta de conhecimento, em estender “naturalmente” a classe dbTree. Violação de acesso foi o principal problema que encontrei. Mas um pouco de criatividade e temos a derivada de dbTree. Usei como referência a extensão criada por Renato de Biachi. Segue o exemplo:

   1: #include "protheus.ch"
   2: #include "dbtree.ch"
   3:  
   4: #xtranslate USER PROCEDURE <p> => PROCEDURE U_<p>
   5:  
   6: #xcommand DEFINE TExTree [<oTree>];
   7:             [ FROM <nTop>, <nLeft> TO <nBottom>, <nRight> ] ;
   8:             [ <dlg:OF,DIALOG> <oWnd> ] ;
   9:             [ ON CHANGE <uChange> ] ;
  10:             [ ON RIGHT CLICK <uRClick> ] ;
  11:             [ <lCargo: CARGO> ] ;
  12:             [ <lDisable: DISABLE> ] ;
  13:     => ;
  14: <oTree> := TExTree():New(<nTop>,<nLeft>,<nBottom>,<nRight>,<oWnd>,<{uChange}>,<{uRClick}>,<.lCargo.>,<.lDisable.>)
  15:  
  16: USER PROCEDURE MyTree()
  17:  
  18:           Local oDlg
  19:           Local oTExdbTree
  20:           
  21:           PUBLIC __TTSINUSE := .T.      //(Para uso no IDE RecLock precisa disso)
  22:           PUBLIC __TTSPUSH  := Array(0) //(Para uso no IDE RecLock precisa disso)
  23:           PUBLIC __cLogSiga := ""       //(Para uso no IDE GravaLog em RecLock precisa disso)          
  24:  
  25:           // Cria um diálogo 
  26:           DEFINE DIALOG oDlg TITLE "Teste de DBTree" FROM 10,10 TO 400,700 COLOR CLR_BLACK,CLR_WHITE PIXEL
  27:           
  28:           // Cria o DbTree no diálogo, ocupando o tamanho total do mesmo
  29:           DEFINE TExTree oTExdbTree FROM 00,00 TO oDlg:nHeight,oDlg:nWidth OF oDlg CARGO
  30:           
  31:           DBADDTREE oTExdbTree PROMPT "Menu 001" RESOURCE "BMPTABLE" CARGO "#0001"
  32:                     DBADDITEM oTExdbTree PROMPT "Item 001" RESOURCE "BMPSXG" CARGO "#0002"
  33:           DBENDTREE oTExdbTree
  34:           
  35:           DBADDITEM oTExdbTree PROMPT "Item 002" RESOURCE "BMPTRG"   CARGO "#0003"
  36:           DBADDITEM oTExdbTree PROMPT "Item 003" RESOURCE "BMPCONS"  CARGO "#0004"          
  37:           DBADDITEM oTExdbTree PROMPT "Item 004" RESOURCE "BMPPARAM" CARGO "#0005"          
  38:           DBADDTREE oTExdbTree PROMPT "Menu 002" OPENED RESOURCE "BMPTABLE" CARGO "#0006"
  39:                     DBADDITEM oTExdbTree PROMPT "Item 005" RESOURCE "BMPSXG" CARGO "#0007"
  40:                     DBADDTREE oTExdbTree PROMPT "Menu 003" OPENED RESOURCE "BMPTABLE" CARGO "#0008"
  41:                               DBADDITEM oTExdbTree PROMPT "Item 006" RESOURCE "BMPSXG" CARGO "#0009"
  42:                               DBADDTREE oTExdbTree PROMPT "Menu 004" OPENED RESOURCE "BMPTABLE" CARGO "#0010"
  43:                                         DBADDITEM oTExdbTree PROMPT "Item 007" RESOURCE "BMPSXG" CARGO "#0011"
  44:                               DBENDTREE oTExdbTree
  45:                               DBADDITEM oTExdbTree PROMPT "Item 008" RESOURCE "BMPSXG" CARGO "#0012"
  46:                     DBENDTREE oTExdbTree
  47:           DBENDTREE oTExdbTree
  48:           DBADDITEM oTExdbTree PROMPT "Item 009" RESOURCE "BMPSXB"   CARGO "#0013"          
  49:           
  50:           oTExdbTree:odbTree:bRClicked          := { || oTExdbTree:DelItem() }
  51:  
  52: ACTIVATE DIALOG oDlg CENTER ON INIT ShowNodeTree(@oTExdbTree)
  53:  
  54: Return
  55:  
  56: Static Function ShowNodeTree(oTExdbTree)
  57:  
  58:           Local cCargo
  59:  
  60:           IF TreeSeek( @oTExdbTree , "#0013" , "T_CARGO" , @cCargo )
  61:                     MsgInfo( "Seek: " + cCargo + CRLF + "GetCargo: " + oTExdbTree:GetCargo() )
  62:           EndIF
  63:  
  64: Return( TreeSeek( @oTExdbTree , "#0013" , "T_CARGO" , @cCargo ) )
  65:  
  66: Static Function TreeSeek( odbTree , cKeySeek , cIndexKey , cCargo )
  67:  
  68:           Local aIndexes   := Array(0)
  69:  
  70:           Local cAliasTree := odbTree:cArqTree
  71:           Local cKey       := ""
  72:  
  73:           Local lFound     := .F.
  74:           
  75:           Local nOrder
  76:  
  77:           (cAliasTree)->(aEval(Array(10),{|x,y|cKey:=IndexKey(y),IF(!Empty(cKey),aAdd(aIndexes,{y,cKey}),NIL)}))
  78:  
  79:           DEFAULT cIndexKey := "T_CARGO"
  80:           cIndexKey         := Upper( AllTrim( cIndexKey ) )
  81:           
  82:           nOrder            := aScan( aIndexes , { |aBag| aBag[2] == cIndexKey } )
  83:           IF ( nOrder == 0 )
  84:                     cIndexKey := "T_CARGO"
  85:                     nOrder    := aScan( aIndexes , { |aBag| aBag[2] == cIndexKey } )
  86:           EndIF
  87:  
  88:           (cAliasTree)->( dbSetOrder( aIndexes[nOrder][1] ) )
  89:           lFound                              := ( cAliasTree )->( dbSeek( cKeySeek , .F. ) )
  90:  
  91:     IF ( lFound )
  92:                     lFound        := odbTree:TreeSeek( ( cAliasTree )->T_CARGO )
  93:                     IF ( lFound ) 
  94:                          cCargo   := odbTree:GetCargo(( cAliasTree )->T_IDCODE) 
  95:                     EndIF          
  96:           EndIF
  97:  
  98: Return( lFound )
  99:  
 100: /***************************************************************
 101: ****************************************************************
 102: Classe TExTree
 103: Arvore Estendida para tratar o avanço entre os nós filhos e 
 104: relacionar um nó filho com o nó pai
 105: Criada por: Renato de Bianchi feat. Marinaldo de Jesus
 106: Em: 25/04/2012
 107: ****************************************************************
 108: ***************************************************************/
 109: user function TExTree
 110: return
 111:  
 112: Class TExTree from DbTree
 113:     
 114:           DATA oDbTree
 115:  
 116:           //DBTREE
 117:           DATA ABMPS
 118:           DATA ACORNER
 119:           DATA ANODES
 120:           DATA ANODESTOSEND
 121:           DATA AONPAGE
 122:           DATA ARECT
 123:           DATA ATREESOPEN
 124:           DATA BINIT
 125:           DATA CARQTREE
 126:           DATA CSTRPAINT
 127:           DATA CTREEATU
 128:           DATA LACTIVATED
 129:           DATA LCARGO
 130:           DATA LDISABLEPAINT
 131:           DATA LENABLE
 132:           DATA LERASE
 133:           DATA LFIRST
 134:           DATA LLOSTFOCUS
 135:           DATA LPAINTING
 136:           DATA LPROCESS
 137:           DATA LREFRESHING
 138:           DATA LVALIDLOST
 139:           DATA NCODEATU
 140:           DATA NCOLPAINT
 141:           DATA NFOCUS
 142:           DATA NLASTFOCUS
 143:           DATA NLASTINC
 144:           DATA NLEN
 145:           DATA NLINESPAGE
 146:           DATA NMAXCOLS
 147:           DATA NOPENED
 148:           DATA NTOTAL
 149:     
 150:           //TTREE
 151:           DATA BVALIDNODES
 152:           DATA CURRENTNODEID
 153:             
 154:           //TCONTROL
 155:           DATA ALIGN
 156:           DATA BCHANGE
 157:           DATA BEND
 158:           DATA BSETGET
 159:           DATA CDEFAULTACT
 160:           DATA CSX1HLP
 161:           DATA CVARIABLE
 162:           DATA HPARENT
 163:           DATA L3DLOOK
 164:           DATA LFOCUSONFIRST
 165:           DATA LMODIFIED
 166:           DATA LOUTGET
 167:           DATA LREADONLY
 168:           DATA LVISIBLECONTROL
 169:           DATA OJUMP
 170:             
 171:           //TSRVOBJECT
 172:           DATA ACONTROLS
 173:           DATA BGOTFOCUS
 174:           DATA BHELP
 175:           DATA BKEYDOWN
 176:           DATA BLBUTTONUP
 177:           DATA BLCLICKED
 178:           DATA BLDBLCLICK
 179:           DATA BLOSTFOCUS
 180:           DATA BMOVED
 181:           DATA BPAINTED
 182:           DATA BRABSCLICKED
 183:           DATA BRCLICKED
 184:           DATA BRESIZED
 185:           DATA BVALID
 186:           DATA BWHEN
 187:           DATA CARGO
 188:           DATA CCAPTION
 189:           DATA CMSG
 190:           DATA CNAME
 191:           DATA CREADVAR
 192:           DATA CTITLE
 193:           DATA CTOOLTIP
 194:           DATA HWND
 195:           DATA LACTIVE
 196:           DATA LCANGOTFOCUS
 197:           DATA LSHOWHINT
 198:           DATA LVALIDATING
 199:           DATA LVISIBLE
 200:           DATA NBOTTOM
 201:           DATA NCLIENTHEIGHT
 202:           DATA NCLIENTWIDTH
 203:           DATA NCLRPANE
 204:           DATA NCLRTEXT
 205:           DATA NHEIGHT
 206:           DATA NLASTKEY
 207:           DATA NLEFT
 208:           DATA NRIGHT
 209:           DATA NSTYLE
 210:           DATA NTOP
 211:           DATA NWIDTH
 212:           DATA OCURSOR
 213:           DATA OFONT
 214:           DATA OPARENT
 215:           DATA OWND
 216:           DATA TAGGROUP
 217:  
 218:           method TExTreeUpd()
 219:  
 220:           //Metodos sobrescritos
 221:           method ADDITEM(CPROMPT,CCARGO,CRES1,CRES2,CFILE1,CFILE2,NTIPO)
 222:           method ADDTREE(CPROMPT,LOPENED,CRES1,CRES2,CFILE1,CFILE2,CCARGO)
 223:           method ADDTREEITEM(CPROMPT,CRES1,CFILE1,CCARGO)
 224:           method BUILDTRB(NLENTXT,NLENCARGO)
 225:           method CHANGEBMP(CRES1,CRES2,CFILE1,CFILE2,CCARGO)
 226:           method CHANGEPROMPT(CNEWPROMPT,CCARGO)
 227:           method DEFAULT()
 228:           method DELETEALL(CPAI)
 229:           method DELITEM()
 230:           method DISPLAY()
 231:           method ENDTREE()
 232:           method FINDLASTSUN(NRECNO,NMAX)
 233:           method GETCARGO(CKEY)
 234:           method GETPROMPT(LCOMESPACO)
 235:           method ISEMPTY()
 236:           method NEW(NTOP,NLEFT,NBOTTOM,NRIGHT,OWND,UCHANGE,URCLICK,LCARGO,LDISABLE,OFONT)
 237:           method NIVEL()
 238:           method PTEND()
 239:           method PTREFRESH()
 240:           method PTSRVUPDATEPOSITION()
 241:           method PTUPDATENODES(CLEVEL)
 242:           method PTVALID(CNODEATU_ID,CNODEGO_ID)
 243:           method RESET()
 244:           method SETDISABLE()
 245:           method SETENABLE()
 246:           method TOTAL()
 247:           method TREESEEK(CCHAVE)
 248:  
 249: endClass
 250:  
 251: method ADDITEM(CPROMPT,CCARGO,CRES1,CRES2,CFILE1,CFILE2,NTIPO) class TExTree
 252:           Local uRet := Self:odbTree:AddItem(CPROMPT,CCARGO,CRES1,CRES2,CFILE1,CFILE2,NTIPO)
 253:           ::TExTreeUpd()
 254: return(uRet)
 255:  
 256: method ADDTREE(CPROMPT,LOPENED,CRES1,CRES2,CFILE1,CFILE2,CCARGO) class TExTree
 257:           Local uRet := Self:odbTree:AddTree(CPROMPT,LOPENED,CRES1,CRES2,CFILE1,CFILE2,CCARGO)
 258:           ::TExTreeUpd()
 259: return(uRet)
 260: method ADDTREEITEM(CPROMPT,CRES1,CFILE1,CCARGO) class TExTree
 261:           Local uRet := Self:odbTree:AddTreeItem(CPROMPT,CRES1,CFILE1,CCARGO)
 262:           ::TExTreeUpd()
 263: return(uRet)
 264:  
 265: method BUILDTRB(NLENTXT,NLENCARGO) class TExTree
 266:           Local uRet := Self:odbTree:BUILDTRB(NLENTXT,NLENCARGO)
 267:           ::TExTreeUpd()
 268: return(uRet)
 269:  
 270: method CHANGEBMP(CRES1,CRES2,CFILE1,CFILE2,CCARGO) class TExTree
 271:           Local uRet := Self:odbTree:CHANGEBMP(CRES1,CRES2,CFILE1,CFILE2,CCARGO)
 272:           ::TExTreeUpd()
 273: return(uRet)
 274:  
 275: method CHANGEPROMPT(CNEWPROMPT,CCARGO) class TExTree
 276:           Local uRet := Self:odbTree:CHANGEPROMPT(CNEWPROMPT,CCARGO)
 277:           ::TExTreeUpd()
 278: return(uRet)
 279:  
 280: method DEFAULT() class TExTree
 281:           Local uRet := Self:odbTree:DEFAULT()
 282:           ::TExTreeUpd()
 283: return(uRet)
 284:  
 285: method DELETEALL(CPAI) class TExTree
 286:           Local uRet := Self:odbTree:DELETEALL(CPAI)
 287:           ::TExTreeUpd()
 288: return(uRet)
 289:  
 290: method DELITEM() class TExTree
 291:           Local uRet := Self:odbTree:DelItem()
 292:           ::TExTreeUpd()
 293: return(uRet)
 294:  
 295: method DISPLAY() class TExTree
 296:           Local uRet := Self:odbTree:DISPLAY()
 297:           ::TExTreeUpd()
 298: return(uRet)
 299:  
 300: method ENDTREE() class TExTree
 301:           Local uRet := Self:odbTree:ENDTREE()
 302:           ::TExTreeUpd()
 303: return(uRet)
 304:  
 305: method FINDLASTSUN(NRECNO,NMAX) class TExTree
 306:           Local uRet := Self:odbTree:FINDLASTSUN(NRECNO,NMAX)
 307:           ::TExTreeUpd()
 308: return(uRet)
 309:  
 310: method GETCARGO(CKEY) class TExTree
 311:           Local uRet := Self:odbTree:GETCARGO(CKEY)
 312:           ::TExTreeUpd()
 313: return(uRet)
 314:  
 315: method GETPROMPT(LCOMESPACO) class TExTree
 316:           Local uRet := Self:odbTree:GETPROMPT(LCOMESPACO)
 317:           ::TExTreeUpd()
 318: return(uRet)
 319:  
 320: method ISEMPTY() class TExTree
 321:           Local uRet := Self:odbTree:ISEMPTY()
 322:           ::TExTreeUpd()
 323: return(uRet)
 324:  
 325: method NEW(NTOP,NLEFT,NBOTTOM,NRIGHT,OWND,UCHANGE,URCLICK,LCARGO,LDISABLE,OFONT) class TExTree
 326:           DEFINE DBTREE ::oDbTree FROM nTop,nLeft TO nRight,nBottom OF oWnd CARGO
 327:           Self := ::TExTreeUpd()
 328: return(Self)
 329:  
 330: method NIVEL() class TExTree
 331:           Local uRet := Self:odbTree:NIVEL()
 332:           ::TExTreeUpd()
 333: return(uRet)
 334:  
 335: method PTEND() class TExTree
 336:           Local uRet := Self:odbTree:PTEND()
 337:           ::TExTreeUpd()
 338: return(uRet)
 339:  
 340: method PTREFRESH() class TExTree
 341:           Local uRet := Self:odbTree:PTREFRESH()
 342:           ::TExTreeUpd()
 343: return(uRet)
 344:  
 345: method PTSRVUPDATEPOSITION() class TExTree
 346:           Local uRet := Self:odbTree:PTSRVUPDATEPOSITION()
 347:           ::TExTreeUpd()
 348: return(uRet)
 349:  
 350: method PTUPDATENODES(CLEVEL) class TExTree
 351:           Local uRet := Self:odbTree:PTUPDATENODES(CLEVEL)
 352:           ::TExTreeUpd()
 353: return(uRet)
 354:  
 355: method PTVALID(CNODEATU_ID,CNODEGO_ID) class TExTree
 356:           Local uRet := Self:odbTree:PTVALID(CNODEATU_ID,CNODEGO_ID)
 357:           ::TExTreeUpd()
 358: return(uRet)
 359:  
 360: method RESET() class TExTree
 361:           Local uRet := Self:odbTree:RESET()
 362:           ::TExTreeUpd()
 363: return(uRet)
 364:  
 365: method SETDISABLE() class TExTree
 366:           Local uRet := Self:odbTree:SETDISABLE()
 367:           ::TExTreeUpd()
 368: return(uRet)
 369:  
 370: method SETENABLE() class TExTree
 371:           Local uRet := Self:odbTree:SETENABLE()
 372:           ::TExTreeUpd()
 373: return(uRet)
 374:  
 375: method TOTAL() class TExTree
 376:  
 377:           Local uRet := Self:odbTree:TOTAL()
 378:           ::TExTreeUpd()
 379: return(uRet)
 380:  
 381: method TREESEEK(CCHAVE) class TExTree
 382:           Local uRet := Self:odbTree:TreeSeek(cChave)
 383:           ::TExTreeUpd()
 384: Return(uRet)
 385:  
 386: method TExTreeUpd() class TExTree
 387:             //DBTREE
 388:             Self:ABMPS                  := Self:oDbTree:ABMPS
 389:             Self:ACORNER                := Self:oDbTree:ACORNER
 390:             Self:ANODES                 := Self:oDbTree:ANODES
 391:             Self:ANODESTOSEND           := Self:oDbTree:ANODESTOSEND
 392:             Self:AONPAGE                := Self:oDbTree:AONPAGE
 393:             Self:ARECT                  := Self:oDbTree:ARECT
 394:             Self:ATREESOPEN             := Self:oDbTree:ATREESOPEN
 395:             Self:BINIT                  := Self:oDbTree:BINIT
 396:             Self:CARQTREE               := Self:oDbTree:CARQTREE
 397:             Self:CSTRPAINT              := Self:oDbTree:CSTRPAINT
 398:             Self:CTREEATU               := Self:oDbTree:CTREEATU
 399:             Self:LACTIVATED             := Self:oDbTree:LACTIVATED
 400:             Self:LCARGO                 := Self:oDbTree:LCARGO
 401:             Self:LDISABLEPAINT          := Self:oDbTree:LDISABLEPAINT          
 402:             Self:LENABLE                := Self:oDbTree:LENABLE
 403:             Self:LERASE                 := Self:oDbTree:LERASE
 404:             Self:LFIRST                 := Self:oDbTree:LFIRST
 405:             Self:LLOSTFOCUS             := Self:oDbTree:LLOSTFOCUS
 406:             Self:LPAINTING              := Self:oDbTree:LPAINTING
 407:             Self:LPROCESS               := Self:oDbTree:LPROCESS
 408:             Self:LREFRESHING            := Self:oDbTree:LREFRESHING
 409:             Self:LVALIDLOST             := Self:oDbTree:LVALIDLOST
 410:             Self:NCODEATU               := Self:oDbTree:NCODEATU
 411:             Self:NCOLPAINT              := Self:oDbTree:NCOLPAINT
 412:             Self:NFOCUS                 := Self:oDbTree:NFOCUS
 413:             Self:NLASTFOCUS             := Self:oDbTree:NLASTFOCUS
 414:             Self:NLASTINC               := Self:oDbTree:NLASTINC
 415:             Self:NLEN                   := Self:oDbTree:NLEN
 416:             Self:NLINESPAGE             := Self:oDbTree:NLINESPAGE
 417:             Self:NMAXCOLS               := Self:oDbTree:NMAXCOLS
 418:             Self:NOPENED                := Self:oDbTree:NOPENED
 419:             Self:NTOTAL                 := Self:oDbTree:NTOTAL
 420:  
 421:             //TTREE
 422:             Self:BVALIDNODES            := Self:oDbTree:BVALIDNODES
 423:             Self:CURRENTNODEID          := Self:oDbTree:CURRENTNODEID          
 424:             
 425:             //TCONTROL
 426:             Self:ALIGN                  := Self:oDbTree:ALIGN
 427:             Self:BCHANGE                := Self:oDbTree:BCHANGE
 428:             Self:BEND                   := Self:oDbTree:BEND
 429:             Self:BSETGET                := Self:oDbTree:BSETGET
 430:             Self:CDEFAULTACT            := Self:oDbTree:CDEFAULTACT
 431:             Self:CSX1HLP                := Self:oDbTree:CSX1HLP
 432:             Self:CVARIABLE              := Self:oDbTree:CVARIABLE          
 433:             Self:HPARENT                := Self:oDbTree:HPARENT
 434:             Self:L3DLOOK                := Self:oDbTree:L3DLOOK
 435:             Self:LFOCUSONFIRST          := Self:oDbTree:LFOCUSONFIRST
 436:             Self:LMODIFIED              := Self:oDbTree:LMODIFIED
 437:             Self:LOUTGET                := Self:oDbTree:LOUTGET
 438:             Self:LREADONLY              := Self:oDbTree:LREADONLY
 439:             Self:LVISIBLECONTROL        := Self:oDbTree:LVISIBLECONTROL
 440:             Self:OJUMP                  := Self:oDbTree:OJUMP
 441:             
 442:             //TSRVOBJECT
 443:             Self:ACONTROLS              := Self:oDbTree:ACONTROLS
 444:             Self:BGOTFOCUS              := Self:oDbTree:BGOTFOCUS
 445:             Self:BHELP                  := Self:oDbTree:BHELP
 446:             Self:BKEYDOWN               := Self:oDbTree:BKEYDOWN
 447:             Self:BLBUTTONUP             := Self:oDbTree:BLBUTTONUP
 448:             Self:BLCLICKED              := Self:oDbTree:BLCLICKED
 449:             Self:BLDBLCLICK             := Self:oDbTree:BLDBLCLICK
 450:             Self:BLOSTFOCUS             := Self:oDbTree:BLOSTFOCUS
 451:             Self:BMOVED                 := Self:oDbTree:BMOVED
 452:             Self:BPAINTED               := Self:oDbTree:BPAINTED
 453:             Self:BRABSCLICKED           := Self:oDbTree:BRABSCLICKED
 454:             Self:BRCLICKED              := Self:oDbTree:BRCLICKED
 455:             Self:BRESIZED               := Self:oDbTree:BRESIZED
 456:             Self:BVALID                 := Self:oDbTree:BVALID
 457:             Self:BWHEN                  := Self:oDbTree:BWHEN
 458:             Self:CARGO                  := Self:oDbTree:CARGO
 459:             Self:CCAPTION               := Self:oDbTree:CCAPTION
 460:             Self:CMSG                   := Self:oDbTree:CMSG
 461:             Self:CNAME                  := Self:oDbTree:CNAME
 462:             Self:CREADVAR               := Self:oDbTree:CREADVAR
 463:             Self:CTITLE                 := Self:oDbTree:CTITLE
 464:             Self:CTOOLTIP               := Self:oDbTree:CTOOLTIP
 465:             Self:HWND                   := Self:oDbTree:HWND
 466:             Self:LACTIVE                := Self:oDbTree:LACTIVE
 467:             Self:LCANGOTFOCUS           := Self:oDbTree:LCANGOTFOCUS
 468:             Self:LSHOWHINT              := Self:oDbTree:LSHOWHINT
 469:             Self:LVALIDATING            := Self:oDbTree:LVALIDATING
 470:             Self:LVISIBLE               := Self:oDbTree:LVISIBLE
 471:             Self:NBOTTOM                := Self:oDbTree:NBOTTOM
 472:             Self:NCLIENTHEIGHT          := Self:oDbTree:NCLIENTHEIGHT          
 473:             Self:NCLIENTWIDTH           := Self:oDbTree:NCLIENTWIDTH
 474:             Self:NCLRPANE               := Self:oDbTree:NCLRPANE
 475:             Self:NCLRTEXT               := Self:oDbTree:NCLRTEXT
 476:             Self:NHEIGHT                := Self:oDbTree:NHEIGHT
 477:             Self:NLASTKEY               := Self:oDbTree:NLASTKEY
 478:             Self:NLEFT                  := Self:oDbTree:NLEFT
 479:             Self:NRIGHT                 := Self:oDbTree:NRIGHT
 480:             Self:NSTYLE                 := Self:oDbTree:NSTYLE
 481:             Self:NTOP                   := Self:oDbTree:NTOP
 482:             Self:NWIDTH                 := Self:oDbTree:NWIDTH
 483:             Self:OCURSOR                := Self:oDbTree:OCURSOR
 484:             Self:OFONT                  := Self:oDbTree:OFONT
 485:             Self:OPARENT                := Self:oDbTree:OPARENT
 486:             Self:OWND                   := Self:oDbTree:OWND
 487:             Self:TAGGROUP               := Self:oDbTree:TAGGROUP
 488:  
 489: Return( self )

 

Para obter o código de exemplo clique aqui.

 

[]s
иαldσ dj

Comentários

Postagens mais visitadas