Menu Clipper 5.3 Help

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Menu Clipper 5.3 Help

Mensagem por MARCELOG »

Olá forum,
recentemente vi um exemplo de menu colocado pelo Stanis no estilo do Clipper 5.3.
Gostaria de saber se é possível fazer com que, após a exeução da ação, retornar à opção selecionada, mostrando ou resenhando o menu até essa opção?
É que o sistema que estou elaborando tem rotinas seguidas, e fazer o usuário selecionar todas as opções a cada ação executada não é "lógico".
O exemplo do Stanis (ou mesmo o exemplo da pasta source) insiste em retornar ao menu principal (TopBar).

Obrigado.

MarceloG
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá amigo,

Conforme eu mesmo já te respondi isso é simples fazer, você precisa apenas de duas linhas no seu código.

Este trecho antes do Alert() do meu exemplo:

nUltimoItem := oPopUpMenu:Current


Este trecho logo após o alert() do meu exemplo:

oPopUpMenu:Select( nUltimoItem )


Se você não conseguir mesmo de jeito nenhum eu vou ver o que posso fazer para melhorar aquele exemplo, mas antes dá uma olhadinha no NG do Clipper 5.3 que nele as classes envolvidas no exemplo são muito bem explicadas.

Ok...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Caro Stanis,
de novo, obrigado pelo interesse em me ajudar.
Mas o seu código abaixo foi alterado conforme orientação e não funcionou.
O menu insiste em retornar à opção inicial (topbar).

/*****
*
* Menu.prg
*
* Compilar: / n
*
* Este programa tem como proposta o simples exemplo das classse de
* criação de menus com o clipper 5.3 e xHarbour.
*
**********
*
* Stanis Luksys
*
* stanis@luksyssoft.com.br
* www.luksyssoft.com.br
*
*************************************************/



#include "button.ch"
#include "inkey.ch"

function Main()

local oMenu

// Ativa as ações do mouse
SET( _SET_EVENTMASK, INKEY_ALL )

// Ativa cores intensas no fundo
SetBlink(.f.)

// Torna o cursor do mouse visivel
msetcursor(.T.)

// Limpa a tela
setColor( "w+/b" )
cls

// Aqui neste momento é criado o menu
oMenu := Monta_Menu()

// Espera por um evento do menu e nao sai enquanto o usuario
// nao escolher o item 'sair' do menu
do while MenuModal( oMenu, 01, 24, 01, 79, "w+/b" ) != 999
enddo

Set Color To
cls

return( NIL )




// A função a seguir é responsávl pela criação do menu retorna para o
// objeto oMenu o estado atual do menu, quando é escolhido uma opção

function Monta_Menu()

local oTopBar, oPopUp, oPopUp1, oItem, oItem1, oItem2

local cCorBar := "b*/w,w+/bg,b*/w,w+/bg,b*/w,b*/w"
local cCorItem := "w+/bg,b*/w,w+/bg,b*/w,w/bg,w+/bg"



// TopBar() cria o menu na posição indicada
oTopBar := TopBar( 0, 0, 79)
oTopBar:ColorSpec := cCorBar

// Cria um novo 'popup menu' chamado Arquivo e adiciona ele no objeto oTopBar
oPopUp := PopUp()
oPopUp :ColorSpec:= cCorItem
oTopBar:AddItem( MenuItem ( "&Arquivo", oPopUp, , "Opcoes de cadastro e alteracoes de registros..." ) )


// Aqui começa a adição de itens do menu 'Arquivo'

oItem := MenuItem( "Cadastro de &Clientes" ,{|| Alert() }, K_CTRL_C, "Mensagem do primeiro item...", 101)
oPopUp:AddItem( oItem )


oItem :=MenuItem( "Cadastro de &Produtos" ,{|| nItem:=oPopUp:Current,Alert("a"),oPopUp:Select(nItem)}, K_CTRL_P, "Mensagem do segundo item...")
oPopUp:AddItem( oItem )


oItem :=MenuItem( "Cadastro de &Forncedores" ,{|| Alert() }, K_CTRL_F, "Mensagem do terceiro item...")
oPopUp:AddItem( oItem )

oPopUp:AddItem( MenuItem( MENU_SEPARATOR ) )

oItem :=MenuItem( "&Grupos de Produtos" ,{|| Alert() }, K_CTRL_G, "Mensagem do quarto item...")
oPopUp:AddItem( oItem )

oItem :=MenuItem( "Contas &Bancarias", {|| Alert() }, K_CTRL_B, "Mensagem do quinto item...")
oPopUp:AddItem( oItem )

oPopUp:AddItem( MenuItem( MENU_SEPARATOR ) )

oItem :=MenuItem( "Sai&r" ,{|| .t. }, K_ALT_F4,"Abandona o aplicativo.", 999)
oPopUp:AddItem( oItem)


// Cria um novo 'popup menu' chamado Opcoes e adiciona ele no objeto oTopBar

oPopUp := PopUp()
oPopUp :ColorSpec:= cCorItem
oTopBar:AddItem( MenuItem ( "&Opcoes", oPopUp, , "Opcoes gerais do programa..." ) )


// Aqui começa a adição de itens do menu 'Opcoes'

// Interessante notar que se o mouse ja esta habilitado, podemos
// desabilitar o item que faria isso, e vice-versa

oItem1 := MenuItem( "&Habilitar cursor do mouse" ,{|| mSetCursor(.t.), oItem1:Enabled := .f., oItem2:Enabled := .t.}, , "Habilita o cursor do mouse" )
oItem1:Enabled := .f.
oPopUp:AddItem( oItem1 )

oItem2 := MenuItem( "&Desabilitar cursor mouse" ,{|| mSetCursor(.f.), oItem2:Enabled := .f., oItem1:Enabled := .t. }, , "Desabilita o cursor do mouse" )
oPopUp:AddItem( oItem2 )


// Retorna o estado de objeto TopBar para a função Main()
return ( oTopBar)


O NG e a pasta source do clipper contém um exemplo que não contempla a situação, ou seja, tanto o seu código quanto aquele fornecido pela CACLIPPER retornam ao menu principal (topbar).

O menu corrente (o:current) dentro do bloco de código sempre retorna 0.

Obrigado.

MarceloG.

PS: vou fazer um teste colocando a variável private em vez de local e testar a dica dentro da função, e não do código.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá Marcelo,

Ok, você está certo, realmente não funcionou.

A titulo de exemplo, no final de semana eu te preparo algo neste sentido.


Ok.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder