LIMITAÇÃO VISUAL LIB OU BUG ?!? :(

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LIMITAÇÃO VISUAL LIB OU BUG ?!? :(

Mensagem por fladimir »

Pessoal olá td bem, estou mudando a interface do meu sistema para um visual segundo minha opinião um pouco melhor usando a lib Visual Lib 2.0, o q ocorre é o seguinte tenho um PRG chamado Menu de onde monto a interface e chamo as demais funções do sistema e ele esta da seguinte maneira:

* * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Modulo....: Modulo principal do sistema
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#include "inkey.ch"
#include "visual2.ch"

MEMVAR ...... Declaracoes
.
.
.


**********************
PROCEDURE PRINCIPAL

LOCAL ..... Definicoes das Var. Locais
.
.
.


FreeTslice(20) // Para consumir menos processamento

REQUEST DBFCDX
RDDSETDEFAULT('DBFCDX')
__KILLREAD()

PUBLIC .... Variaveis Publicas
.
.
.

Desktop("","W+/B") //Fun‡Æo que inicializa a Visual Lib

mBar := NewBarMenu()

mAtend := NewDownMenu() ; mCad := NewDownMenu()
.
. Sao Definidos 6 Menus com os 2 acima
.


smAtd_Vend := NewDownMenu() ; mAtd_Orc := NewDownMenu()
.
.
. Sao Definidos 62 SubMenus com os 2 acima
.


*---------------------------------------------------------------------------*
AddBarItem( mBar, "&Atende" , "Atendimento ao Cliente" , mAtend )
AddDownItem( mAtend, "......." , "Mensagem do SubMenu" , {|| Funcao1()})
.
. Sao Definidos Sub-Menus e Itens de Sub-Menus
.


*---------------------------------------------------------------------------*

AddBarItem( mBar, "&Cadastros" , "Cadastros do Sistema" , mCad )
AddDownItem(mCad, "......." , "Mensagem do SubMenu" , {|| Funcao2()})
.
. Sao Definidos Sub-Menus e Itens de Sub-Menus
.
.

*---------------------------------------------------------------------------*
AddBarItem( mBar, "&Movimento " , "Movimenta‡Æo do Estoque" , mMoviment )
AddDownItem(mMoviment, "......." , "Mensagem do SubMenu" , {|| Funcao3()})
.
. Sao Definidos Sub-Menus e Itens de Sub-Menus
.
.

*---------------------------------------------------------------------------*
AddBarItem( mBar, "&Util" , "Utilit rios do Sistema" , mUtilit )
AddDownItem( mUtilit, "......." , "Mensagem do SubMenu" , {|| Funcao5()})
.
. Sao Definidos Sub-Menus e Itens de Sub-Menus
.
.

*----------------------- TERMINOU OS MENUS E SUBMENUS -----------------------*

While .T.

BarMenu( mBar )

IF LastKey() = K_ESC
cTela := SAVESCREEN(areageral)
Param()
Final := MsgBox2( "Deseja Sair do Sistema ?", "SAIR",5,"Sim","Nao" )
If Final = 2 ; loop ; endif
Exit
Endif
End
SETCOLOR("")
return nil


O q esta acontecendo é que se acrescento mais submenus ou itens e vou compilar da o erro C3022 Too many external references

E eu não sei como proceder pois tentei fazer o seguinte definir os Menus em um outro PRG mas ele naum aceita.

Alguém já passou por isso ou tem alguma idéia?

Utilizo o Clipper 5.2 e Blinker 7.0

Vlw, agradeço desde já quem puder ajudar.
Editado pela última vez por fladimir em 04 Dez 2006 14:58, em um total de 1 vez.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Tche.....coloquei abaixo um pequeno exemplo....de como faço nos meus sistemas...

sistema.prg:

Código: Selecionar todos

#include "inkey.ch"
#include "visual2.ch"

local aEnv

VL850()
FREETSLICE(20)
SETMODE(25,80)

REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")
RDDSETDEFAULT("_DBFCDX") //CLIPPER 5.3
DBSETDRIVER("DBFCDX")

// Carrega as variaveis do sistema
MOVCAL_X=1
MOVCAL_Y=-49
MOVdat_X=0
MOVdat_Y=-14
WUSUARIO=Space(10)
Wsetor=Space(10)
WACESSOS=Space(60)
vVOLTAR=SPACE(1)
vPESQ=SPACE(1)

PRIVATE msg_tel:="SyGeCom Informatica - (51) 3366-6683"    //mensagem de erro
SET CENTURY ON
SET BELL OFF
SET DATE FRENCH
SET DATE BRITISH
SET EPOCH TO 2000
SET CONFIRM ON
SET DELETED ON
SET EXACT ON
SET SCOREBOARD OFF
SET WRAP ON
public saida:=space(1)

USE
Desktop(MENSAGEM)

SETCOLOR( "+W/GB," )
@ 00,01 SAY "SyGeCom"
@ 00,01 SAY"S"  COLOR( "+R/GB,N*/W, , , N*/W" )
@ 00,03 SAY"G"  COLOR( "+R/GB,N*/W, , , N*/W" )
@ 00,05 SAY"C"  COLOR( "+R/GB,N*/W, , , N*/W" )

SHOWTIME(00,75,.T.,"+R/GB,N*/W, , , N*/W" ) // HORARIO COM O BLINKER

DO WHILE .T.
   MENUS()  // sistema de menus
ENDDO
return nil

**********
FUNC MENUS
**********

SetKeyMouse( K_F1,  { 24, 24, 00, 07 } )     // coordenadas do click do mouse
SetKeyMouse( K_F2,  { 24, 24, 09, 15 } )
SetKeyMouse( K_F9,  { 24, 24, 64, 70 } )
SetKeyMouse( K_F10, { 24, 24, 72, 79 } )

******************************************************************************
mBar := NewBarMenu()             // PROJETO MENU DE BARRAS
******************************************************************************
* Menu CADASTRO
mCad  := NewDownMenu()  //DEFINI AS VAR...DO MENUS
mCad1 := NewDownMenu()  //DEFINI AS VAR...DO SUB-MENUS
mCad11:= NewDownMenu()  //DEFINI AS VAR...DO SUB-MENUS 
mCad12:= NewDownMenu()  //DEFINI AS VAR...DO SUB-MENUS
mCad13:= NewDownMenu()  //DEFINI AS VAR...DO SUB-MENUS
mCad14:= NewDownMenu()  //DEFINI AS VAR...DO SUB-MENUS

* Menu FERRAMENTAS
mFER := NewDownMenu()  //DEFINI AS VAR...DO MENUS
mFER1:= NewDownMenu()  //DEFINI AS VAR...DO SUB-MENUS
mFER2:= NewDownMenu()  //DEFINI AS VAR...DO SUB-MENUS

*****************************************************************************
* MENU CADASTROS
*****************************************************************************
*****************************************************************************
* SUB-MENU TABELAS
*****************************************************************************
AddDownItem( mCAD  ,"&1-Tabela de Precos",   "Cad,Alt e Consultar a Tabela",mCAD1)
AddDownItem( mCAD1 ,"&1-Tabela de COMPRA",   "Cad,Alt e Consultar a Tabela", mCAD11 )
AddDownItem( mCAD11,"&1-Tabela de COMPRA",   "Cadastrar e Alterar Tabela de Compra",{ || CHAMAFUNC() } )
AddDownSep ( mCAD11)
AddDownItem( mCAD11,"&2-Alterar Pre‡o",      "Cad e Alt Tabela de Compra",{ || CHAMAFUNC() } )
AddDownSep ( mCAD11)
AddDownItem( mCAD11,"&3-Imprimir Tabela",    "Imprimir Tabela de Compra",{ || RELPRO100("I") } )
AddDownSep ( mCAD1)
AddDownItem( mCAD1 ,"&2-Tabela de VENDA",    "Cad,Alt e Consultar a VENDA", mCAD12 )
AddDownItem( mCAD12,"&1-Tabela de VENDA",    "Cadastrar e Alterar Tabela de VENDA",{ || PESQTABV("N") } )
AddDownSep ( mCAD12)
AddDownItem( mCAD12,"&2-Alterar Pre‡o",      "Cadastrar e Alterar Tabela de VENDA",{ || PESQTABV("E") } )
AddDownSep ( mCAD12)
AddDownItem( mCAD12,"&3-Imprimir Tabela",    "Imprimir Tabela de Venda",{ || RELPRO200() } )
AddDownSep ( mCAD1)
AddDownItem( mCAD1 ,"&3-COMPRA Diferenciada","Cad,Alt e Consultar Tabela Diferenciada",mCAD13 )
AddDownItem( mCAD13,"&1-Cadastrar/Alterar",  "Cad e Alt Tabela Diferenciada",{ || TABELADIFC() } )
AddDownSep ( mCAD13)
AddDownItem( mCAD13,"&2-Imprimir Tabela",    "Imprimir Tabela Diferenciada",{ || RELTABDI() } )
AddDownSep ( mCAD1)
AddDownItem( mCAD1 ,"&4-VENDA Diferenciada", "Cad,Alt e Consultar Venda Diferenciada", mCAD14 )
AddDownItem( mCAD14,"&1-Cadastrar/Alterar",  "Cad e Alt Venda Diferenciada",{ || TABELADIFV() } )
AddDownSep ( mCAD14)
AddDownItem( mCAD14,"&2-Imprimir Tabela",    "Imprimir Venda Diferenciada",{ || RELTABDIV() } )

*******************************************************************************
* MENU FERRAMENTAS
*******************************************************************************
AddDownItem( mFER, "&Dados da Empresa",           "Controle dados da Empresa" ,{ || dados() } )
AddDownSep ( mFER )
AddDownItem( mFER, "&Controle de Senhas",         "Controle de SENHAS" ,mFER1 )
AddDownSep ( mFER )
AddDownItem( mFER1, "&1-Incluir Usuarios",        "Incluir Usuario", {|| FUNSENHA("I")})
AddDownItem( mFER1, "&2-Alterar Usuarios",        "Alterar Acessos do Usuario", {|| FUNSENHA("A")})
AddDownItem( mFER1, "&3-Excluir Usuarios",        "Exclui  Usuarios", {|| FUNSENHA("E")})
AddDownItem( mFER,  "&Reindexar Banco de Dados",  "Reindexar Banco de Dados",{ || indexa() } )
AddDownSep ( mFER )
AddDownItem( mFER,  "&Copia de Seguranca",        "Copia de Seguranca", mFER2 )
AddDownItem( mFER2, "&1-Fazer Back-up",           "Efetua uma Copia o Banco de Dados",{ || back_up() } )
AddDownItem( mFER2, "&2-Retornar Back-up",        "Retorna uma do Copia de Dados",{ || RESTORE() } )
AddDownSep ( mFER )
AddDownItem( mFER, "&Parametros do SISTEMA",      "Parametros do Sistema ",{ || PARAMETROS() } )
AddDownSep ( mFER )
AddDownItem( mFER, "&Manual do Sistema SAGI",     "Manual do Sistema ",)
AddDownSep ( mFER )
AddDownItem( mFER, "&LogOn do Sistema SAGI",      "Login do Usuario",{||SENHACE("E")} )

*******************************************************************************
AddBarItem( mBar, "C&adastro",                    "Sistema de Cadastros Geral",mCAD )
AddBarItem( mBar, "&Ferramentas",                 "Manutencao do Sistema",mFER )
BarMenu( mBar )
Qualquer duvida prende o grito......Abraços
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
acelconsultoria
Usuário Nível 3
Usuário Nível 3
Mensagens: 231
Registrado em: 10 Jan 2006 17:05
Localização: Itápolis-SP

Mensagem por acelconsultoria »

Fladimir...


O menu do meu sistema é grande tbem, e eu o coloco em outro PRG.

O erro que está dando não é BUG, e sim pq excedeu o limite de símbolos que o compilador aceita para gerar o OBJ.

Eu faço o seguinte:

SIS.PRG // SISTEMA PRINCIPAL
(... )
CRIA_MENU() // função que define os menus
(...)
QUIT
RETURN




SISMENU.PRG // ARQUIVO QUE POSSUI A FUNCAO DE GERAR O MENU
FUNCTION CRIA_MENU()
(...) // DEFINE A BARRA DE MENU, MENUS E SUB-MENUS.
RETURN

Aí é só compilar. Meu programa tem uns 120 PRGs, divididos em 8 arquivos CLP. Só que arquivos grandes, como o gerador de índices, criador de tabelas e gerador de menus, eu coloco isolados, pq são grandes.

Por exemplo:

Conteúdo do SIS1.CLP

sis.prg
funcoes.prg
sismenu.prg


Conteúdo do SIS2.CLP

siscad1.prg
siscad2.prg
siscad3.prg
(etc... até o SIS8.CLP)


Após isso eu criei um BAT que faz a compilação:

COMP.BAT
@ echo off
clipper @sis1
if not errorlevel 1 clipper @sis2
if not errorlevel 1 clipper @sis3
if not errorlevel 1 clipper @sis4
if not errorlevel 1 clipper @sis5
if not errorlevel 1 clipper @sis6
if not errorlevel 1 clipper @sis7
if not errorlevel 1 clipper @sis8
if not errorlevel 1 rtlink fi sis1, sis2, sis3, sis4, sis5, sis6, sis7, sis8 lib vl2_52e
echo on



Espero ter ajudado !!! :)Pos
Adm. Maickon Sato
Consultoria e Projetos
-------------------------------------------------------
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Mensagem por fladimir »

Amigos Sygecom e AcelConsultoria, primeiramente muito obrigado pela atenção estou em viagem e assim que retornar daki alguns dias vou testar as dicas e depois posto os resultados, agradeço mesmo a disposição em responder.


Atenciosamente e Sucesso... e vamos já começar com a tradicional frase: "Boas Festas a Todos"
Responder