Claro. Eu fiz um formulário que basicamente tem botões que abrem
outros formulários. Para tanto deve-se
1. copiar e colar o código que segue num módulo criado,
preferencialmente em Minhas Macros (pois versões futuras do OpenOffice
não mais suportarão macros guardadas dentro de documentos, se não me
engano)
2. Abrir as propriedades do botão e na aba Eventos, clicar do lado de
"botão do mouse pressionado" e selecionar,  a macro
AbreColoqueAquiNomeDoFormulário
3. Mas tem que alterar o código da sub AbreMain, para condizer com o
nome do formulário e com o nome do banco de dados. Outras subs que
necessitam de pequena alteração para rodar são
Inicializa_Formulario_Main e Inicializa_Variaveis_Main
4. No formulário original foi colocada uma chekbox, com nome
"ckbDesign" que quando ativada abre o formulário no modo de edição, e
quando desativada abre no modo normal
5. No evento "ao carregar" do formulário foi colocada a sub
Inicializa_Formulario_Main que deixa a "ckbDesign" desativada por
default, aí não corre o risco de um usuário desavisado abrir o
formulário no modo Design por engano

A seguir, o código:
public Forma
public ckbDesign

Sub AbreMain
        local_openMode=Retorna_openMode
        subDisplayForm("sdbc:odbc:ColoqueAquiNomeDoBD","Main",local_openMode)
end sub

sub Inicializa_Formulario_Main
        Inicializa_Variaveis_Main
        if(not IsEmpty(ckbDesign)) then
                ckbDesign.State = 0
        end if
end sub

Sub Inicializa_Variaveis_Main
        'verifica se variaveis estão inicializadas, caso contrário inicializa-as
        'são os objetos (caixas de texto, checkbox etc) que são acessadas por
outras funções/subs
        if((not IsObject(Forma)) or IsNull(Forma)) then
                Forma = ThisComponent.DrawPage.Forms.getByIndex(0)
                ckbDesign=Forma.GetByName("ckbDesign")
        end if
end sub

sub subDisplayForm(sDatabaseURL as string, sFormName as string,
openMode as string)
        'Abre um formulário do documento Base atual localizada no documento
Base sDataBaseURL
        dim mArgs(1) as new com.sun.star.beans.PropertyValue
        oDatabase = fnGetOpenDatabase(sDatabaseURL)
        if (not isObject(oDatabase)) then
                MsgBox("Formulario nao pode ser aberto. Feche esta janela e abra
pela guia Formulario do Base")
                Exit Sub
        end if
        oConnection = oDatabase.DataSource.getConnection("","")
        mArgs(0).name = "OpenMode"
        mArgs(0).value = openMode   ' open "openDesign"   '   '"openForMail"
        mArgs(1).name = "ActiveConnection"
        mArgs(1).value = oConnection
        oForm = oDatabase.getFormDocuments.getByName(sFormName)
        'oForm.visibilityChanged(true)
        oDatabase.getFormDocuments.loadComponentFromURL(sFormName, "_blank",
0, mArgs())
end sub

function fnGetOpenDatabase(sDatabaseURL as string)
        'Acessa o documento Base sDatabaseURL. Na verdade sDatabaseURL é 
ignorada
        'pois retorna o primeiro banco de dados encontrado. Por isso, esta macro
        'só pode ser executada com um único documento do Base aberto, ou se
        'tiver mais de um, não dá pra garantir que será retornado o certo
        'e se não tiver nenhum documento aberto esta macro não pode ser 
executada
        'pois foi feita para rodar dentro de um formulário do Base
oEnum = StarDesktop.getComponents.createEnumeration
On Error goto next_while
while oEnum.hasMoreElements
   oPosDB = oEnum.nextElement
'   MsgBox oPosDB.ImplementationName
   if ((not isEmpty(oPosDB)) and isObject(oPosDB)) then
        if 
(StrComp(oPosDB.ImplementationName,"com.sun.star.comp.dba.ODatabaseDocument")=0)
then
'      if (oPosDB.DataSource.URL = sDataBaseURL)then
         fnGetOpenDatabase = oPosDB
         exit function
'      end if
    end if
   end if
        next_while:
wend
end function

Function Retorna_openMode as string
        'verifica se a ckbDesign etá checkada para abrir os formulário no
modo design (para edição) ou no modo somente-leitura
        On Error goto Oops
        Inicializa_Variaveis_Main
        if(ckbDesign.State = 1) then
                Retorna_openMode = "openDesign"
        else
                Retorna_openMode = "open"
        end if
        goto myend
        Oops:
        Retorna_openMode = "open"
        myend:
end function

2008/7/15 Marcelo nunes dos santos <[EMAIL PROTECTED]>:
> alguem sabe me dizer se tem como eu criar no base um formulario com varios
> botoes que quando clico neles eles chamam outro formulario.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>



-- 
Juari Ritter Müller - [EMAIL PROTECTED] - Tudo não é nada.
jm.freeshell.org nothepad.wordpress.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Responder a