• advertisement_alt
  • advertisement_alt
  • advertisement_alt

Mello Junior

Members
  • Content count

    33
  • Joined

  • Last visited

Community Reputation

30 Excellent

About Mello Junior

  • Rank
    Aprendiz
  1. Dependendo da versão do WD, você pode utilizar o controle de planilha direto, onde você pode após tudo montado gravar o arquivo, não precisa nem ter o excel instalado na máquina. Na 23, por exemplo, vá no menu creation, Graphic controls, Office e opte por "spreadsheet" att
  2. Creio que já foi resolvido. []´s
  3. Experimentou deixar controles de imagens fora da window para utilizá-los? []´s
  4. Por uma questão de propriedades, em static voce consegue alterar a cor do background e cor da fonte, mas do controle e não especificamente do texto. Como o Cassiano colocou, se deseja trabalhar com texto enriquecido como negritos, itálicos, fontes diferenciadas em um só controle, deve priorizar em utilizar static_rtf []´s
  5. pdf

    Tentou utilizar como se fosse uma imagem? ImageInfoList Exif
  6. Nunca utilizei da forma automática, creio que na manual você será bem mais feliz, tem um procedimento para enquanto estiver arrastando e outro para quando soltar. Meio chato de pegar o jeito, mas fica bem tranquilo depois.
  7. Até fui conferir. Tem um exemplo na 23, RTFtoHTML
  8. O que fiz foi criar em uma thread separada, tipo OPENSYSTER e ali o usuário vai colocando as notas em uma "Totem", ele grava em nível de terminal e não há muita administração sobre as mesmas, mas os usuários adoraram. Att
  9. Só para complementar. Nesse caso imagine uma pilha de tijolos onde o tijolo mais próximo da terra tem o índice de número 1. Se você for removendo os tijolos de baixo para cima (do começo para o final) o que ocorre quando remove o primeiro tijolo? O Tijolo que tinha o índice número 2 passar a ser o 1, o tijolo de número 3 passa a ser o dois e o 1 não existe mais,Na realidade o índice 1 mudou de dono no meio do processo. Por esse motivo é que não se pode remover do começo para o final em uma tabela, deve-se remover do final para o início. Abraços
  10. O acesso é realizado pela aplicação e pelo projeto em seu ambiente de desenvolvimento? Att
  11. Você instalou o driver do MySQL no Windev? []´s
  12. Olá, Quando você tem um SGBD tomando conta dos dados, ele é quem deve saber se determinada ação é possível ou não, isso lhe dará a tranquilidade de manter a integridade dos dados, mesmo que elabore uma outra aplicação que trate da mesma tabela, a atitude será a mesma sempre. Att
  13. Pode também trabalhar com bandeira (variáveis boolean) Ao inicializar a Window crie uma variavel assim: NaoQueroFechar is boolean = False Então no evento close da janela if NaoQueroFechar=False then Return end Por fim, no botão cancelar ou algum outro do Tipo, coloque: NaoQueroFechar =True Close() Att
  14. Bom Dia, Se for em tempo de Projeto, vá na análise e abra a conexão, em seguida editando as propriedades, vá na guia Advanced e coloque: Port=3126 (ou a porta desejada) Se for em tempo de execução, coloque na seguinte propriedade: SuaConexao..ExtendedInfo = "port="+3126 // ou a porta desejada. Att
  15. Olá Pessoal, Eu sei que nem todos gostam do Windows, aliás chamam de Ruindows, mas temos de aprender a tirar proveito das coisas e uma delas é aprender como basicamente o Windows fez para obter o máximo com o menos possível. Em tese uma janela é uma função complexa porque interage com nosso inimigo público número 1, o usuário, esse elemento é capaz de nos destruir em pouquíssimo tempo de demonstração de software. Mas olhando de uma forma mais dinâmica, eu preciso saber o que o usuário fez e se ele me dá sinal verde para continuar ou não dentro do programa. Então uma WINDOW é fundamentalmente uma função que deve retornar True (sucesso) ou False (abortar) e como devemos então obter valores? Simples, utilizando ponteiros. Um ponteiro é simplesmente um endereço de memória não interessa qual o tipo, aliás isso pode ser decidido dentro do próprio procedimento. Vamos a prática. Preciso de uma WINDOW para pegar usuário que fez login, não me interessa nesse momento se ele acertou a senha ou se precisou ser lembrado dela, preciso saber da WINDOW qual o usuário logado em caso de sucesso. vamos fazer a chamada assim: GloUsuario is string = "" IF Open(WIN_LOGIN, GloUsuario)=False then endprogram() end //Nesse momento eu já sei que os procedimentos de recepção do usuário e que este está habilitado para executar nossa aplicação e principalmente em GloUsuario tenho o nome dele. INFO(StringBuild("O USUÁRIO LOGADO É %1", GloUsuario)) O ponto da questão aqui é o seguinte, ao passar a variável GloUsuario como parâmetro para a WIN_LOGIN, o que foi para lá não foi o conteúdo dela e sim o endereço da memória que ela se encontra, e como houve sucesso o seu retorno, indica que o conteúdo foi preenchido dentro da WIN_LOGIN, nada mais me interessa nesse momento. Agora, dentro da Procedure WIN_LOGIN, vamos analisar a primeira linha assim: Olá Pessoal, Eu sei que nem todos gostam do Windows, aliás chamam de Ruindows, mas temos de aprender a tirar proveito das coisas e uma delas é aprender como basicamente o Windows fez para obter o máximo com o menos possível. Em tese uma janela é uma função complexa porque interage com nosso inimigo público número 1, o usuário, esse elemento é capaz de nos destruir em pouquíssimo tempo de demonstração de software. Mas olhando de uma forma mais dinâmica, eu preciso saber o que o usuário fez e se ele me dá sinal verde para continuar ou não dentro do programa. Então uma WINDOW é fundamentalmente uma função que deve retornar True (sucesso) ou False (abortar) e como devemos então obter valores? Simples, utilizando ponteiros. Um ponteiro é simplesmente um endereço de memória não interessa qual o tipo, aliás isso pode ser decidido dentro do próprio procedimento. Vamos a prática. Preciso de uma WINDOW para pegar usuário que fez login, não me interessa nesse momento se ele acertou a senha ou se precisou ser lembrado dela, preciso saber da WINDOW qual o usuário logado em caso de sucesso. vamos fazer a chamada assim: GloUsuario is string = "" IF Open(WIN_LOGIN, GloUsuario)=False then endprogram() end //Nesse momento eu já sei que os procedimentos de recepção do usuário e que este está habilitado para executar nossa aplicação e principalmente em GloUsuario tenho o nome dele. INFO(StringBuild("O USUÁRIO LOGADO É %1", GloUsuario)) O ponto da questão aqui é o seguinte, ao passar a variável GloUsuario como parâmetro para a WIN_LOGIN, o que foi para lá não foi o conteúdo dela e sim o endereço da memória que ela se encontra, e como houve sucesso o seu retorno, indica que o conteúdo foi preenchido dentro da WIN_LOGIN, nada mais me interessa nesse momento. Agora, dentro da Procedure WIN_LOGIN, vamos analisar a primeira linha assim: PROCEDURE MyWindow(GS_USUARIO) //Repare que nem o nome do argumento é o mesmo, mas o WINDEV sabe que foi passado um endereço e automaticamente associa esse endereço ao nome GS_USUARIO que na realidade ficou no procedimento que o chamou. MyWindow..ReturnedValue = False //Esse código é para garantir o retorno de sucesso ou falso caso o nosso inimigo resolva cancelar a execução da WINDOW (clicando em cancel ou no X de fechamento) Tudo pronto, então vamos direto para o código do botão validate: //Ao clicar no botão validate, vamos testar no nosso exemplo se pelo menos o usuário colocou algum preenchimento sobre o nome do LOGIN, mas poderia testar se a senha estaria correta, se o usuário existe em uma tabela pré determinada e etc ... IF Length(LOGIN)=0 THEN Info("Imbecil, pelo menos preencha o nome do usuário") ReturnToCapture(LOGIN) END //Feito isso, vamos informar ao nosso procedimento que houve sucesso na intenção de capturar o nome do usuário MyWindow..ReturnedValue = True //IMPORTANTE, como o usuário informou o nome do LOGIN, vamos escrever na variável CHAMADORA o nome informado. GS_USUARIO = LOGIN //Mando fechar simplesmente o Procedimento. Close() O Close está em um botão para que seja chamado o evento close da Window, o código não está lá porque precisamos ter segurança que foi pelo pressionamento do botão VALIDATE. Apenas para constar, podemos passar quantos parâmetros desejar, até mesmo uma array inteira, lembrando que a definição dessa variável é de responsabilidade do procedimento chamador e não do procedimento chamado que apenas faz uso dela (mesmo que esteja com outro nome) Abraços