FIVEWIN: Help sensivel ao contexto com banco de dados

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

FIVEWIN: Help sensivel ao contexto com banco de dados

Mensagem por rochinha »

Amiguinhos,

Este codigo mostra como implantar um help que dentro de uma dialog pode paresentar ajuda para o campo em que o usuario estiver focado, pressionando, neste caso, F2.

No meu caso deixei o F1 para o Help geral.

Usei a rotina apresentada pelo Toledo neste topico e adaptei codigos de exemplos do Fivewin.

Confesso que ficou show de bola o resultado e tudo esta baseado no nome do modulo do programa ativo e ID do controle focado.

Não usei numero de linha pois a compilação causa mudança e ai a pesquisa se perde.

TheHelp.prg

Código: Selecionar todos

 
#include "FiveWin.ch" 
#include "NewHelp.ch" 
#include "Inkey.ch" 

#define SRCPAINT   15597702 // 0xEE0086 
#define SRCAND      8913094 

#define GWW_ID          -12 

static oBmp1, oBmp2, oFont 

function Main() 
   local oDlg, oBtn, oCursor 
   local cName    := PadR( "Hello" , 30 ) 
   local cAddress := PadR( "World!", 30 ) 

   REQUEST DBFCDX 
   rddsetdefault( "DBFCDX" ) 

   SetKey( VK_F1, { | nKey | TheHelp( CtrlSearch(oDlg) ) } ) 

   DEFINE CURSOR oCursor RESOURCE "Help" 
   DEFINE BITMAP oBmp1 RESOURCE "Genie1" 
   DEFINE BITMAP oBmp2 RESOURCE "Genie2" 
   DEFINE FONT oFont NAME "Arial" SIZE 0, -9 
   SET _3DLOOK ON 
   DEFINE DIALOG oDlg RESOURCE "Test" 
   REDEFINE GET oGet1 VAR cName    ID ID_NAME    OF oDlg HELPID ID_NAME 
   REDEFINE GET oGet2 VAR cAddress ID ID_ADDRESS OF oDlg HELPID ID_ADDRESS 
   // 
   oGet1:bKeyDown := {|nKey,bFlags| iif( nKey==VK_F2, TheHelp( CtrlSearch(oDlg) ), .t.) } 
   oGet2:bKeyDown := {|nKey,bFlags| iif( nKey==VK_F2, TheHelp( CtrlSearch(oDlg) ), .t.) } 
   // 
   ACTIVATE DIALOG oDlg CENTERED 
   RELEASE OBJECTS oCursor, oBmp1, oBmp2, oFont 
   return nil 

function TheHelp( idCtrl ) 
   local cProcName := Padr(ProcName( 1 ),10) 
   local nProcLine := 0 // ProcLine( 0 ) 
   local cProcCtrl := StrZero( idCtrl, 4 ) 
   local cTexto    := Space( 200 ) 
   local aStru 
   if !file( "HELP.DBF" ) 
      aStru := { { "PROG"    ,"C" ,10 , 0 } , ; 
                 { "LINHA"   ,"C" , 6 , 0 } , ; 
                 { "VARIAVEL","C" , 4 , 0 } , ; 
                 { "TEXTO"   ,"M" ,10 , 0 } } 
      dbCreate( "HELP.DBF", aStru ) 
   endif 
   use help new 
   if !file( "HELP.CDX" ) 
      index on prog+linha+variavel to help 
   endif 
   set index to help 
   dbGotop() 
   dbSeek( cProcName+StrZero(nProcLine,6)+cProcCtrl ) 
   if !found() 
      MsgGet( "Digite uma ajuda", "Conteudo:", @cTexto ) 
      dbAppend() 
      help->PROG     := cProcName 
      help->LINHA    := STRZERO(nProcLine,6) 
      help->VARIAVEL := cProcCtrl 
      help->TEXTO    := cTexto 
   else 
      cTexto         := TEXTO 
      MsgFancy( If( Empty( cTexto ), "Sorry, I am a very limited Genius...", Alltrim( cTexto ) ) ) 
   endif 
   close help 
   return nil 

/* 
 * SOURCE: NewHelp.prg 
 */ 
function MsgFancy( cMsg ) 
   local oDlg, oBrush 
   DEFINE BRUSH oBrush STYLE NULL             // Transparent painting ! 
   DEFINE DIALOG oDlg FROM 2, 2 TO 20, 60 BRUSH oBrush STYLE WS_POPUP 
   ACTIVATE DIALOG oDlg CENTERED ; 
      ON PAINT ( PalBmpDraw( oDlg:hDC, 0, 0, oBmp2:hBitmap, 0, 0, 0, SRCPAINT ),; 
                 PalBmpDraw( oDlg:hDC, 0, 0, oBmp1:hBitmap, 0, 0, 0, SRCAND ),; 
                 oDlg:Say( 3.7, 10, cMsg,,, oFont ) ) ; 
      ON LEFT CLICK oDlg:End() 
   return nil 

/* 
 * SOURCE: TestFoc2.prg 
 */ 
function CtrlSearch(oDlgActive) 
   local nAt := AScan( oDlgActive:aControls, { | oCtrl | oCtrl:lFocused } ) 
   return nAt 


TheHelp.rc

Código: Selecionar todos

 
#include "WinApi.ch" 
#include "NewHelp.ch" 

help   CURSOR "../cursors/help.cur" 
genie1 BITMAP "../bitmaps/genie1.bmp" 
genie2 BITMAP "../bitmaps/genie2.bmp" 

