Ir para conteúdo
Fórum Script Brasil

jxfdasilva

Membros
  • Total de itens

    95
  • Registro em

  • Última visita

Tudo que jxfdasilva postou

  1. Boa noite Jhonas, Por acaso sabes de algum Plugin do Google Earth para Delphi, ou que se possa usar me Delphi? Abraço José O Africano
  2. Viva Jhonas, De facto tem umas aplicações interessantes, Mas aquilo que pude ler, muma leitura trasnversal, parece-me que nõa sera exactamente o que procuro. Em todo o caso vou dar uma vista de olhos mais aprofundada. Para ter uma ideia mais concreta do que procuro, aqui vão os detalhes: A ideia é usanod o DELPHI, abrir dentro o Google Earth (vi aguns projectos usando o Google maps), e, usando o KML, ir actualizando as cordenadas. Exemplo do XML: <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>KmlFile</name> <Style id="transPurpleLineGreenPoly"> <LineStyle> <color>7fff00ff</color> <width>4</width> </LineStyle> <PolyStyle> <color>7f00ff00</color> </PolyStyle> </Style> <Placemark> <name>Absolute</name> <visibility>1</visibility> <description>Transparent purple line</description> <styleUrl>#transPurpleLineGreenPoly</styleUrl> <LineString> <tessellate>1</tessellate> <altitudeMode>absolute</altitudeMode> <coordinates> // aqui vai recebendo as coordenadas em tempo real... -112.265654928602,36.09447672602546,2357 -112.2660384528238,36.09342608838671,2357 -112.2668139013453,36.09251058776881,2357 -112.2677826834445,36.09189827357996,2357 -112.2688557510952,36.0913137941187,2357 -112.2694810717219,36.0903677207521,2357 -112.2695268555611,36.08932171487285,2357 -112.2690144567276,36.08850916060472,2357 -112.2681528815339,36.08753813597956,2357 -112.2670588176031,36.08682685262568,2357 -112.2657374587321,36.08646312301303,2357 </coordinates> </LineString> </Placemark> </Document> </kml> Como se pode observar as coordenadas são sendo actualizadas em tempo real. Pois bem, o pretendo é receber um input do GPS na aplicação DEPLHI, e fazer com que estas coordenadas sejam actualizadas (Se quiserem experimentar é só copiar o código para o Notepad e guardar com uma extensão .KML e clicar em cima. Automaticamente abrira o Google Earth). Neste código dá um exemplo: ... <description>Por favor selecciona a região que gostaria de ver:</description> <NetworkLink> <name>Africa</name> <visibility>0</visibility> <open>1</open> <Url> <href>http://www.umexemplo.com/XXXX</href> <refreshMode>onInterval</refreshMode> <refreshInterval>60</refreshInterval> </Url> </NetworkLink> ... Neste caso uso um href para importar os dados com um refrescamento. O que idealizo é exactamente abrir o Google Earth no DELPHI e usando uma forma de actualizar as coordenadas. Bem, é uma ideia que tenciono explorar. Abraço José O Africano
  3. Viva companheiros, Estou a tentar fazer um projecto (para já é ainda um esboço) em Delphi onde preciso de usar o KML (visualizado no Google Earth). O KML utiliza uma estrutura de tags com elementos e atributos baseado no padrão XML. A questão é que preciso de actualizar a minha tabela XML todos os segundos de forma a actualizar as coordenadas que vou recebendo via socket ou porta COM. Alguém já tentou algo semelhante? ABRAÇO José O Africano
  4. jxfdasilva

    Arvore binaria

    Boa tarde... Ate agora tenho isto: public Iterator Iterator() { return new InorderIterator(); } private class InorderIterator implements Iterator { private Stack nodeStack; private Node currentNode; public InorderIterator() { nodeStack = new Stack(); Node root = null; currentNode = root; } public boolean hasNext() { return !nodeStack.isEmpty(); } public Object next() { Node nextNode = null; while (currentNode != null) { nodeStack.push(currentNode); currentNode = (Node)currentNode.left; } if (!nodeStack.isEmpty()) { nextNode = (Node) nodeStack.pop(); currentNode = (Node)nextNode.rightChild; } return Node.data; } public void remove() { throw new UnsupportedOperationException(); } } } Mas to com problemas e o next do iterator. Se puderem ajudar fico grato, Abraço.
  5. jxfdasilva

    Arvore binaria

    Boa noite gente boa, Preciso de uma pequena ajuda. Preciso de construir algumas métodos em Java para uma árvore binária usado : PrefixIterator e Infixo Iterarator. Claro que preciso do Hasnext e o next para completar a classe e os métodos. Se puderem contribuir, fico grato. Abraço José África
  6. jxfdasilva

    notação sufixa

    Bom dia companheiros, preciso de uma ajudo vossa na criação de um método em JAVA para o seguinte: Introdução As expressões algébricas podem ser escritas de variadas formas. Na forma que deverá estar mais habituado a ver, a notação infixa, o operador é escrito entre os operandos: 1 + 2 Uma notação alternativa, a sufixa, escreve o operador após os operandos: 1 2 + Esta notação dispensa o uso de parêntesis visto as operações serem efectuadas assim que um operador é especificado. Entre outras vantagens, é uma solução que minimiza os acessos à memória e efectua os cálculos mais eficientemente. No caso limite é possível construir uma calculadora de notação sufixa com apenas três registos, dois para guardar dois números e um terceiro para guardar um resultado temporário de um operador binário, e isto para expressões de complexidade arbitrária. Devido às suas vantagens, durante as décadas de 60 e 70, esta notação atingiu alguma popularidade, tendo inclusivamente existido algumas calculadoras de notação sufixa para o grande público. O desenvolvimento de um algoritmo que permite converter notação infixa para notação sufixa contribuiu para essa popularidade. Esse algoritmo é descrito de seguida. O algoritmo recebe uma string, com os vários tokens que compõem a expressão na notação infixa (1, + e 2 no exemplo acima), e devolve outra string, com a expressão na notação sufixa. Enquanto houver tokens para ler Ler o próximo token Se o token for um operando Acrescentá-lo à string de saída Se o token for um operador, o1 Enquanto houver um operador o2 no topo da pilha com precedência maior que o1 Retirar o2 da pilha e acrescentá-lo à string de saída Colocar o1 no topo da pilha Se o token for '(' Acrescentá-lo ao topo da pilha Se o token for ')' Enquanto o operador no topo da pilha não for um '(' Retirar operadores do topo da pilha e acrescentá-los à string de saída Retirar o '(' do topo da pilha Quando não houver mais tokens para ler Enquanto houver operadores na pilha Retirar operadores do topo da pilha e acrescentá-los à string de saída Se poderem postar algumas dicas, agradeço. Eu não domino JAVA (trabalho com DELPHI ). Abraço a todos. José África - Moçambique
  7. Viva Companheiros, Obrigado pela dica. Usei a explicação do Micheus, que resultou em pleno. Apenas referir para enfatizar, se me permites, que na utilização dos registos, no meu caso foi necessário mudar os paths. Onde antes seria "c:\program\delphi7se\Bin\applet70.bpl\'', tive que renomear para ...\program files\... . Depois aonde por exemplo, "C:\Documents and Settings\jose\Desktop\Componentes Delphi\ToolsAndComps\UsersCSLite\Delphi7\ucs_lite.bpl", como o anterior PC o windows esta em Português, naturalmente "Desktop" era "Ambiente de Trabalho".... Pequenas alterações que como referenciou o Micheus, obriga a um pouco de paciência e cuidado, uma vez que estamaos a mexer no registo do Win. Depois destas cuidadosas correcções, aparece tudo bonitinho... Valeu Micheus e Jhonas pela dica. Abraço a todos. José
  8. Boas Companheiros, Vou tentar mais logo digo algo. Neste momento estou fora. Abraço José
  9. Boa Noite Companheiros, Tenho o DELPHI 7 instalado num PC e preciso de instalar num outro computador também. Acontece porém que já tenho instalado uma data de componentes e gostaria de economizar tempo. Alguém sabe como copiar e registar todos os componentes que já tenho instalado no meu PC para um outro PC sem ter que fazê-lo um a um? Abraço José
  10. jxfdasilva

    Voltei!

    Companheiros, Cá estou eu de volta depois de longa ausência. Um abraço a todos e um especial para o camarada Micheus. José Africa minha.
  11. Boa Noite Companheiros, Gostaria de entender o companheiro Araújo, assim... Quando você quer gerar este executável? Quando corre a 1ªvez? Isso porque há um processo de durante a instalação você criar/instalar as aplicações que você quer. Seria melhor você deixar claro a sua ideia. Abraços José
  12. Ola Micheus, Espero que esteja tudo bem contigo. O artigo é excelente, dei uma leitura pela diagonal, mas já deu para perceber! Vou ler com mais calma e logo, logo, deixarei o meu comentário. De imediato já da para recomendar a sua leitura a quem se interessa ou precisa de usar portas serias. Aquele Abraço José
  13. Boa Noite companheiros, Podem dar este post como resolvido. Obrigado a todos que de forma directa ou indirecta ajudaram na construção desta aplicação. Abraços José Da Silva
  14. Boa tarde companheiros, Tenho uma pequena dúvida, e já li uma solução, só que já não me lembro aonde e, depois de muito procurar decidi postar a dúvida. Podemos enviar em comunicação varios tipos de streams entre os quais em valores Hexas, Binários, etc., até aí tudo bem. Mas quando queremos programar microcontroladores por vezes é necessário gerar ciclos do género: | |Free |Line 1 |_____ T ______ ____ | | | | | | | | | | 0 | |__| |_________| 1 1 0 0 0 1 onde, 0 e 1 sera 0V ou -10V á +10V (a tensão da porta do PC ), usamos o formato NRZ (Non Return to Zero). É possível gerar estes ciclos em Delphi? Aquele Abraço José
  15. Viva Micheus, Tudo bem, mas acredito que são estes desafios que calcinam o nosso conhecimento em programação. Em todo o caso se alguma duvida subsistir, espero contar com o teu apoio e do restante fórum, pelo menos no que respeita a alguns erros de sintaxe. Tenho já muita informação e vou usar 2 tipos de protocolo: RS232 e TCP/IP. No hardware irá ser controlado por um PIC. A diferença é que ele quer usar algo já feito a nível de hardware, mas eu vou fazer o próprio hardware de acordo com as necessidades. Vamos ver! Aquele abraço, José
  16. Companheiros, Neste momento quero começar um outro projecto mais arrojado que consiste no hardware e numa aplicação. Em jeito de mini mundo, a aplicação recebe os sinais de um GPS via GSM usando o protocolo NMEA 0183 Standard - vide http://helling.files.wordpress.com/2008/01...description.pdf . O utilizador pode verificar a posição da sua viatura num determinado Mapa. A aplicação tem de ter a possibilidade de calibrar Mapa (muito complicada esta parte, mas já tenho o algoritmo!!! :wacko: ), verificar a velocidade, direcção, e, eventualmente, o número de matricula do carro. Naturalmente que teremos uma Base de Dados onde iremos guardar todas estas informações. Já agora se alguém tem mais alguma sugestão que deva estar incluida dentro da aplicação, por favor contribua. Naturalmente que existe um hardware onde receba estes dados e faça o interface com o PC. Para já interessa a aplicação que pode ter a possibilidade de acoplar um GPS portátil. Aquele Abraço :rolleyes: e fico a espera das contribuições para construir o mini-mundo. José O Africano
  17. Viva Micheus, Ainda assim, não basta este código pra identificar qual o cliente que desligou. Apenas dá o endereço do IP e o que eu quero é quem/Cliente, se desconectou , por forma a limpar, quer na Memo2, quer no Lbox(n): if (Pos('Cliente1', ClientId) = 1) and (Pos('exit',HexaValue)=1) then Begin LBox1.Clear; //Apaga os comandos dos clientes que desligam end; e, Memo2.Lines.Delete(ClientIndex-1); Memo2.Lines.Insert(ClientIndex-1,ClientId+' Ausente') Ainda assim, foi útil porque permitiu corrigir o facto de ao desligar um Cliente tornar inoperacional o campo... Aquele abraço
  18. Boa Noite a todos, Na parte modificada do cliente, se bem se lembram, houve a necessidade de enviar os strings do comando de uma outra forma. Assim, as modificações ao código inicial são: Serve para implementar de forma a fazer o switch dos leds da Matriz e de seleccionar a Source. Hexa3:='$AA$55$03$03$1F'; If not LB3.StateOn and LBV.StateOn or LBA.StateOn then Setup.ClientSocket1.Socket.SendText(Format('%s|%s',[Setup.ComboBox1.Text,Hexa3])); end; A seguir o código do comando a enviar com a selecção do Source e Destination Hexa0:=(Header1+VA1+LBSource1+'$00'); If not LB00.StateOn and (LBV.StateOn or LBA.StateOn ) then begin {soluciona o problema do botão acionar o comando com o LED off} Setup.ClientSocket1.Socket.SendText(Format('%s|%s',[Setup.ComboBox1.Text,Hexa0])); // reparem que foi trabalhado a String de forma a ser enviado para o servidor. end; end; Aqui outro pormenor da alteração de forma a receber os hexas '$n' if LB0.StateOn then // só haverá um LBx na posição StateOn begin LBSource1:='$00'; // LBSource := #00; // A solução inicial que foi posta de parte end else Aqui permite controlar a informação nos LCD's alfanuméricos; Reparem no procedimento importando de uma outra Unit. public { Public declarations } procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); .......... .......... .......... procedure TMS8.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); HexaRcv := Socket.ReceiveText; ViAu1:=TrimRight(Copy(HexaRcv, 9, 1)); //Valor do comando Áudio/Vídeo LBS:= TrimRight(Copy(HexaRcv, 12, 1));//Valores dos alfanuméricos LCDValue:=TrimRight(Copy(HexaRcv, 15, 1)); // Valor da posição dos alfanuméricos // Label1.Caption:=HexaRcv; If (ViAu1='3') and (LCDValue='0') then begin LCD02.Indicatorstring := LBS; LCD2.Indicatorstring := LBS; end else begin If (ViAu1='2') and (LCDValue='0') then LCD02.Indicatorstring := LBS else begin If (ViAu1='1') and (LCDValue='0') then begin LCD2.Indicatorstring := LBS; end; end; end; Por último o procedimento na outra Unit que sera chamado na anterior type .... .... .... procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); ..... ..... ..... procedure TSetup.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin MS8.ClientSocket1Read(Sender, Socket); end; Tem de haver uma forma de por estas imagens maiores...!!?? Bem, foi um projecto interessante que contou com a colaboração de todos! Fico, como já disse receptivo a qualquer melhoria a nível de reorganização do código. P.S. Micheus, como a utilização é para o momento - do género faz-se a sessão e depois no outro dia começa tudo de novo -,logo não achei muito importante. Aliás, ficaria bem mais fácil faze-lo através de uma base de dados. Acontece que naquele exemplo, basta desconectar um Cliente e ele desconecta todos. Logo, os Clientes todos são desligados.... não consegui implementar! Abraço José
  19. Boa Noite Companheiros, Ola Micheus, Depois de resolver alguns Bugs no programa, mais de ordem de requisitos do que propriamente de instrução, resolvi postar as partes mais importantes, considerando como satisfeito. Se repararam no Caso de Uso, a aplicação cumpre na totalidade com o objectivo proposto. As maiores dificuldades, para alem do Stress, passa pelo desconhecimento ou falta de informação importante a nível de função e mesmo de instruções e procedimentos. Naturalmente que estes handicaps foram ultrapassados com a ajuda incomensurável do fórum, sem deixar de dar uma palavra de apreço e em particular ao Micheus pelo seu voluntarismo e pedagogismo. Um bem-haja por isso! Devo lembrar que, na falta de soluções a nível de sintaxe e instrução, recorre-se ao poder da imaginação - afinal tão prezada pelo Einstein! Poderá não ser a forma mais bonita, mas de momento é a que funciona. Assim: procedure TForm1.btnServerClick(Sender: TObject); begin ServerSocket1.Active := not ServerSocket1.Active; if ServerSocket1.Active then begin btnServer.Caption := 'Stop Server'; end else begin btnServer.Caption := 'Start Server'; // ao parar o server, as conexões ficam inválidas - limpamos a lista deixando apenas 1ª opção while ComboBox1.Items.Count > 1 do ComboBox1.Items.Delete(1); AtualizaEstado(False); end; end; procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin // adiciona conexão à lista ComboBox1.Items.AddObject(Socket.RemoteAddress, Socket); AtualizaEstado(True); // envia mensagem de conexão aceite, para o socket que conectou-se //Socket.SendText('Conexão aceite'); Socket.SendText(LBox1.Items.Text); //envia comandos existentes para actualização do cliente que iniciaram agora. sleep(1000); //cria uma pausa de 1seg de forma a que os comandos possam se recebidos em condições, caso contrario devido Socket.SendText(LBox2.Items.Text);//a problemas de velocidade os Clientes não iriam receber e interpretar em tempo. sleep(1000); Socket.SendText(LBox3.Items.Text); sleep(1000); Socket.SendText(LBox4.Items.Text); sleep(1000); Socket.SendText(LBox5.Items.Text); sleep(1000); Socket.SendText(LBox6.Items.Text); sleep(1000); Socket.SendText(LBox7.Items.Text); sleep(1000); Socket.SendText(LBox8.Items.Text); end; Neste segundo trexo, permite-nos enviar mensagem aos Clientes: procedure TForm1.btnEnviaClick(Sender: TObject); var Idx :Integer; begin // envia texto para clients if ComboBox1.ItemIndex = 0 then // envia para todos client's conectados begin // para cada Client - Socket está em ComboBox1.Items.Objects[<indice>] for Idx := 1 to ComboBox1.Items.Count -1 do (ComboBox1.Items.Objects[Idx] as TCustomWinSocket).SendText(Edit1.Text); end else // envia para Client selecionado - Socket está em ComboBox1.Items.Objects[<indice>] (ComboBox1.Items.Objects[ComboBox1.ItemIndex] as TCustomWinSocket).SendText(Edit1.Text); Aqui podemos observar a parte já comentada, onde permite dividir a string em partes de forma a reusa-la de acordo com os interesses que veremos adiante begin {aramazena texto recebido em variável } ReceivedMsg := Socket.ReceiveText; // retiramos o primeiro campo: Identificação DelimiterIdx := Pos('|', ReceivedMsg); ClientId := Copy(ReceivedMsg, 1, DelimiterIdx -1); Delete(ReceivedMsg, 1, DelimiterIdx); // retiramos o segundo campo: Comando diverso DelimiterIdx := Pos('|', ReceivedMsg); ReceivedCmd := Copy(ReceivedMsg, 1, DelimiterIdx -1); Delete(ReceivedMsg, 2, DelimiterIdx); // o que sobra é o terceiro campo: Comando Hexa HexaValue := (ReceivedMsg); ContaCaracteres:=(IntToStr(AnsiLength(HexaValue))); { mostra quem enviou e a mensagem no memo1 } Memo1.Lines.Add(Format('De: %s > %s', [Socket.RemoteAddress, HexaValue])); Memo1.SelStart := Length(Memo1.Lines.Text); De uma forma imaginativa, foi resolvido o problema de adicionar os Clientes chegados e apagar os que desligam, de forma precisa. Vejam a utilização do procedimento anterior em acção. if (Pos('Cliente1', ClientId) = 1) and (ContaCaracteres='15')then //Serve para enviar aos recém-chegados Begin //Clientes, de forma a actualizar as posições do grupo LBox1.Clear; LBox1.Items.Add(HexaValue); end; if (Pos('Cliente1', ClientId) = 1) and (Pos('exit',HexaValue)=1) then Begin LBox1.Clear; //Apaga os comandos dos clientes que desligam end; Muito importante, por isso merece um espaço sozinho... ClientIndex := StrToInt(Copy(ClientId, 8, Length(ClientId))); // copia o "número" (índice) do cliente Aqui acredito que a imaginação é muito importante! if Pos('exit',HexaValue)=1 then //Arranjo encontrado para apagar Cliente quando ele se desconecta begin Memo2.Lines.Delete(ClientIndex-1); Memo2.Lines.Insert(ClientIndex-1,ClientId+' Ausente'); // Desta forma evito 2 problemas. 1º Que ao deletar a linha // a mesma seja ocupada por outro Cliente e, 2º, verifico que Clientes estão conectados Matrix1.Lines.Delete(ClientIndex-1); //Apaga Cliente da Matrix(LCD) quando se desconecta end; Este é o coração da aplicação.... if (Memo2.Lines.IndexOf(TrimRight(Copy(HexaValue, 13, 3))) = -1 )and //Aqui evita a repetição de comandos (ContaCaracteres='15') then //neste caso resolvo o problema dos comandos incompletos, ou seja, com //menos de 15 caracteres, sejam aceites pelo Memo2. Do mesmo resolvo o Bug de begin //apenas audio poder partilhar a mesma fonte que apenas Video, p.ex: Memo2.Lines.Delete(ClientIndex-1); Memo2.Lines.Insert(ClientIndex-1, TrimRight(Copy(HexaValue, 13, 3))); //selecciono uma determinada posição a direita, com n caracteres if ((TrimRight(Copy(HexaValue, 15, 1))<>'F')) then //evita que os comandos que actuam apenas para begin ListBox1.ItemIndex := ListBox1.Items.Add(HexaValue); //comutação (terminados em 'F') sejam enviados ListBox1.ItemIndex := ListBox1.Count -0; end; // uma vez que do lado do cliente não é necessario {passamos o buffer e a quantidade de bytes a enviar na porta.} CmdBufferLen := 0; while HexaValue <> '' do begin CharHexaStr := Copy(HexaValue, 1, 3); // copia primeiro trio da sequência Delete(HexaValue, 1, 3); // elimina o primeiro trio da sequência Inc(CmdBufferLen); CmdBuffer[CmdBufferLen] := Char(StrToInt(CharHexaStr)); end; Setup.ComPort1.Write(CmdBuffer, CmdBufferLen); // envia a sequência completa, já bem explicada pelo Micheus Muito importante também , porque põe os comandos em fila, com um certo delay provocado pelo Timer, e reenvia-os {se há comandos a processar... } if ListBox1.Count > 0 then begin //*************************envia para todos os clientes************************* for Idx := 1 to ComboBox1.Items.Count -1 do (ComboBox1.Items.Objects[Idx] as TCustomWinSocket).SendText(Listbox1.Items[0]); //Setup.ComPort1.WriteStr(ListBox1.Items.Text); ListBox1.Items.Delete(0); { elimina comando da lista } end; E tudo em relação ao Servidor... A seguir irei postar em relação ao Cliente, no que respeita as partes modificadas pelo segundo arranjo, de forma a satisfazer as exigências do projecto. Estou receptivo a possíveis melhoramentos de código. Até já, com os códigos alterados da parte do Cliente... Jose
  20. Boa Noite companheiros, Antes de mais, gostaria de deixar o Caso de Uso para o sistema. Assim, Caso de Uso: Comutar Matriz de Áudio e Vídeo (caso de uso com sucesso) Actor: Utilizador Propósito: Comutar Matriz Overview: O utilizador entra no Sistema, faz a ligação para o Servidor, comuta a Matriz Tipo: Primário e Essencial 1 Este caso de uso começa quando é comutada a Matriz2 Entra no sistema 4 Introduz o IP do servidor e pede a ligação ao Servidor 6 Selecciona o Áudio ou Vídeo 8 Faz a comutação 10 Da a operação por concluída 3 Pede para iniciar o cliente 5 Comprova e aceita o IP fazendo a ligação ao Servidor 7 Verifica se a selecção já existe ou não. Senão, permite a comutação 9 Aceita a Comutação. A seguir irei postar parte mais significativa do código. Infelizmente não consigo criar uma tabela de forma a estar alinhada. Se os moderadores conseguírem - perfeito! Mas acho que da para ver. Aquele abraço José
  21. Boa Tarde Companheiros, Já esta detectada a falha. Infelizmente o Stress tem disso! No object inspector, eventos , OnRead esqueci-me de declarar ClientSocket1Read!! Claro que depois das respectivas alterações no código que, uma vez mais, teve a preciosa colaboração do Micheus. Espero concluir esta última parte do código ainda hoje, onde posteriormente irei postar a parte mais importante. Aquele Abraço! José O Africano
  22. Boa Tarde companheiros, Viva Micheus, Consegui resolver os poblemas dos erros, modificando alguns valores. Assim; Na Unit1 (TMS8), ficou: { Private declarations } public { Public declarations } procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); end; O procedimento; procedure TMS8.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var hexaRcv: string; begin HexaRcv := Socket.ReceiveText; label1.Caption:=HexaRcv; //criei este label para chekar se recebo ou não os strings end; Na Unit2 (TSetup); type TSetup = class(TForm) ComPort1: TComPort; Button1: TButton; Button2: TButton; ListBox1: TListBox; EasyRegAdvanced1: TEasyRegAdvanced; psvBorderLabel1: TpsvBorderLabel; Btn3: TButton; Btn1: TButton; OBtn1: TOvalButton; ClientSocket1: TClientSocket; edServerName: TEdit; psvBorderLabel2: TpsvBorderLabel; btnClient: TButton; Panel1: TPanel; ComboBox1: TComboBox; Button3: TButton; procedure FormCreate(Sender: TObject); procedure Btn3Click(Sender: TObject); procedure Btn1Click(Sender: TObject); procedure ComPortOpen(Sender: TObject); procedure ComPortClose(Sender: TObject); procedure OBtn1Click(Sender: TObject); procedure btnClientClick(Sender: TObject); procedure ClientSocket1Connect(Sender: TObject;Socket: TCustomWinSocket); procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); procedure AtualizaEstado(Enable :Boolean); procedure Button3Click(Sender: TObject); procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);// <<<-------------------------- ...e o procedimento; procedure TSetup.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin MS8.ClientSocket1Read(Sender, Socket); end; Só que infelizmente não recebo nada!!!! Em principio esta tudo OK....sem erros! Abraço
  23. Boa Noite Micheus, Aqui não será mais um procedimento (procedure) na Unit1 - Principal? public { Public declarations } procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); end; MC José
  24. Olá Micheus, Acabei de testar e de facto alguma coisa esta errada. Na verdade é uma data de erros: [Warning] Unit1.pas(9): Unit 'Outline' is deprecated [Error] Unit1.pas(170): ',' or ':' expected but '(' found [Error] Unit1.pas(170): ',' or ')' expected but ';' found [Error] Unit1.pas(170): 'END' expected but ')' found [Error] Unit2.pas(67): 'TObject' is not a type identifier [Error] Unit2.pas(76): Undeclared identifier: 'ListBox1' [Error] Unit2.pas(76): Missing operator or semicolon [Error] Unit2.pas(85): Missing operator or semicolon [Error] Unit2.pas(96): 'TObject' is not a type identifier [Error] Unit2.pas(99): Undeclared identifier: 'ComPort1' [Error] Unit2.pas(109): Missing operator or semicolon [Error] Unit2.pas(113): Statement expected but 'PROCEDURE' found [Error] Unit2.pas(113): 'TObject' is not a type identifier [Error] Unit2.pas(115): Undeclared identifier: 'Btn1' [Error] Unit2.pas(118): 'TObject' is not a type identifier [Error] Unit2.pas(120): Undeclared identifier: 'Btn1' [Error] Unit2.pas(120): Operator not applicable to this operand type [Error] Unit2.pas(121): Missing operator or semicolon [Error] Unit2.pas(124): 'TObject' is not a type identifier [Error] Unit2.pas(129): 'TObject' is not a type identifier [Error] Unit2.pas(132): Undeclared identifier: 'edServerName' [Error] Unit2.pas(132): There is no overloaded version of 'Trim' that can be called with these arguments [Error] Unit2.pas(134): Missing operator or semicolon [Error] Unit2.pas(138): Undeclared identifier: 'ComboBox1' [Error] Unit2.pas(142): Missing operator or semicolon [Error] Unit2.pas(143): Not enough actual parameters [Error] Unit2.pas(145): Undeclared identifier: 'ClientSocket1' [Error] Unit2.pas(145): Missing operator or semicolon [Error] Unit2.pas(145): Missing operator or semicolon [Error] Unit2.pas(147): Statement expected, but expression of type 'Text' found [Error] Unit2.pas(151): '.' expected but ';' found [Warning] Unit2.pas(152): Text after final 'END.' - ignored by compiler [Error] Unit2.pas(29): Unsatisfied forward or external declaration: 'TSetup.Btn3Click' [Error] Unit2.pas(35): Unsatisfied forward or external declaration: 'TSetup.ClientSocket1Connect' [Error] Unit2.pas(36): Unsatisfied forward or external declaration: 'TSetup.ClientSocket1Disconnect' [Error] Unit2.pas(38): Unsatisfied forward or external declaration: 'TSetup.Button3Click' [Fatal Error] Unit1.pas(200): Could not compile used unit 'Unit2.pas Vou tenta estudar também o que se passa... Aquele abraço
×
×
  • Criar Novo...