Ir ao conteúdo
  • Cadastre-se

FBO_COUTINHO

Membros Plenos
  • Total de itens

    62
  • Registro em

  • Última visita

  • Qualificações

    N/D
  1. Olá. E se você tentar ler caracter por caracter até encontrar o #9? Se você souber a sequencia dos itens numa linha do arquivo então fica fácil: var {suas vars...} acumulador: string; i: integer; ind_dado; begin while not Eof(txt) do begin ReadLn(txt,linha); acumulador:= ''; //reseta o acumulador a cada nova linha ind_dado:= 0; //zera o indice de dados da linha a cada nova linha //faz uma varredura em todos os caracteres em "linha" for i:= 1 to length(linha) do begin if(linha[i] <> #9)then // acumulador:= acumulador + linha[i] else begin case ind_dado of 0: //indice 0 é cliente begin SetLength(cliente,length(cliente)+1); cliente[length(cliente)-1]:= acumulador; inc(ind_dado); end; 1: //indice 1 é Marca begin SetLength(Marca,length(Marca)+1); Marca[length(Marca)-1]:= acumulador; inc(ind_dado); end; 2: //indice 2 é um campo de valor numerico com casas decimais begin SetLength(Floats,length(Floats)+1); TryStrToFloat(acumulador,Floats[length(Floats)-1]); inc(ind_dado); end; 3: //indice 3 é um campo de valor numerico sem casas decimais begin SetLength(Words,length(Words)+1); TryStrToInt(acumulador,Words[length(Words)-1]); ind_dado:= 0; end; end; acumulador:= ''; //reseta o acumulador pra pegar o proximo dado end; end; end; end;
  2. O problema é que você está tentando jogar um valor numérico (real) pra um campo texto (edit5.text). você tem que converter o valor numérico pra texto antes de fazer esta atribuição. Então no seu código faça: //incorreto //Edit5.text:=(soma)/4; //correto Edit5.text:= FloatToStr((soma)/4); ------------------------------------- //incorreto //Edit5.text:='sqrt(vezes)'; //correto Edit5.text:= FloatToStr(sqrt(vezes));
  3. Talvez esteja acessando um indice de um vetor ou matriz que extrapole o tamanho da mesma ou, se for um vetor ou matriz dinamico, faltou alocar memoria para este... Ou talvez esteja tentando atribuir ou ler objetos que já foram destruídos da memória... É difícil dizer sem dar uma olhada no código mas verifica se talvez seja um destes que mencionei
  4. Carlos José de Souza, muito obrigado por sua sugestão. Até já fiz um aplicativo pra testar a funcionalidade do MDI e realmente é o que eu estava procurando mesmo. Muito bom. valeu
  5. Cara sua dica de criar um form pra conter meu painel de botões e depois fazer este form aparecer nos outros forms da aplicação foi demais. Fiz assim: 1. Criei os forms "Form1", "Form2" e "FormPainel", onde "FormPainel" é o form que contém os botões pra troca de telas, que é visivel em todos os forms da aplicação. 2. Na unit do programa criei uma classe pra ter as funções OnActivate e OnClose que responderão a todos os forms da aplicação, vinculando as funções dos forms para as funções desta classe program Project1; uses Controls, //acrescentado Forms, U_Diversos in 'U_Diversos.pas', Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}, U_UniversalPanel in 'U_UniversalPanel.pas', U_Painel in 'U_Painel.pas' {FormPainel}, U_GlobalUnit in 'U_GlobalUnit.pas'; //cria instância para eventos OnFormActivate e OnFormClose //que responderão a todos os forms da aplicação Type TUniversalEvents = class procedure FormActivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); end; {$R *.res} var UniversalEvents: TUniversalEvents; { TOnShowEvent } procedure TUniversalEvents.FormActivate(Sender: TObject); var i: integer; begin //faz todos os outros forms ficarem invisíveis, ficando //visível apenas o form que chamou esta função //(o form que chamou esta função é passada como "Sender") for i:= 0 to Screen.FormCount-1 do begin if(Screen.Forms[i] <> TForm(Sender))then Screen.Forms[i].Visible:= False; end; //verifica se o form que contém os botões de navegação //entre forms já está criado if(assigned(FormPainel))then begin //se o painel de botões não estiver no form atual //ele será colocado no form atual if(FormPainel.Parent <> TForm(Sender))then begin FormPainel.BorderStyle:= bsNone; FormPainel.Parent:= TForm(Sender); FormPainel.Visible:= True; FormPainel.Align:= alLeft; end; end; end; procedure TUniversalEvents.FormClose(Sender: TObject; var Action: TCloseAction); begin //se qualquer form for fechado então //a aplicação será encerrada Application.Terminate; end; var i: integer; begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TFormPainel, FormPainel); for i:= 0 to Screen.FormCount-1 do begin Screen.Forms[i].OnActivate:= UniversalEvents.FormActivate; Screen.Forms[i].OnClose:= UniversalEvents.FormClose; end; Application.Run; end. E agora o código do form que contém os botões pra troca de telas: unit U_Painel; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, ExtCtrls; type TFormPainel = class(TForm) Panel1: TPanel; Btn1: TSpeedButton; Btn2: TSpeedButton; procedure Btn1Click(Sender: TObject); procedure Btn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FormPainel: TFormPainel; implementation uses Unit1, Unit2; {$R *.dfm} procedure TFormPainel.Btn1Click(Sender: TObject); begin Form1.Show; end; procedure TFormPainel.Btn2Click(Sender: TObject); begin Form2.Show; end; end. E pronto! Agora ao invés de utilizar os eventos OnFormShow e OnFormClose será que não daria pra usar um TApplicationEvents pra responder ao comando de troca de form pra poder alterar o parent do form de painel de botões?
  6. Olá amigos. Preciso de uma ajuda... Imagine que em uma aplicação tenho vários forms. Quero ter uma barra lateral sempre visivel que deve ser tipo um painel com botões para navegar por entre os forms. Este painel é um só para a aplicação inteira, ou seja, ao trocar de form o painel com os botões deve aparecer neste outro form também. Tem algum componente especifico pra isso em vez de ter que ficar dando um ctrl+c e ctrl+v no painel? Se eu fizer ctrl+c e ctrl+v no painel pra copiá-lo para os demais forms, vai dar o maior trabalho ter que sempre repetir o código dos botões e se mudar algo tem que copiar tudo de novo correndo o risco de deixar algum form desatualizado... Tem que ser botões grandinhos pra usar com display touch-screen então por isso não uso tabcontrols ou menus. Também não gosto de usar notebook porque acho que o controle dele me faz perder muito tempo ao fazer o layout dos forms e além disso todas as funções e eventos de objetos ficariam acumulados em uma unica unit deixando o código muito desorganizado... Agradeço sugestões (pode ser um componente das novas versões do delphi [embarcadero])
  7. Muito obrigado, era dessas informações que eu precisava.
  8. Caros amigos. Dentre as duas operações qual consome mais tempo de processamento: divisão "/" ou deslocamento de bits ">>" ? Um exemplo: high_byte= (byte)(word_val / 256); low_byte = (byte)(word_val & 0xFF); //ou high_byte= (byte)(word_val >> 8); low_byte = (byte)(word_val & 0xFF);
  9. Cara era isso mesmo, você matou a charada! Quando coloquei esses "guards" deu certo. Não entendo o porquê disso mas tá compilando certinho agora. Bom demais! Muito obrigado pessoal, vocês são 10! Agora pode fechar o tópico porque foi finalizado com chave de ouro!
  10. Infelizmente nenhum código funcionou no meu compilador... Eu uso um compilador pra microcontrolador que se mostra um pouco limitado. Agradeço a ajuda de todos aqui.
  11. Para que possa abrir um arquivo que tem extensão associada a um aplicativo específico use o comando "ShellExecute". Abaixo um trecho de código para seu uso: Em "Uses" declare ShellAPI No evento do clique do botão, coloque o código: Shellexecute(handle,'open',pchar(file_name),nil,nil,SW_shownormal); //file_name é local+nome do arquivo. Exemplo: file_name:= 'c:\congelados\020712.btw' Exemplo em que o usuário digitou "020712" no Edit e depois clicou no botão: procedure TForm1.Button1Click(Sender: TObject); var file_name: string; begin file_name:= 'C:\congelados\' + Edit1.Text + '.btw'; if(FileExists(file_name))then //verifica se o arquivo existe Shellexecute(handle,'open',pchar(file_name),nil,nil,SW_shownormal) except ShowMessage('ERRO 404'); //erro de arquivo não encontrado end;
  12. Continua dando erro... Achei que poderia ser por causa do nome "TPoint" aí mudei para o código: typedef struct TPxy{ int x; int y; }TPxxyy; Ao compilar aparecem as mensagens: identifier 'TPxxyy' redeclared was declared as: 'struct TPxy' now declared as: 'struct ' struct/union/enum/class tag 'TPxy' redefined
  13. Agradeço as considerações a respeito do código. A chamada da função funcionou do modo como sugeriu "distancia((TPoint){0, 0}, (TPoint){100, 100});" Mas agora ao compilar o código aparece este erro: identifier 'TPoint' redeclared was declared as: 'struct' now declared as: 'struct' E não existia esta struct em nenhum lugar antes. Tanto que mudei o nome da struct para "TMyPoint" e continua dando o mesmo erro. Alguma ideia do porquê?
  14. Em C puro, tendo uma função que possui uma estrutura como parametro, posso passar valores puros pra função e esses valores serem interpretados como sendo uma estrutura? Exemplo: typedef struct{ int x; int y; }TPoint; int distancia(TPoint A, TPoint B) { return(sqrt(sqr(Bx-Ax) + sqr(By-Ay))); } void main(void) { int d; d = distancia(TPoint(0,0), TPoint(100,100)); //<--- queria fazer esta mágica aqui printf("A distancia é %d",d); }
  15. Talvez possa fazer deste modo: //Na cláusula Uses adicione "ShellAPI" e "StrUtils" //Colocar na tela um Edit (Edit1) e um Botão (Button1) //Função Execute - abre o arquivo pelo notepad // retorna True caso consiga abrir o arquivo // retorna False caso não consiga abrir o arquivo function Execute(FileName, Parameter: string): boolean; begin if(FileExists(Parameter))then begin try ShellExecute(Application.Handle, nil, PChar(FileName), // Filename with path PChar(Parameter), // Parameters (not needed) PChar(Parameter), // path of file SW_SHOW); result:= True; //operação bem sucedida except result:= False; //erro na operação end; end else result:= False; //erro na operação (arquivo não encontrado) end; //Evento "OnClick" do botão TButton1 procedure TForm1.Button1Click(Sender: TObject); var filename: string; begin case AnsiIndexStr(Edit1.text, [ '020000', //string referente ao indice 0 do case '020712', //string referente ao indice 1 do case '020712' //string referente ao indice 2 do case //adicione outras strings aqui e o indice relativo abaixo seguindo a ordem ]) of 0: ShowMessage('ERROR 404'); 1: begin filename:= '020712'; ShowMessage('Carre Suino congelado ' + filename +#13#10 + 'Clique em OK para abrir o arquivo'); if(Execute('notepad','c:\congelados\' + filename + '.btw') = False)then ShowMessage('Falha ao abrir o arquivo "c:\congelados\' + filename + '.btw"'); end; 2: begin filename:= '20714'; ShowMessage('Picanha Premium Congelada ' + filename +#13#10 + 'Clique em OK para abrir o arquivo'); if(not Execute('notepad','c:\congelados\' + filename + '.btw'))then ShowMessage('Falha ao abrir o arquivo "c:\congelados\' + filename + '.btw"'); end; end; end; Outras opções: - Colocar um Memo na tela e abrir o arquivo no Memo ao invés do notepad. - Ao invés do usuário ter que digitar o nome do arquivo você poderia alistar todos os arquivos em um ComboBox e o usuário apenas teria que selecionar o arquivo na lista do combobox. Se usar um ComboBox poderia colocar o titulo do arquivo (exemplo: Picanha Premium Congelada) para o usuario selecionar ao invés do nome numérico do arquivo e internamente no programa chamar o arquivo usando como base o indice do item selecionado no ComboBox (combobox.itemindex)

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×