test DIALOG 28, 66, 171, 68 
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 
CAPTION "Press help and then click a control" 
FONT 8, "Arial" 
BEGIN 
   LTEXT "&Name:", -1, 14, 11, 22, 8 
   EDITTEXT ID_NAME, 37, 10, 130, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP 
   LTEXT "&Address:", -1, 5, 27, 29, 8 
   EDITTEXT ID_ADDRESS, 37, 25, 130, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP 
   PUSHBUTTON "&Ok", ID_OK, 15, 51, 33, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP 
   PUSHBUTTON "&Cancel", 2, 69, 50, 33, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP 
   PUSHBUTTON "&Help", ID_HELP, 123, 50, 33, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP 
END 

STRINGTABLE 
BEGIN 
   ID_NAME,    "Type here the name of the customer" 
   ID_ADDRESS, "Type here the address of your customer" 
   ID_OK,      "Press here when you want to save this info" 
   IDCANCEL,   "Press here if you want to cancel this operation" 
   ID_HELP,    "As you are checking, pressing here offers help!" 
END  
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Re: FIVEWIN: Help sensivel ao contexto com banco de dados

Mensagem por clodoaldomonteiro »

Rochinha!

A GAS Informática resolveu esse problema, colocando o helpo de campo direto no getsys.

O conteudo do help foi colocado noma array bidirecional ...

Informações da tabela:

Código: Selecionar todos

sistema[002]={;
            "3.Informa‡äes das empresas  (SEFIP)",;         // opcao do menu
            "INFORMAیES DAS EMPRESAS (SEFIP)",;            // titulo do sistema
            {"tipreg"},;                                    // chaves do arquivo
            {"Acesso"},;                                    // titulo dos indices para consulta
            {"01"},;                                        // ordem campos chaves
            {"EMP_SEF",drvdbf,drvntx},;                     // nome do DBF
            {"EMP_SEF1"},;                                  // nomes dos NTX
            {},;                                            // nome dos dbf's relacionados
            {},;                                            // campos de relacionamento
            {1,1,5,3,23,77},;                               // num telas/tela atual/coordenadas
            {1,.t.,.f.},;                                   // nivel acesso/tp chave/pede dir
            {},;                                            // campos do arquivo
            {};                                             // formula mostradas
           }
Informações dos campos:

Código: Selecionar todos

AADD(sistema[002,O_CAMPO],{;            // PAR
     /* mascara       */    "@R 99.99-9/99",;
     /* titulo        */    "Atividade c¢digo",;
     /* cmd especial  */    "VDBF(6,3,20,77,'CNAE',{'codigo','descricao'},,'codigo',[])",;
     /* default       */    "'7511600'",;
     /* pre-validacao */    "",;
     /* validacao     */    "ptab(par_cnae,'cnae',1)~C¢DIGO n„o existe na tabela",;
     /* help do campo */    "C¢digo do CNAE 2.0.|[F8] vˆ tabela.";
                         };
)
... é criado a array systema, que guarda informações da tabela, dos campos e fórmulas;

- 002 é o arquivo que vai receber essas características;
- O_CAMPO é para informar que essas informações é para um campo;
- em CMD especial, usa-se a função VDBF() para que possamos, em um campos que tenha relacionamento com outro arquivo, teclar F8 para que esse arquivo seja mostrado numa consulta e possamos escoler um registro a relacionar;
- default, pode ser colocado um valor default;
- pré-validação é u mesmo que WHEN;
- e em help é colocado a mensagem a ser mostrado ao usuário, para esse campo a GAS colocou alt+F1 para acionar ou não os helps.

Fórmulas para os campos:

Código: Selecionar todos

AADD(sistema[002,O_FORMULA],{;          // PAR - Saldo (-)
     /* form mostrar  */    "LEFT(TRAN(if(PTAB(par_sarre0,'TVE',1),subs(TVE->ver_titulo,1,20),'C¢digo inexistente'),[]),19)",;
     /* lin da formula*/    12,;
     /* col da formula*/    22;
                         };
)
Aqui podemos definir formulas a serem mostradas a cada campo.
Nessa acima, o sistema vai usar a função PTAB() para se relacionar com a tabela TVE e se estiver tido OK, será mostrado o campo título na posição 12,22.

Bom, por hora to tentando usar o xharbour com a wvwtools, e como a getsys desta lib é bastante complexa, to ralando muito para conseguir isso com o xharbour + wvwtools.

Grato pela atenção.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: FIVEWIN: Help sensivel ao contexto com banco de dados

Mensagem por rochinha »

Amiguinho,

Este GetSys tem codigo aberto disponivel para visualização?

Pois se sim, seria de muita ajuda a colegas que usam e abusam deste recurso.

No caso do Fivewin não existe a figura do GetSys ja que a manipulção é diferente, mas para o puro Harbour isto seria de interessante implementação no código fonte existente.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Re: FIVEWIN: Help sensivel ao contexto com banco de dados

Mensagem por clodoaldomonteiro »

Já postei, junto com alguns colegas daqui o getsys da GAS para xharbour, mas vou postar ela aqui mesmo.

Se quiser posso mandar um exemplo de uma folha de pagamento que usa a gtwvw.lib + o getsys da GAS.
Anexos
GETSYS.ZIP
Getsys da GAS
(8.86 KiB) Baixado 233 vezes
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Responder