Search the Community
Showing results for tags 'csharp'.
-
Olá . Cá estou eu outra vez. Porque é que este código funciona bem em dois botões separados , mas se o juntar num só botão só executa a primeira parte :( botão 1: string uri = "https://www.acesso.gov.pt/v2/loginForm?partID=PFAP&path=/geral/dashboard"; webView21.CoreWebView2.Navigate(uri.ToString()); botão 2: string script = "document.getElementById('tab2').click();"; webView21.CoreWebView2.ExecuteScriptAsync(script); Obrigado desde já.
-
Olá ! Iniciei a minha "formação" no C# na semana passada. tirei o "curso" básico no https://www.w3schools.com/ o primeiro projeto correu ok , uma app para sortear chaves do totoloto / euromilhões. Entretanto decidi ir mais fundo e iniciei um projeto para login automático nos sites da AT e estou com um problema: consigo inserir NIF e Senha se forem númericos mas alfanúmerios não insere nada , muito estranho ( para mim ). o código que estou a usar é este: string NIF = "123456789"; string senha = "ABCDEGHIJ"; webView21.ExecuteScriptAsync("document.getElementById('username').value=" + NIF); webView21.ExecuteScriptAsync("document.getElementById('password-nif').value=" + senha); Obrigado desde já.
-
Olá a todos! BlazorFluentUI_FL é uma aplicação web que utiliza os componentes Blazor Fluent UI. Este projeto foi desenvolvido como uma forma de aprender e explorar as capacidades dos mesmos. O objetivo principal é o de conhecer e experimentar os seus vários componentes e padrões. Integra as APIs do Edaman e do YouTube, oferecendo funcionalidades avançadas, como pesquisa de receitas, acesso a uma vasta base de dados de alimentos e a capacidade de assistir a vídeos diretamente na aplicação, com a opção de armazenar informações dos vídeos numa base de dados SQLite, usando o ORM Entity Framework. As Apis Edaman e YouTube foram utilizadas para obter dados de receitas e conteúdo multimédia, respectivamente, para testar o frontend e explorar suas capacidades. Tecnologias Utilizadas: Linguagem C# Blazor Server Componentes do Blazor Fluent UI .NET Core 8 As contribuições são bem-vindas! Se tiver sugestões para novas funcionalidades ou melhorias, sinta-se à vontade para enviar um 'pull request' ou abrir uma 'issue' no repositório. Confira mais detalhes no Github . Documentação em Português e Inglês.
-
- 1
-
- csharp
- web service
-
(and 3 more)
Tagged with:
-
Estou enfrentando um problema ao criar a migração inicial do meu projeto ASP.NET. Após definir models e data anotations, ao tentar criar a base de dados, encontro o seguinte erro na Consola do NuGet: Failed executing DbCommand (7ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] CREATE TABLE [FCT] ( [IdFCT] int NOT NULL IDENTITY, [AlunoIdAluno] int NOT NULL, [EmpresaIdEmpresa] int NOT NULL, [InstituicaoEnsinoIdInstituicao] int NOT NULL, [DataInicioFCT] datetime2 NOT NULL, [DataFimFCT] datetime2 NOT NULL, [PeriodoFCTIdPeriodo] int NOT NULL, [AvaliacaoIdAvaliacao] int NOT NULL, [DocumentosIdDocumento] int NOT NULL, CONSTRAINT [PK_FCT] PRIMARY KEY ([IdFCT]), CONSTRAINT [FK_FCT_Alunos_AlunoIdAluno] FOREIGN KEY ([AlunoIdAluno]) REFERENCES [Alunos] ([IdAluno]) ON DELETE CASCADE, CONSTRAINT [FK_FCT_Avaliacao_AvaliacaoIdAvaliacao] FOREIGN KEY ([AvaliacaoIdAvaliacao]) REFERENCES [Avaliacao] ([IdAvaliacao]) ON DELETE CASCADE, CONSTRAINT [FK_FCT_Documentos_DocumentosIdDocumento] FOREIGN KEY ([DocumentosIdDocumento]) REFERENCES [Documentos] ([IdDocumento]) ON DELETE CASCADE, CONSTRAINT [FK_FCT_Empresa_EmpresaIdEmpresa] FOREIGN KEY ([EmpresaIdEmpresa]) REFERENCES [Empresa] ([IdEmpresa]) ON DELETE CASCADE, CONSTRAINT [FK_FCT_InstituicaoEnsino_InstituicaoEnsinoIdInstituicao] FOREIGN KEY ([InstituicaoEnsinoIdInstituicao]) REFERENCES [InstituicaoEnsino] ([IdInstituicao]) ON DELETE CASCADE, CONSTRAINT [FK_FCT_PeriodoFCT_PeriodoFCTIdPeriodo] FOREIGN KEY ([PeriodoFCTIdPeriodo]) REFERENCES [PeriodoFCT] ([IdPeriodo]) ON DELETE CASCADE Introducing FOREIGN KEY constraint 'FK_FCT_InstituicaoEnsino_InstituicaoEnsinoIdInstituicao' on table 'FCT' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint or index. See previous errors. Aqui estão meus models (aqueles que acho que estão a causar o problema): using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace FCTConnect.Models { public class FCT { [Key] public int IdFCT { get; set; } public Aluno Aluno { get; set; } public Empresa Empresa { get; set; } public InstituicaoEnsino InstituicaoEnsino { get; set; } [Required] [DataType(DataType.Date)] public DateTime DataInicioFCT { get; set; } [Required] [DataType(DataType.Date)] public DateTime DataFimFCT { get; set; } public PeriodoFCT PeriodoFCT { get; set; } public Avaliacao Avaliacao { get; set; } public Documentos Documentos { get; set; } } } using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace FCTConnect.Models { public class Aluno { [Key] public int IdAluno { get; set; } [Required] [StringLength(100)] public string Nome { get; set; } [Required] public int Idade { get; set; } [Required] [StringLength(100)] public string Curso { get; set; } [Required] [EmailAddress] public string Email { get; set; } [Required] [Phone] public string Telefone { get; set; } [Required] [StringLength(100)] public string Morada { get; set; } public InstituicaoEnsino InstituicaoEnsino { get; set; } } } using System.ComponentModel.DataAnnotations; namespace FCTConnect.Models { public class InstituicaoEnsino { [Key] public int IdInstituicao { get; set; } [Required] [StringLength(100)] public string Nome { get; set; } [Required] [StringLength(100)] public string Morada { get; set; } [Required] [EmailAddress] public string Email { get; set; } [Required] [Phone] public string Telefone { get; set; } [Required] [StringLength(500)] public string Descricao { get; set; } } } Este projeto está a ser desenvolvido no Visual Studio, em C# ASP.NET, com SQL Server. Fico grato a quem possa ajudar.
-
Bom dia. O meu nome é Luís. Neste momento estou a desenvolver um projeto para a faculdade que consiste no seguinte: No Ensino Secundário, mais especificamente nos Cursos Profissionais e nos Cursos com Planos Próprios, existe uma Formação designada Formação em Contexto de Trabalho. Que é basicamente um estágio. Nos últimos anos tem-se verificado uma enorme perda de conexões, informações e documentos após o término da FCT. Ou seja, após o estudante terminar o seu estágio numa empresa, a empresa e a instituição de ensino perdiam as suas conexões, informações e documentos. O meu projeto consiste em desenvolver uma plataforma de gestão em ASP.NET Core MVC que permita a estas três entidades manterem as conexões, informações e documentos, mesmo após o término da FCT. Nesta parte inicial apenas escolhi um template e desenvolvi os Models da aplicação. Venho através deste tópico, perguntar se alguém me pode indicar a sua opinião relativamente aos meus Models, se estão bem elaborados, e se trocavam alguns pormenores. Aqui estão os meus Models: namespace FCTConnect.Models { public class Aluno { public int IdAluno { get; set; } public string Nome { get; set; } public int Idade { get; set; } public string Curso { get; set; } public string Email { get; set; } public string Telefone { get; set; } public string Morada { get; set; } public InstituicaoEnsino InstituicaoEnsino { get; set; } } } namespace FCTConnect.Models { public class Avaliacao { public int IdAvaliacao { get; set; } public int NumTrimestre { get; set; } public int Nota { get; set; } public string TipoAvaliacao { get; set; } } } namespace FCTConnect.Models { public class Candidaturas { public int IdCandidatura { get; set; } public Aluno Candidato { get; set; } public string CartaMotivacao { get; set; } } } namespace FCTConnect.Models { public class Documentos { public int IdDocumento { get; set; } public string Titulo { get; set; } public string Tipo { get; set; } public string Caminho { get; set; } public DateTime DataSubmissao { get; set; } } } namespace FCTConnect.Models { public class Empresa { public int IdEmpresa { get; set; } public string Nome { get; set; } public string Morada { get; set; } public string Email { get; set; } public string Telefone { get; set; } public string Descricao { get; set; } } } namespace FCTConnect.Models { public class FCT { public int IdFCT { get; set; } public Aluno Aluno { get; set; } public Empresa Empresa { get; set; } public InstituicaoEnsino InstituicaoEnsino { get; set; } public DateTime DataInicioFCT { get; set; } public DateTime DataFimFCT { get; set; } public PeriodoFCT PeriodoFCT { get; set; } public Avaliacao Avaliacao { get; set; } public Documentos Documentos { get; set; } } } namespace FCTConnect.Models { public class InstituicaoEnsino { public int IdInstituicao { get; set; } public string Nome { get; set; } public string Morada { get; set; } public string Email { get; set;} public string Telefone { get; set; } public string Descricao { get; set;} } } namespace FCTConnect.Models { public class Morada { public int IdMorada { get; set; } public string Rua { get; set; } public string CodPostal { get; set; } public string Concelho { get; set; } public string Distrito { get; set; } } } namespace FCTConnect.Models { public class PeriodoFCT { public int IdPeriodo { get; set; } public int NumHoras { get; set; } } } namespace FCTConnect.Models { public class Tarefa { public int IdTarefa { get; set; } public string Titulo { get; set; } public string Descricao { get; set; } public DateTime DataLimite { get; set; } public string Estado { get; set; } } } namespace FCTConnect.Models { public class Vaga { public int IdVaga { get; set; } public string Titulo { get; set; } public string Descricao { get; set; } public Empresa Empresa { get; set; } public Candidaturas Candidaturas { get; set; } } } Agradeço a quem me conseguir ajudar.
-
O meu nome é Luís e estou neste momento a desenvolver um projeto que consiste na implementação de um sistema cliente/servidor para gestão de serviços de mobilidade oferecidos pela empresa ServiMoto. Os serviços incluem verificações de árvores e jardins, intervenções de bombeiros, entregas postais e entrega de pizza. O sistema permite que clientes (bicicletas) se conectem ao servidor para receber tarefas, atualizar o status das tarefas e solicitar novas tarefas. O servidor gerencia essas solicitações, aloca tarefas aos clientes e mantém registros das tarefas e clientes alocados em arquivos CSV. O projeto é implementado em C# utilizando soquetes e o protocolo de comunicação definido. Atualmente meus dois códigos principais são estes: classe servidor: using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; class Servidor { // Objeto Mutex para garantir acesso exclusivo aos arquivos CSV static Mutex mutex = new Mutex(); // Método para atualizar o arquivo CSV com a conclusão de uma tarefa static void AtualizarTarefaConcluida(string nomeArquivo, string idTarefa) { mutex.WaitOne(); try { string[] linhas = File.ReadAllLines(nomeArquivo); for (int i = 0; i < linhas.Length; i++) { if (linhas[i].StartsWith(idTarefa)) { // Substitui "em curso" por "concluída" apenas se "em curso" estiver presente if (linhas[i].Contains("em curso")) { linhas[i] = linhas[i].Replace("em curso", "concluida"); } break; } } File.WriteAllLines(nomeArquivo, linhas); } finally { mutex.ReleaseMutex(); } } // Método para atribuir uma nova tarefa ao cliente e atualizar o arquivo CSV correspo ndente static void AlocarNovaTarefa(string nomeArquivo, string idCliente) { mutex.WaitOne(); try { // Lógica para atribuir uma nova tarefa ao cliente e atualizar o arquivo CSV // Por exemplo, pode envolver a leitura do arquivo para encontrar uma tarefa disponível e atualizar seu status } finally { mutex.ReleaseMutex(); } } static void Main(string[] args) { TcpListener servidor = null; try { // Endereço IP e porta do servidor IPAddress enderecoIp = IPAddress.Parse("127.0.0.1"); int porta = 8888; // Inicia o servidor e escuta por conexões servidor = new TcpListener(enderecoIp, porta); servidor.Start(); Console.WriteLine("Servidor iniciado..."); while (true) { // Aceita a conexão do cliente TcpClient cliente = servidor.AcceptTcpClient(); Console.WriteLine("Cliente conectado!"); // Prepara as streams de rede NetworkStream stream = cliente.GetStream(); byte[] dados = new byte[256]; StringBuilder resposta = new StringBuilder(); int bytes; // Lê os dados recebidos do cliente while ((bytes = stream.Read(dados, 0, dados.Length)) != 0) { resposta.Append(Encoding.ASCII.GetString(dados, 0, bytes)); Console.WriteLine("Mensagem recebida: {0}", resposta.ToString()); // Verifica o tipo de mensagem recebida if (resposta.ToString().StartsWith("CONNECT")) { // Responde com sucesso byte[] msg = Encoding.ASCII.GetBytes("100 OK"); stream.Write(msg, 0, msg.Length); Console.WriteLine("Resposta enviada: 100 OK"); } else if (resposta.ToString().StartsWith("TASK_COMPLETE")) { // Extrai o ID da tarefa concluída string idTarefaConcluida = resposta.ToString().Substring("TASK_COMPLETE".Length).Trim(); // Atualiza o arquivo CSV correspondente AtualizarTarefaConcluida("Servico_A.csv", idTarefaConcluida); // Responde com confirmação de conclusão da tarefa byte[] msg = Encoding.ASCII.GetBytes("TASK_COMPLETED"); stream.Write(msg, 0, msg.Length); Console.WriteLine("Resposta enviada: TASK_COMPLETED"); } else if (resposta.ToString() == "REQUEST_TASK") { // Lógica para atribuir uma nova tarefa ao cliente e atualizar o arquivo CSV // Aqui você pode chamar o método AlocarNovaTarefa() para atribuir a nova tarefa } else if (resposta.ToString() == "QUIT") { // Responde com encerramento da conexão byte[] msg = Encoding.ASCII.GetBytes("400 BYE"); stream.Write(msg, 0, msg.Length); Console.WriteLine("Resposta enviada: 400 BYE"); // Fecha a conexão cliente.Close(); break; } else { // Responde com erro byte[] msg = Encoding.ASCII.GetBytes("ERROR"); stream.Write(msg, 0, msg.Length); Console.WriteLine("Resposta enviada: ERROR"); } // Limpa o StringBuilder para a próxima mensagem resposta.Clear(); } } } catch (Exception ex) { Console.WriteLine("Erro: " + ex.Message); } finally { // Encerra o servidor servidor.Stop(); } } } classe cliente: using System; using System.Net.Sockets; using System.Text; class Cliente { static void Main(string[] args) { try { // Endereço IP e porta do servidor string servidorIp = "127.0.0.1"; int porta = 8888; // Cria uma instância do cliente TCP TcpClient cliente = new TcpClient(servidorIp, porta); Console.WriteLine("Conectado ao servidor..."); // Prepara as streams de rede NetworkStream stream = cliente.GetStream(); byte[] dados = new byte[256]; string resposta = string.Empty; Console.WriteLine("Indique o seu ID de Cliente: "); string idCliente = Console.ReadLine(); // Envia mensagem de conexão string mensagemConnect = "CONNECT"; byte[] msgConnect = Encoding.ASCII.GetBytes(mensagemConnect); stream.Write(msgConnect, 0, msgConnect.Length); Console.WriteLine("Mensagem enviada: {0}", mensagemConnect); // Lê a resposta do servidor int bytesConnect = stream.Read(dados, 0, dados.Length); resposta = Encoding.ASCII.GetString(dados, 0, bytesConnect); Console.WriteLine("Resposta recebida: {0}", resposta); while (true) { Console.WriteLine("Escolha uma opção:"); Console.WriteLine("1. Concluir tarefa"); Console.WriteLine("2. Solicitar nova tarefa"); Console.WriteLine("3. Sair"); Console.Write("Opção: "); string opcao = Console.ReadLine(); switch (opcao) { case "1": // Envia mensagem de conclusão de tarefa Console.WriteLine("Indique o ID da tarefa concluída: "); string idTarefaConcluida = Console.ReadLine(); string mensagemConclusao = $"TASK_COMPLETE <{idTarefaConcluida}>"; byte[] msgConclusao = Encoding.ASCII.GetBytes(mensagemConclusao); stream.Write(msgConclusao, 0, msgConclusao.Length); Console.WriteLine("Mensagem enviada: {0}", mensagemConclusao); // Lê a resposta do servidor int bytesConclusao = stream.Read(dados, 0, dados.Length); resposta = Encoding.ASCII.GetString(dados, 0, bytesConclusao); Console.WriteLine("Resposta recebida: {0}", resposta); break; case "2": // Envia pedido de nova tarefa string mensagemPedido = "REQUEST_TASK"; byte[] msgPedido = Encoding.ASCII.GetBytes(mensagemPedido); stream.Write(msgPedido, 0, msgPedido.Length); Console.WriteLine("Mensagem enviada: {0}", mensagemPedido); // Lê a resposta do servidor int bytesPedido = stream.Read(dados, 0, dados.Length); resposta = Encoding.ASCII.GetString(dados, 0, bytesPedido); Console.WriteLine("Resposta recebida: {0}", resposta); break; case "3": // Envia mensagem de encerramento string mensagemQuit = "QUIT"; byte[] msgQuit = Encoding.ASCII.GetBytes(mensagemQuit); stream.Write(msgQuit, 0, msgQuit.Length); Console.WriteLine("Mensagem enviada: {0}", mensagemQuit); // Lê a resposta do servidor int bytesQuit = stream.Read(dados, 0, dados.Length); resposta = Encoding.ASCII.GetString(dados, 0, bytesQuit); Console.WriteLine("Resposta recebida: {0}", resposta); // Fecha a conexão e sai do loop cliente.Close(); return; default: Console.WriteLine("Opção inválida."); break; } } } catch (Exception ex) { Console.WriteLine("Erro: " + ex.Message); } } } O problema é que quando quero declarar uma tarefa concluída usando minha função UpdateCompletedTask, o arquivo csv não muda e permanece sempre o mesmo. Alguém pode me ajudar? Alterei o código da minha função algumas vezes porque acho que o problema está na função UpdateCompletedTask mas ainda assim nada mudou.
-
Bom dia, Estou a tentar fazer uma aplicação HMI (Interface Homem Maquina) em C# para comunicar com robô Yaskawa através da livraria MotoComES_CS, contudo estou a encontrar varias barreiras que estão consumindo algum tempo. Alguém tem experiencia nesta área para trocar ideias? Obrigado.
-
Publiquei a aplicação 'Property Manager FL' (Gestão de Propriedades) no domínio público (Github). A aplicação foi concebida para ajudar os senhorios na gestão das suas propriedades e alugueres. Foi concebida à 'medida', a pedido de conhecidos; não contempla, por isso, todas as funcionalidades das aplicações disponíveis no mercado. Tecnologias usadas: C#, Blazor, Dapper, AutoMapper, Fluent Validation, Serilog, BlazorSyncfusion, Blazored, Css, ... Base de dados em SQL Server 2019. Para os eventuais interessados, podem aceder a mais informações no repositório: https://github.com/fauxtix/PropertyManagerFL Qualquer informação adicional que julguem relevante, disponham. Cumprimentos, Fausto
-
Olá Pessoal, Sou Novo Neste Maravilhoso Fórum e Estou Gostando Muito Do Portugal-a-Programar. Bom Vamos Ao Assunto 🙂 Estou Criando Um Projeto e Então Queria Pedir A Ajuda De Vocês, Na Verdade Eu Queria Saber Como Injetar Uma DLL Que Tenho Dentro Da Resource Do Meu Programa Em Um Determinado Processo, Exemplo: "notepad"... Já Tentei Algumas Instruções Mas Não Tive Sucesso! Basicamente A Lógica Da Minha Aplicação Seria Assim: Clicar No Botão Injetar A DLL Exibir Mensagem De DLL Injetada Agradeço Desde Já Att, Santtz
-
Olá a todos. Iniciei a minha aprendizagem em .Net 7 Maui, criando uma app para gerir o dia a dia dos meus Pets. A minha questão é a seguinte: se pretender publicar a app e enviá-la a amigos, para seu uso próprio, que passos devo dar? Estou a usar o Visual Studio 2022 17.7.6. Obrigado. Fausto
-
Boas alguem pode me ajudar, eu tenho um smart card reader da tachogram, eu queria desenvolver um simples aplicativo em c# ou outra linguagem para ler as informações do cartão do Tacografo
-
Boas, Criei uma aplicação em .Net Core com Blazor, em que um dos requisitos é o de ler metadados de vídeos alojados no youtube. Ao inserir o link de um vídeo numa caixa de texto, o form com o resto dados é preenchido com: Ano de edição Título do vídeo Título do canal Duração Descrição Thumbnail Fica aqui o código, caso alguém esteja interessado; foi adaptado a partir de trechos de código que encontrei na net. Se merecer algum comentário da vossa parte, façam-no! Caso estejam interessados no form onde os dados são usados, enviem-me o pedido através de uma MP. Cumprimentos, Fausto == MODELOS == public class YouTubeVideoDetails { public string VideoId { get; set; } public string Description { get; set; } public string Title { get; set; } public string ChannelTitle { get; set; } public string Duration { get; set; } public DateTime? PublicationDate { get; set; } public string Thumbnail { get; set; } } public static class Keys { public static string YouTubeApiKey = "<Chave da API>"; public static string YouTubeApplicationName = "MediaOrganizer"; public static string ClientId = "<Id do cliente>"; public static string SecretClientId = "<chave secreta>"; } using Google.Apis.Services; using Google.Apis.YouTube.v3; using MediaOrganizerApp.Domain.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Web.Blazor.Static; == Interface para injeção de dependências == public interface IGetYoutubeVideoMetadata { Task<YouTubeVideoDetails> GetAlbumArtistMetadata(string searchRequest_query); Task<YouTubeVideoDetails> GetSingleVideoMetadata(string searchRequest_query); Task<YouTubeVideoDetails> GetVideoMetadata(string searchRequest_Id); } == Implementação == public class GetYoutubeVideoMetadata : IGetYoutubeVideoMetadata { public async Task<YouTubeVideoDetails> GetVideoMetadata(string searchRequest_Id) { using (var youtubeService = new YouTubeService(new BaseClientService.Initializer() { ApiKey = Keys.YouTubeApiKey, ApplicationName = Keys.YouTubeApplicationName, })) { var searchRequest = youtubeService.Videos.List("snippet,contentDetails"); searchRequest.Id = searchRequest_Id; var searchResponse = await searchRequest.ExecuteAsync(); var youTubeVideo = searchResponse.Items.FirstOrDefault(); if (youTubeVideo != null) { TimeSpan YouTubeDuration = System.Xml.XmlConvert.ToTimeSpan(youTubeVideo.ContentDetails.Duration); string sDuration = YouTubeDuration.ToString(); YouTubeVideoDetails videoDetails = new YouTubeVideoDetails() { VideoId = youTubeVideo.Id, Description = youTubeVideo.Snippet.Description, Title = youTubeVideo.Snippet.Title, ChannelTitle = youTubeVideo.Snippet.ChannelTitle, PublicationDate = youTubeVideo.Snippet.PublishedAt, Duration = sDuration, Thumbnail = youTubeVideo.Snippet.Thumbnails.Standard is not null ? youTubeVideo.Snippet.Thumbnails.Standard.Url : youTubeVideo.Snippet.Thumbnails.Medium is not null ? youTubeVideo.Snippet.Thumbnails.Medium.Url : youTubeVideo.Snippet.Thumbnails.Maxres is not null ? youTubeVideo.Snippet.Thumbnails.Maxres.Url : "Images/No-image-available.png" }; return videoDetails; } return null; } } public async Task<YouTubeVideoDetails> GetAlbumArtistMetadata(string searchRequest_query) { using (var youtubeService = new YouTubeService(new BaseClientService.Initializer() { ApiKey = Keys.YouTubeApiKey, ApplicationName = Keys.YouTubeApplicationName })) { var searchListRequest = youtubeService.Search.List("snippet"); searchListRequest.Q = searchRequest_query; searchListRequest.MaxResults = 10; List<string> videos = new List<string>(); List<string> channels = new List<string>(); List<string> playlists = new List<string>(); List<string> thumbnails = new List<string>(); var searchListResponse = await searchListRequest.ExecuteAsync(); // Adiciona cada resultado à lista apropriada e, em seguida, // exibe as listas de vídeos, canais e listas de reprodução correspondentes. foreach (var searchResult in searchListResponse.Items) { switch (searchResult.Id.Kind) { case "youtube#video": videos.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.VideoId)); break; case "youtube#channel": channels.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.ChannelId)); break; case "youtube#playlist": playlists.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.PlaylistId)); break; } } var youTubeVideo = searchListResponse.Items.FirstOrDefault(); YouTubeVideoDetails videoDetails = new YouTubeVideoDetails() { VideoId = youTubeVideo.Id.VideoId, Description = youTubeVideo.Snippet.Description, Title = youTubeVideo.Snippet.Title, ChannelTitle = youTubeVideo.Snippet.ChannelTitle, PublicationDate = youTubeVideo.Snippet.PublishedAt, Thumbnail = youTubeVideo.Snippet.Thumbnails.Standard is not null ? youTubeVideo.Snippet.Thumbnails.Standard.Url : youTubeVideo.Snippet.Thumbnails.Medium is not null ? youTubeVideo.Snippet.Thumbnails.Medium.Url : youTubeVideo.Snippet.Thumbnails.Maxres is not null ? youTubeVideo.Snippet.Thumbnails.Maxres.Url : "Images/No-image-available.png" }; return videoDetails; } } public async Task<YouTubeVideoDetails> GetSingleVideoMetadata(string searchRequest_query) { try { using (var YouTubeService = new YouTubeService(new BaseClientService.Initializer() { ApiKey = Keys.YouTubeApiKey, ApplicationName = Keys.YouTubeApplicationName })) { var searchListRequest = YouTubeService.Videos.List("snippet"); searchListRequest.Id = searchRequest_query; searchListRequest.MaxResults = 1; var searchListResponse = await searchListRequest.ExecuteAsync(); var youTubeVideo = searchListResponse.Items.FirstOrDefault(); // redundante ? (MaxResults = 1...) if (youTubeVideo is not null) { YouTubeVideoDetails videoDetail = new YouTubeVideoDetails() { VideoId = youTubeVideo.Id, Description = youTubeVideo.Snippet.Description, Title = youTubeVideo.Snippet.Title, ChannelTitle = youTubeVideo.Snippet.ChannelTitle, PublicationDate = youTubeVideo.Snippet.PublishedAt, Thumbnail = youTubeVideo.Snippet.Thumbnails.Standard is not null ? youTubeVideo.Snippet.Thumbnails.Standard.Url : youTubeVideo.Snippet.Thumbnails.Medium is not null ? youTubeVideo.Snippet.Thumbnails.Medium.Url : youTubeVideo.Snippet.Thumbnails.Maxres is not null ? youTubeVideo.Snippet.Thumbnails.Maxres.Url : "Images/No-image-available.png" }; return videoDetail; } else return null; } } catch { throw; } } }
-
Boa tarde, agradeço desde já a ajuda que me poderem dar, Tou a trabalhar num software de gestão comercial e necessitava de adicionar ás faturas das gasolineiras a tava de Redução ISP+IVA e necessitava de saber qual o cálculo a fazer, obrigado.
-
Boas, Estou a criar um projeto para criar etiquetas automáticas a partir de um documento excel mas cheguei a uma parte onde tenho que criar tabela ou um espaço para colocar o qrcode para a etiqueta alinhar com os parágrafos que tao criados na etiqueta e tou ter problemas para alinhar o qrcode pq o programa assume que nao tem espaço e fica o qrcode mais a baixo do que era suposto eu pensei que fosse possível arranjar com uma nested table ou algum do genero preciso de ideias para o projeto como esta https://imgur.com/a/4eHOdPk como devia ficar https://imgur.com/a/nEfLwRG codigo da table para criar a forma da etiqueta https://pastebin.com/0zZ3qJ6y static void GenerateLabelTable(List<Label> generatedLabels, Document doc) { doc.Open(); iTextSharp.text.Font font = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 8.4f); iTextSharp.text.Font font2 = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 8.4f, iTextSharp.text.Font.BOLD); iTextSharp.text.Font font3 = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 11.5f, iTextSharp.text.Font.BOLD); float labelqrcode = 190; // Determine the number of rows and columns needed for the label grid int rows = (int)Math.Ceiling((double)generatedLabels.Count / 3); int cols = Math.Min(7, 3); // limit to a maximum of 7 columns int maxLabelsPerPage = 21; // set maximum number of labels per page //funcao gerar as tabelas e cells das etiquetas for (int i = 0; i < rows; i++) { PdfPTable table = new PdfPTable(cols); table.WidthPercentage = 100; // Create a new table within the main table. PdfPTable smallTable = new PdfPTable(1); // Set the width and height of the small table. smallTable.WidthPercentage = 30; //smallTable.AddCell("This is a cell in the small table."); for (int j = 0; j < cols; j++) { // Calculate the index of the current label in the labels list int index = i * 3 + j; if (index < generatedLabels.Count && index < (i + 1) * maxLabelsPerPage) { Label label = generatedLabels[index]; // Create a new paragraph with the label text Paragraph p = new Paragraph(label.LabelText, font3); p.Font.Color = label.FontColor; p.SpacingBefore = -15f; //p.SpacingAfter = -5f; // Create a new paragraph with the label text Paragraph p2 = new Paragraph(label.LabelText2, font2); p2.Font.Color = label.FontColor; p2.SpacingBefore = -2f; p2.SpacingAfter = -2f; // Create a new paragraph with the label text Paragraph p3 = new Paragraph(label.LabelText3, font); p3.Font.Color = label.FontColor; p3.SpacingBefore = -1f; p3.SpacingAfter = -2f; // Create a new paragraph with the label text Paragraph p4 = new Paragraph(label.LabelText4, font2); p4.Font.Color = label.FontColor; p4.SpacingBefore = -1.5f; p4.SpacingAfter = -2f; // Create a new paragraph with the label text Paragraph p5 = new Paragraph(label.LabelText5, font); p5.Font.Color = label.FontColor; p5.SpacingBefore = -1f; p5.SpacingAfter = -1f; // Create a new paragraph with the label text Paragraph p6 = new Paragraph(label.LabelText6, font2); p6.Font.Color = label.FontColor; p6.SpacingBefore = -1f; //mexer aqui para mexer o qrcode para cima p6.SpacingAfter = -4f; // Create a new paragraph with the label text Paragraph p7 = new Paragraph(label.LabelText7, font); p7.Font.Color = label.FontColor; p7.SpacingBefore = 1f; p7.SpacingAfter = -1f; // Create a new paragraph with the label text Paragraph p8 = new Paragraph(label.LabelText8, font2); p8.Font.Color = label.FontColor; p8.SpacingBefore = -2f; p8.SpacingAfter = -1f; // Create a new paragraph with the label text Paragraph p9 = new Paragraph(label.LabelText9, font); p9.Font.Color = label.FontColor; p9.SpacingBefore = -17f; p9.SpacingAfter = -1f; // Create a new paragraph Paragraph p98 = new Paragraph(); // Create a chunk containing the QR code and add it to the paragraph iTextSharp.text.Image qrImage = iTextSharp.text.Image.GetInstance(label.QRCodeImage, System.Drawing.Imaging.ImageFormat.Jpeg); //qrImage.ScaleToFit(60f, 60f); Chunk qrChunk = new Chunk(qrImage, (labelqrcode - 50), -10); qrImage.ScaleToFit(50f, 50f); qrChunk.Font.Color = label.FontColor; p98.Add(qrChunk); // smallTable.AddCell("qrimage"); // Create a new cell and add the paragraph to it PdfPCell cell = new PdfPCell(); cell.AddElement(p99); cell.AddElement(p); cell.AddElement(p2); cell.AddElement(p3); cell.AddElement(p4); cell.AddElement(p5); cell.AddElement(p6); cell.AddElement(p7); cell.AddElement(p8); cell.AddElement(p98); cell.AddElement(p9); // Position the small table in the bottom right corner of the main table. //PdfPCell cell1 = new PdfPCell(smallTable); //cell1.AddElement(p98); cell.FixedHeight = 120f; cell.HorizontalAlignment = Element.ALIGN_LEFT; cell.VerticalAlignment = Element.ALIGN_LEFT; table.AddCell(cell); //table.AddCell(cell1); } else { // Add an empty cell if there are no more labels PdfPCell emptyCell = new PdfPCell(); emptyCell.FixedHeight = 120; emptyCell.HorizontalAlignment = Element.ALIGN_LEFT; emptyCell.VerticalAlignment = Element.ALIGN_LEFT; emptyCell.Border = 0; table.AddCell(emptyCell); } } // Add the current row of labels to the document doc.Add(table); } doc.Close(); } obrigado pela ajuda
-
eu conseguir injeta uma form em outro programa ..como posso fixalo la dentro em que posso movimenta o programa e ele continuar fixado
-
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using AForge.Video; using AForge.Video.DirectShow; namespace VirtualFPVRemoteControl { public partial class MainForm : Form { //Global Var String[] serialLog = new String[300]; SerialLogDisplay sld_form; int motorPower = 0; FilterInfoCollection filterInfoCollection; VideoCaptureDevice videoCaptureDevice; //Form Method public MainForm() { InitializeComponent(); } //Generated Methods private void btnCCamera_Click(object sender, EventArgs e) { if(cmbCameraS.SelectedIndex > 0) { disconnectVideoStream(false); videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[cmbCameraS.SelectedIndex-1].MonikerString); videoCaptureDevice.NewFrame += new NewFrameEventHandler(VideoCaptureDevice_NewFrame); videoCaptureDevice.Start(); Add_Log("Camera \"" + filterInfoCollection[cmbCameraS.SelectedIndex-1].Name+ "\" Connected!"); } else { disconnectVideoStream(true); } } private void Form1_Load(object sender, EventArgs e) { //Camera System cmbCameraS.Items.Add("None"); filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice); foreach (FilterInfo filterInfo in filterInfoCollection) { cmbCameraS.Items.Add(filterInfo.Name); } cmbCameraS.SelectedIndex = 0; videoCaptureDevice = new VideoCaptureDevice(); //Log shortLog.Parent = cameraDisplay; shortLog.BackColor = Color.Transparent; shortLog.Text = serialLog[0] + "\n" + serialLog[1] + "\n" + serialLog[2]; //Loop Timer tmr = new Timer(); tmr.Interval = 1000; tmr.Tick += Tmr_Tick; tmr.Start(); //DisplayObjects changeMPBar(motorPower); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { disconnectVideoStream(false); } private void SLbtn_Click(object sender, EventArgs e) { if (sld_form == null) { sld_form = new SerialLogDisplay(this); } sld_form.update_log(serialLog); sld_form.Show(); sld_form.Activate(); } private void closeBtn_Click(object sender, EventArgs e) { disconnectVideoStream(false); System.Windows.Forms.Application.Exit(); } private void minBtn_Click(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; GC.Collect(); } //Created Methods //Serial Log private void Tmr_Tick(object sender, EventArgs e) { String lm = ""; for (int i = 4; i >= 0; i--) { if (serialLog[i] != null) { lm += serialLog[i] + "\n"; } } shortLog.Text = lm; } public void SerialLogDisplay_Close() { sld_form = null; } public void Add_Log(String text) { for (int i = serialLog.Length - 1; i > 0; i--) { serialLog[i] = serialLog[i - 1]; } serialLog[0] = text; if(sld_form != null) { sld_form.update_log(serialLog); } } public void Serial_Command(String command) { Add_Log(command); //Send command to serial Port } //Camera Output private void VideoCaptureDevice_NewFrame(object sender, NewFrameEventArgs eventArgs) { if (cameraDisplay.InvokeRequired) { try { cameraDisplay.Invoke((MethodInvoker)delegate { if (cameraDisplay.Image != null) { cameraDisplay.Image.Dispose(); } Bitmap bmp = (Bitmap)eventArgs.Frame.Clone(); cameraDisplay.Image = bmp; }); } catch (System.InvalidOperationException ex) { Add_Log("Error: " + ex); disconnectVideoStream(true); } } else { try { if (cameraDisplay.Image != null) { cameraDisplay.Image.Dispose(); } Bitmap bmp = (Bitmap)eventArgs.Frame.Clone(); cameraDisplay.Image = bmp; } catch (System.InvalidOperationException ex) { Add_Log("Error: " + ex); disconnectVideoStream(true); } } //GC.Collect(); } private void disconnectVideoStream(bool showLog) { if (videoCaptureDevice.IsRunning == true) { if (showLog) { Add_Log("Disconnecting video stream..."); } videoCaptureDevice.SignalToStop(); videoCaptureDevice.WaitForStop(); videoCaptureDevice.Stop(); cameraDisplay.Image = null; } if (showLog) { Add_Log("No camera connected!"); } GC.Collect(); } //Screen GUI private void changeMPBar(int nbar) { switch (nbar) { case 0: MPbar1.BackColor = Color.Transparent; MPbar2.BackColor = Color.Transparent; MPbar3.BackColor = Color.Transparent; MPbar4.BackColor = Color.Transparent; break; case 1: MPbar1.BackColor = Color.White; MPbar2.BackColor = Color.Transparent; MPbar3.BackColor = Color.Transparent; MPbar4.BackColor = Color.Transparent; break; case 2: MPbar1.BackColor = Color.White; MPbar2.BackColor = Color.White; MPbar3.BackColor = Color.Transparent; MPbar4.BackColor = Color.Transparent; break; case 3: MPbar1.BackColor = Color.White; MPbar2.BackColor = Color.White; MPbar3.BackColor = Color.White; MPbar4.BackColor = Color.Transparent; break; case 4: MPbar1.BackColor = Color.White; MPbar2.BackColor = Color.White; MPbar3.BackColor = Color.White; MPbar4.BackColor = Color.White; break; default: MPbar1.BackColor = Color.Transparent; MPbar2.BackColor = Color.Transparent; MPbar3.BackColor = Color.Transparent; MPbar4.BackColor = Color.Transparent; break; } } } } Eu tentei publicar esta dúvida no StackOverflow, mas a única resposta que tive foi de estar a usar a Picturebox(cameraDisplay) fora do Thread da UI. Para resumir o problema, a aplicação funciona normalmente, mas de vez em quando ela trava completamente ou então a imagem da pictureBox deixa de atualizar. Alguém sabe o motivo? Ou a forma correta de fazer?
-
Boa tarde, estou com problemas a consumir os webservices da autoridade tributária responsáveis pela comunicação de obrigações acessórias. Estava a testar o serviço "consultarDeclaracoes", mas recebo sempre um Internal Error. O pedido que estou a fazer é o seguinte: <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:at="http://at.pt/wsp/auth"> <S:Header> <wss:Security xmlns:wss="https://schemas.xmlsoap.org/ws/2002/12/secext" at:Version="2"> <wss:UsernameToken> <wss:Username>Parametro_Username/1</wss:Username> <wss:Nonce>Parametro_Nonce</wss:Nonce> <wss:Password Digest="Parametro_Digest">Parametro_Password</wss:Password> <wss:Created>Parametro_Created</wss:Created> </wss:UsernameToken> </wss:Security> </S:Header> <S:Body> <ns:consultarDeclaracoesRequest xmlns:ns="https://servicos.portaldasfinancas.gov.pt/oaatws/GestaoDeclarativaOAWebService/2021"> <modelo>DMR</modelo> <ano>2022</ano> <mes>2</mes> </ns:consultarDeclaracoesRequest> </S:Body> </S:Envelope> Mas recebo a seguinte response: <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <env:Fault> <faultcode>env:Client</faultcode> <faultstring>Internal Error</faultstring> </env:Fault> </env:Body> </env:Envelope> Alguém me pode ajudar? Já testei no SoapUi e em C# com o HttpWebRequest, mas recebo sempre a mesma mensagem.
-
Olá, foi me dada uma tarefa de estagio em que teria de fazer um programa que inserisse numa table as informações que o utilizador colocar e entretanto já tentei fazer de varias formas mas dá sempre o mesmo erro sendo ele no cmd.ExecuteNonQuery(); Segue-se aqui o codigo que fiz até então: public Form2() { InitializeComponent(); SqlConnection con = new SqlConnection("Data Source=OPCOSQL\\OPCOSQL;Initial Catalog=OPCO-SQL;Integrated Security=True;Pooling=False"); con.Open(); SqlCommand cmd = new SqlCommand("Select * from Pc", con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); dataGridView1.DataSource = dt; } private void button1_click_1(object sender, EventArgs e) { SqlConnection con = new SqlConnection("Data Source=OPCOSQL\\OPCOSQL;Initial Catalog=OPCO-SQL;Integrated Security=True;Pooling=False"); con.Open(); SqlCommand cmd = new SqlCommand("insert into dbo.[Pc] ([Cpu], [Hd], [Ram], [Video Port], [Ip/Dhcp]) values ('@Cpu', '@Hd', '@Ram', '@Video Port', '@Ip/Dhcp')\r\n", con); cmd.Parameters.AddWithValue("@Cpu", textBox1.Text); cmd.Parameters.AddWithValue("@Hd", textBox2.Text); cmd.Parameters.AddWithValue("@Ram", textBox3.Text); cmd.Parameters.AddWithValue("@Video Port", textBox4.Text); cmd.Parameters.AddWithValue("@Ip/Dhcp", textBox5.Text); cmd.ExecuteNonQuery(); con.Close(); }
-
Prezados, Boa tarde! Estou desenvolvendo uma ferramenta, em C#, e estou com a necessidade de editar dados listados em um GidView. Ao acionar o método para de edição do Grid, eu consigo editar normalmente os dados da linha selecionada, e quando vou pegar a informação editada via Grid para salvar, a informação retornada do Grid não é a informação editada, e sim a informação carregada anterior a edição. Alguém consegue me ajudar? O que estou fazendo de errado? Segue código ASP do grid: <asp:GridView ID="GwTeste" runat="server" CellPadding="4" ForeColor="#00498A" GridLines="None" PageSize="15" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="chave" OnRowCancelingEdit="GwTeste_RowCancelingEdit" OnRowEditing="GwTeste_RowEditing" OnRowUpdating="GwTeste_RowUpdating" OnPageIndexChanging="GwTeste_PageIndexChanging" OnSelectedIndexChanged="GwTeste_SelectedIndexChanged" OnRowDataBound="GwTeste_RowDataBound"> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <Columns> <asp:BoundField DataField="chave" HeaderText="Código" /> <asp:TemplateField HeaderText="Inform"> <ItemTemplate> <%# Eval("descricao") %> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txbDescricao" runat="server" Text='<%# Eval("descricao") %>' > </asp:TextBox> </EditItemTemplate> </asp:TemplateField> <asp:CommandField CancelImageUrl="~/Icons/xRedondo256x256.png" DeleteImageUrl="~/Icons/picaPapel256x256.png" EditImageUrl="Icons/lapis-512x512.png" EditText="" HeaderText="Editar 1" ButtonType="Image" ShowEditButton="True" ShowDeleteButton="True" CausesValidation="False" UpdateImageUrl="~/Icons/salvar128x128.png"> <ControlStyle CssClass="icoGrid" /> <HeaderStyle CssClass="gridHeaderWidth" /> </asp:CommandField> </Columns> <EditRowStyle BackColor="#CCCCCC" /> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#E9E7E2" /> <SortedAscendingHeaderStyle BackColor="#506C8C" /> <SortedDescendingCellStyle BackColor="#FFFDF8" /> <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> </asp:GridView> Código C# protected void GwTeste_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GwTeste.EditIndex = -1; carregaGrid(); } protected void GwTeste_RowEditing(object sender, GridViewEditEventArgs e) { GwTeste.EditIndex = e.NewEditIndex; carregaGrid(); } protected void GwTeste_RowUpdating(object sender, GridViewUpdateEventArgs e) { int id = Convert.ToInt32(GwTeste.DataKeys[e.RowIndex].Value.ToString()); TextBox txbDescricao = (TextBox)GwTeste.Rows[e.RowIndex].FindControl("txbDescricao"); GwTeste.EditIndex = -1; carregaGrid(); } protected void GwTeste_PageIndexChanging(object sender, GridViewPageEventArgs e) { GwTeste.PageIndex = e.NewPageIndex; carregaGrid(); } protected void GwTeste_RowDataBound(object sender, GridViewRowEventArgs e) { if(e.Row.RowState == (DataControlRowState.Edit| DataControlRowState.Alternate) | e.Row.RowState == DataControlRowState.Edit) { return; } } Desde já agradeço!!!
-
Boa tarde a todos, Estou com dificuldades para somar valores com casas decimais no asp.net usando o c#. Possuo 4 textboxes e pretendo que o programa some (instantaneamente) os valores que estarão a ser digitados no momento. O meu código soma apenas inteiros. Alguma sugestao? protected void TextBox1_TextChanged(object sender, System.EventArgs e) { int first = 0; int second = 0; int third = 0; int forth = 0; if (Int32.TryParse(TextBox1.Text, out second) && Int32.TryParse(TextBox2.Text, out first)&& Int32.TryParse(TextBox3.Text, out forth) && Int32.TryParse(TextBox4.Text, out third)) TextBox5.Text = (first + second + third + forth).ToString(); } Obrigado desde já.
-
Estou com dificuldades em separar um nome completo da textbox em outras duas. ex: escrevo na txtbox1- Joao lameda recebo na txtbox2- Joao e na txtbox3- lameda Espero que me consigam ajudar
-
Boa tarde, Eu queria ajuda para guardar todas as linhas de um listview na minha base de dados. Eu consigo guardar a primeira linha do listview mas não consigo gravar as restantes linhas preenchidas. Usei este código para gravar a primeira linha. string queryInsertComent = String.Format(@" INSERT INTO Tb_RelatorioEnsaio (T_NMOLDE) VALUES('{0}') ", lv_Relatorio.Items[0].SubItems[0].Text); Banco.dml(queryInsertComent); MessageBox.Show("Novos comentários inseridos"); Alguém me consegue ajudar?
-
Bom tarde, Preciso uma solução para assinar digitalmente o meu software para não ser "comido" pelos antivírus e ser trusted pelo Windows no momento da instalação. O software é muitas vezes reconhecido como tendo vírus pela forma de ofuscação usada. Li que se assinar digitalmente o software após ter encriptado deixo ode ter esse tipo de problemas. Alguém usa este tipo de solução? Têm alguma ideia de onde posso comprar a bom preço esse tipo de certificado? Desde já obrigado pela ajuda. Cumprimentos, David Dewasmes