Trabalhando com bibliotecas

Seguinte, “acho” que criei uma biblioteca:

<library>
	<!-- mensagem de aviso -->
	<class name="msgAviso" texto="" bgcolor="blue" visible="false">
		<view x="10" y="10" bgcolor="white"
			  width="${parent.width-20}" heigth="${parent.height-20}">
			  <text align="center" valign="middle">texto</text>	
			  <button align="right" valign="bottom" style="{basecolor:blue}" 
			          text="OK" width="100" onclick="parent.setVisible(false);"/>
	     </view>
	</class>
	
</library>

E chamo uso ela da seguinte forma:

...
<include href="lib.lzx"/>


....


<msgAviso texto="Empresa não cadastrada" name="msg1"/>
...

Mas quando eu abro a pagina, soh aparece a seguinte msg de erro:

O q q eu fiz de errado, e como eu crio uma biblioteca…

<!-- 
   @Class: msgAviso
-->
<library>
   <!-- mensagem de aviso -->
   <class name="msgAviso" texto="" bgcolor="blue" visible="false">
      <view x="10" y="10" bgcolor="white"
           width="${parent.width-20}" height="${parent.height-20}">
           <text align="center" valign="middle">texto</text>   
           <button align="right" valign="bottom" style="{basecolor:blue}"
                   text="OK" width="100" onclick="parent.setVisible(false);"/>
        </view>
   </class>   
</library> 

use como nome o seguinte estilo: msgAviso.class.lzx

use como padrão tambem concentrados de importe, deixe esse arquivo no mesmo diretorio dos arquivos
*.class.lzx, use como padrão o seguinte nome: library.lzx

<!-- 
   @Description: concentração dos imports da biblioteca
-->
<library>
   <include href="msgAviso.class.lzx"/> 
</library> 

e na sua classe você aponta para o concentrador: library.lzx

caso a classe esteja no mesmo diretorio da outra classe basta utilizar a seguinte linha:

<include href="/"/>

caso esteja em outro diretorio indique o caminho do diretorio onde possui um library.lzx

ps.: vc escreveu heigth, mas o correto é height… :wink:

Cara, não entendi nada do q vc falou…

Usar como nome do que, do arquivo?
Concentrados de importe, concentrador??? qq é isso?

Cara, se possivel, coloca uns exemplos ai…

vlw…

bom vou tentar explicar :razz:

partindo que temos a seguite estrutura na nossa aplicação web
isso dentro do diretorio /webapps do tomcat, por exemplo…

/nomeDoProjeto
   /WEB-INF
      /lib  { *.jar }
      /classes { *.class }
      /src { *.java }
   /laszlo { *.lzx }
      /class { *.class.lzx | definição de 1 classe por arquivo, dentro da tag library }
      /view { *.class.lzx | ou vc pode usar *.view.lzx }

      main.lzx { o que me referi ao equivalente ao método main, tag canvas }

definição de classes que servirão como componente colcocar
estas dentro de /nomeDoProjeto/laszlo/class

como por exemplo, customView.class.lzx:

<library>
   <class 
         name="customView" 
         width="100" height="100"
         bgcolor="black"
         extends="view">
      <attribute name="texto" type="string" />
      <text 
         name="texto" 
         text="${ classroot.texto }" 
         fgcolor="white" />
   </class>
</library>

o concentrado que me referi é um esquema para facilitar o acesso
a essas classes definidas onde você define um arquivo library.lzx
por diretorio onde o seu conteudo para este caso seria:

<library>
   <include href="customView.class.lzx" />
</library>

nesse momento teriamos a seguinte estrutura:

/nomeDoProjeto
   /WEB-INF
      /lib  
      /classes 
      /src 
   /laszlo 
      /class 
         library.lzx
         customView.class.lzx
      /view 
      main.lzx 

agora para você utilizar todas as suas classes definidas no diretorio
/nomeDoProjeto/laszlo/class, onde as classes foram concentrados
os includes no arquivo library.lzx basta definir por exemplo no seu
main.lzx:

<canvas>
   <!-- incluindo todas as classes concentradas no diretorio class -->
   <include href="/class" /> { essa referência irá recuperar o arquivo library.lzx }

   <!-- utilizando a classe definida -->
   <customView name="iCustomView" texto="teste" />

   ... { outras tags do arquivo } 
   
<canvas>

será que agora consegui explicar um pouco melhor :roll:
alguma duvida ali, dai soh falar :wink:

Eheh…agora eu intindi… :wink:

Mas isso é soh para padronizar mesmo neh…pq eu arrumei aquele codigo lah de cima, e funcionou; mas eu fiz direto, tipo, se criar essa estrutura…

Cara, tenho mais uma pergunta…

Seguinte…Tipo, eu vou criar minhas bibliotecas e tal…dai vamos supor que eu faça (dentro de uma biblioteca), umas telinhas cheio de fru-fru-fru…meio pesadinhas…bem, eu vou importar ela, certo…mas vamos supor q essa tela seja uma telinha para msg de erro, ou seja, pode ser q ela não apareça no sistema…bom, quando eu carregar a tela principal (que vai estar importando essa tela de erro), vai ficar pesado por causa dessa tela, ou ela vai ser criada apenas quando eu chamar ela, como acontesse com MDI?

importar você apenas indicará a classe…

para instanciar o objeto existe 2 maneiras
declarando a tag diretamente no canvas,
ou fazendo isso dinâmicamente usando scripting…

de um olhada na documentação que tem exemplo
de como fazer isso

ps.: melhora a performance de certa forma,
o que efetivamente deixa a aplicação mais pesada inicialmente
são os recursos graficos que você utiliza nos componentes
quanto maior a quantidade/variedade de recursos graficos
você utilizar pode deixar ou não mais pesado a aplicação
para um primeiro acesso, esse recursos graficos tambem
existe a possibilidade de carrega-los dinâmicamente
sob demanda no servidor

isso deixa a aplicação mais leve para um acesso inicial
mas em termos de uso mais adiante consome mais tempo
para finalizar 100% a leitura desses recursos gráficos do servidor

Ta, mas se eu importar uma classe e/ou fazer uma chamada a ela, os recursos graficos dessa classe serão iniciados junto com o main? Por exemplo, eu importo a classe:

<iclude href=“minhaClasse”/>

dai faço uma chamada

<minhaClasse visible=“false”/>

ai em um botão eu coloco o script:

<button onclick"canvas.minhaClasse.setVisible(true);"/>

Os recursos graficos de minhaClasse serão iniciados junto com mieu lzx primcipal (que faz a chamada)?

nesse formato ae, usando a definição basica de
uso de imagens vai carregar sim :razz:

hum, intaum a melhor forma seria chamar um outro link quando eu quisesse chamar uma outra tela…tipo, eu tenho a tela princpal, e vou abrir a tela de venda…intaum eu abro um outro link…seria isso?

Se for, como eu faço para abrir um link em nova janela?

a melhor forma é você estudar uma estratégia para modela a sua interface
tem como você trabalhar em formato MDI, instanciando dinamicamente
as suas respectivas classes para poupar o processamento inicial
para inicio da aplicação na maquina do usuário e tambem os recursos
gráficos da sua aplicação tem como você defini-los de modo que eles
não sejam compilados junto com o swf o que causa aumento do tamanho
do arquivo, tem como deixa-los no servidor e pela Laszlo
requisitá-los em tempo de execução carregando a parte gráfica em
partes

mas a melhor estratégia é uma boa definição de que maneira
e mais eficaz para cada tipo de cenário que a sua aplicação
será focada…

caso seja uma em ambiente intranet, não se preocupe tanto
quanto a tamanho, aplicações como a interface do e-LIB
ficam com tamanhos entre 500 a 800 KB, mas procure
estudar como fazer instanciação dinamica de classes através de
script

:arrow: ver documentação LINK

:wink:

estava lendo a documentação agora
vi que tem uma tag para poder realizar o import
das bibliotecas dinâmicamente

segue o link:
4. The <import> tag for runtime includes

interessante :wink:

quanto a parte de como trabalhar com classes olhe:
Capitulo 25
especificamente o item 4. Creating objects from script

Cara, sobre o primeiro link, ele não esta funcionando…

E sobre o segundo, muito interessante, mas para poder usar a classe, mesmo assim eu devo importar ela, certo? e se eu apenas importar, ela jah naum vai carregar os recursos graficos na inicialização?

corrigi o primeiro link…

se vc importar ele vai incluir o recurso grafico no swf gerado da compilação…
mas se vc não importar não tem como usar depois

de uma olhada agora no primeiro link
me parece q tem como gerenciar o import tambem
pelo menos foi o que me pareceu pelo
que li rapidamente no conteudo do primerio link :wink:

ps.: a aplicação do tipo MDI seria como esta do seguinte link:
http://www.r2tecnologia.com.br/erko/openlaszlo/jwindow/

Cara, aquelas janelas são carregadas dinamicamente ou junto com a tela principal. A, e como eu faço umas telinhas legais iguais aquelas…se possivel, me mostre um exemplo

os recursos gráficos são carregados junto com toda a aplicação

mas a instanciação dos objetos da classe são dinamicos
como no link que você viu

quanto a exemplo é um tanto complicado
pois o codigo é bem complexo e ainda está em fase
de codificação :razz:

outro detalhe a janela é composta por mais de uma classe
o que é um dos fatores de sua complexidade

Cara…e se fosse fazer por links…

Exemplo. No menu q chama a tela de clientes, colocar um link para outro arquivo, q abre em uma nova janela do navegador, pois se o cliente usa ff, oper, safari, ou outros com abas, ficara interessante, e bem leve…qual sua opinião?

dependedo do jeito que vc elaborar a interface sim
como exemplo de algo do mesmo genero que você comentou
tem o Laszlo-Explorer

± assim tambem tem como fazer :wink: