PHP ::: Dicas & Truques ::: Arquivos e Diretórios |
Quais as diferenças entre as funções fgetc(), fread() e fgets() da linguagem PHP? - RevisadoQuantidade de visualizações: 15803 vezes |
As funções fgetc(), fread() e fgets() do PHP nos permitem fazer a leitura de caracteres, palavras, textos e bytes de um arquivo. No entanto, nem sempre os iniciantes nesta linguagem conseguem identificar as diferenças entre essas três funções. Nessa dica falarei sobre o que diferencia uma da outra. Em mais dicas e truques dessa seção você aprenderá como usá-las. A função fgetc() lê um caractere por vez em um arquivo. Sua assinatura é: string fgetc(resource $handle) A função fgets(), por sua vez, retorna uma linha de texto de cada vez. Veja a assinatura: string fgets(resource $handle [, int $length]) O parâmetro $length pode ser omitido, o que significa que o tamanho da linha será definindo pela ocorrência de uma quebra de linha "\n". Já a função fread() permite ler uma determinada quantidade de bytes de um arquivo. Sua assinatura é: string fread(resource $handle, int $length) O parâmetro $length indica a quantidade de bytes que serão lidos, de cada vez, do arquivo. Esta dica foi revisada para o PHP 8. |
C# ::: Datas e Horas ::: DateTime |
Como usar a estrutura DateTime do C# em seus programasQuantidade de visualizações: 9499 vezes |
A estrutura DateTime representa um momento no tempo, geralmente expressado como uma data e hora do dia. O tipo DateTime representa datas e horas com valores na faixa de meia-noite do dia 1º de janeiro de 0001 Anno Domini (Common Era) até as 11:59:59 da noite do dia 31 de dezembro de 9999 A.D. (C.E.). Os valores de horas são medidos em unidades de 100 nanosegundos chamados de ticks e uma data em particular é o número de ticks desde a meia-noite do dia 1º de janeiro de 0001 A.D (C.E) no calendário Gregoriano (GregorianCalendar). Por exemplo, um valor de tick de 31241376000000000L representa a data 1º de janeiro de 0100 (sexta-feira) à meia-noite. O valor DateTime é sempre expresso no contexto de um calendário explícito ou padrão. Considerações sobre versões Em versões do .NET Framework anteriores à 2.0, a estrutura DateTime contém um campo de 64 bits composto de um campo de 2 bits não usados concatenados com um campo privado Ticks, que é um campo sem sinal de 62 bits que contém o número de ticks que representam a data e hora. O valor do campo Ticks pode ser obtido por meio da propriedade Ticks. A partir do .NET Framework 2.0, a estrutura DateTime contém um campo de 64 bits composto de um campo privado Kind concatenado com o campo Ticks. O campo Kind é um campo de 2 bits que indica se a estrutura DateTime representa uma hora local, uma hora UTC (Coordinated Universal Time) ou um hora em um fuso horário não especificado. O campo Kind é usado quando estamos efetuando conversões de horas entre fuso horários, mas, não é usado para comparações de datas e horas ou aritmética. O valor do campo Kind pode ser obtido por meio da propriedade Kind. É importante observar que uma alternativa ao uso da estrutura DateTime para se trabalhar com datas e horas em um fuso horário em particular é a estrutura DateTimeOffset. Esta estrutura guarda as informações de data e hora em um campo DateTime privado e o número de minutos pelos quais a data e hora diferem do horário UTC em um campo Int16 privado. Isso torna possível usarmos um valor DateTimeOffset para refletir as horas em um fuso horário em particular, enquanto um valor DateTime pode, sem causar confusão, refletir somente a hora UTC e do fuso horário local. Valores DateTime As descrições de valores de horas no tipo DateTime geralmente são expressas usando o padrão Coordinated Universal Time (UTC), que é o nome reconhecido internacionalmente para o Greenwich Mean Time (GMT). O Coordinated Universal Time é a hora de acordo com as medições em longitude de zero graus, ou seja, o ponto de origem UTC. Horários de verão não são aplicáveis ao UTC. A hora local é relativa a um determinado fuso horário. Um fuso horário está associado à diferença de fuso horário, que é o deslocamento do fuso horário medido em horas a partir do ponto de origem UTC. Além disso, a hora local é opcionalmente afetada pelo horário de verão, que adiciona ou subtrai uma hora à duração do dia. Consequentemente, a hora local é calculada adicionando-se a diferença de fuso horário ao UTC e ajustando o horário de verão se necessário. A diferença de fuso horário no ponto de origem UTC é zero. A hora UTC é ideal para cálculos, comparações e armazenamento de datas e horas em arquivos. A hora local é apropriada para a exibição em interfaces do usuário em aplicações desktop. Aplicações que são acessadas em diferentes fuso horários (tais com aplicações web) também precisam fornecer meios para a correta adequação a tais fuso horários. Veja um trecho de código no qual usamos a propriedade Now da estrutura DateTime para exibir a data e hora local no formato longo: static void Main(string[] args){ // Data e hora atual DateTime agora = DateTime.Now; // exibe o resultado System.Console.WriteLine("{0:F}", agora); // pausa o programa Console.ReadKey(); } O resultado da execução deste código será algo parecido com: segunda-feira, 23 de fevereiro de 2008 19:54:46. |
C++ ::: Win32 API (Windows API) ::: Edit Control |
Como definir a cor de fundo para um Edit Control em tempo de execução usando C++ e a API do WindowsQuantidade de visualizações: 10285 vezes |
O processo de definir a cor de fundo para um Edit Control em tempo de execução usando apenas C++ e a API do Windows é um pouco complicado. A técnica apresentada aqui pode não ser a mais eficiente, mas funciona mesmo (testado como VC++ 2005 e Windows XP). Note que estarei usando as funções CreateSolidBrush(), GetDlgCtrlID(), SetBkMode() e SetBkColor() da WinAPI. 1 - Comece adicionando as linhas na parte de variáveis globais de sua aplicação: HBRUSH hbrushEditBox = CreateSolidBrush(RGB(255, 255, 255)); HDC hdcEdit; int id_edit_control; HWND edit_window; 2 - Modifique ou adicione um case para a mensagem WM_CTLCOLOREDIT da seguinte forma: case WM_CTLCOLOREDIT: hdcEdit = (HDC)wParam; edit_window = HWND(lParam); id_edit_control = GetDlgCtrlID(edit_window); if(id_edit_control == IDC_EDIT1){ SetBkMode(hdcEdit, TRANSPARENT); SetBkColor(hdcEdit,(LONG)hbrushEditBox); return (LONG)hbrushEditBox; } return (LRESULT)CreateSolidBrush(RGB(255, 255, 255)); 3 - A cor de fundo do Edit Control com ID IDC_EDIT1 será modificada para vermelho quando clicarmos no botão com o ID IDC_BUTTON1. Veja o case para este botão (dentro do case WM_COMMAND): case IDC_BUTTON1: // ID do botão // Define uma nova cor de fundo para o Edit Control // com o ID IDC_EDIT1 // Vermelho como cor de fundo hbrushEditBox = CreateSolidBrush(RGB(255, 0, 0)); // Atualiza o Edit Control InvalidateRect(GetDlgItem(hwnd, IDC_EDIT1), 0, TRUE); break; |
Delphi ::: Dicas & Truques ::: Bilbiotecas Estáticas (obj) e Dinâmicas (DLLs) |
Como criar DLLs usando Delphi? É possível criar DLLs para o Windows usando Delphi?Quantidade de visualizações: 13064 vezes |
As DLLs (Dynamic Link Libraries - Bibliotecas de Vínculo Dinâmico) são arquivos compilados bem similares aos arquivos .exe que estamos acostumados a criar em Delphi. Uma DLL contém rotinas, recursos ou ambos. Mas, não pode ser executada por si só, ou seja, se dermos duplo-clique em uma DLL nada acontecerá. Isso acontece porque uma DLL é desenvolvida para ser usada juntamente como outros aplicativos e/ou outras DLLs. No ambiente Windows encontramos muitas DLLs. Na verdade, o Windows e sua Win32 API é uma coleção de DLLs. Se olharmos nos diretórios System ou System32 encontraremos várias delas, incluindo kernel32.dll, gdi32.dll, user32.dll, shell32.dll, comctl32.dll, entre outras. Mas, para que servem as DLLs? É possível desenvolver aplicações Windows sem usá-las? Vamos às respostas. As DLLs existem com o propósito de compartilhar código entre aplicações. Isso quer dizer que uma mesma DLL pode estar sendo usada por vários programas ao mesmo tempo. E isso é verdade no ambiente Windows. Todos os programas de interface gráfica escritos em Delphi, C, C++, etc e que usam os componentes gráficos do Windows estão de alguma forma fazendo uso de códigos disponíveis em DLLs do sistema. Sem o aproveitamente de tais códigos os executáveis ficariam enormes, visto que cada um teria que implementar as rotinas de desenho e diretivas de criação de janelas. Ao aproveitar as funcionalidades disponíveis nas DLLs do sistema esta tarefa se torna muito mais fácil. Mas, além de usar DLLs de terceiros com códigos já prontos e devidamente testados, você também pode criar suas próprias DLLs. O motivo disso é que você pode querer compartilhar algumas de suas rotinas entre os vários aplicativos que você desenvolve. A maior vantagem disso é que, ao atualizar ou corrigir o código em uma DLL você estará certo de que todas as aplicações que fazem uso desta DLL automaticamente perceberão e tirarão proveito da atualização. Entre as vantagens do uso de DLLs podemos citar: a) Podemos compartilhar rotinas e códigos entre várias aplicativos; b) Ao mantermos boa parte de nossos códigos em DLLs nós conseguimos economizar memória e espaço em disco; c) Outros desenvolvedores poderão usar nossas rotinas e lógica mesmo sem ter acesso aos nossos códigos-fontes; d) Podemos usar códigos escritos em outras linguagens em nossos programas Delphi. Isso quer dizer que uma DLL escrita em C/C++ poderá ser usada em um programa Delphi sem qualquer problema. A prova disso é que as DLLs do Windows são escritas em C/C++. Hora de criar sua primeira DLL em Delphi. Consulte outras dicas nesta seção para aprender a fazê-lo. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Java ::: Coleções (Collections) ::: ArrayList |
Como ordernar uma ArrayList de Strings em ordem alfabética usando o método sort() da classe Collections da linguagem JavaQuantidade de visualizações: 22946 vezes |
Neste exemplo mostrarei como podemos ordenar um ArrayList de Strings em ordem alfabética. Para isso usaremos o método sort() da classe Collections. É importante observar que estou usando String no exemplo. Se você quiser usar objetos de suas próprias classes, elas precisarão implementar a interface Comparable. Veja o código completo: package arquivodecodigos; import java.util.ArrayList; import java.util.Collections; public class Estudos{ public static void main(String[] args){ // cria uma ArrayList que conterá strings ArrayList<String> nomes = new ArrayList<>(); // adiciona itens na lista nomes.add("Carlos"); nomes.add("Maria"); nomes.add("Fernanda"); nomes.add("Osmar"); // exibe os elementos da ArrayList for(int i = 0; i < nomes.size(); i++){ System.out.println(nomes.get(i)); } // Vamos ordenar os elementos Collections.sort(nomes); // exibe os elementos da ArrayList System.out.println(); for(int i = 0; i < nomes.size(); i++){ System.out.println(nomes.get(i)); } System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: Carlos Maria Fernanda Osmar Carlos Fernanda Maria Osmar Este código foi testado no Java 8. |
C++ ::: Dicas & Truques ::: Arquivos e Diretórios |
Como excluir um diretório em C++ usando a função rmdir()Quantidade de visualizações: 8562 vezes |
Em algumas situações nossos códigos C++ precisam excluir diretórios. Isso pode ser feito com o auxílio da função _rmdir() ou rmdir(), disponível no header direct.h (trazido da linguagem C). Veja a assinatura desta função:int _rmdir(const char *pathname); a) ENOTEMPTY - Directory not empty - O diretório não está vazio e portanto não pode ser excluído; b) ENOENT - No such file or directory - O caminho do diretório é inválido; c) EACCESS - Acesso negado - Algum outro programa está usando este diretório e mantém controle sobre o mesmo. Veja um trecho de código C++ no qual excluímos um diretório: #include <iostream> #include <direct.h> using namespace std; int main(int argc, char *argv[]){ // vamos excluir este diretório char diretorio[] = "C:\\Dev-Cpp\\estudos"; // vamos testar se houve erro na exclusão do diretório if(rmdir(diretorio) == -1){ cout << "Erro: " << strerror(errno) << endl; } else{ cout << "Diretório excluído com sucesso" << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } É possível usar a versão Unicode de _rmdir(), ou rmdir(). O método _wrmdir(), também presente em direct.h é útil quando precisamos internacionalizar nossas aplicações. Veja o exemplo: #include <iostream> #include <direct.h> using namespace std; int main(int argc, char *argv[]){ // vamos excluir este diretório wchar_t diretorio[] = L"C:\\Dev-Cpp\\estudos"; // vamos testar se houve erro na exclusão do diretório if(_wrmdir(diretorio) == -1){ cout << "Erro: " << strerror(errno) << endl; } else{ cout << "Diretório excluído com sucesso" << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
LISP ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular MMC em Lisp - Como calcular o Mínimo Múltiplo Comum na linguagem LispQuantidade de visualizações: 915 vezes |
O Mínimo Múltiplo Comum (MMC), ou LCM (Least Common Multiple) é um tipo de operação matemática utilizada para encontrar o menor número positivo, diferente de 0 (zero), que é múltiplo ao mesmo tempo de dois ou mais números. O MMC é utilizado, por exemplo, na soma e subtração de frações - quando é necessário um denominador comum. Nesta dica mostrarei como podemos calcular o MMC de dois números inteiros informados pelo usuário. Veja o código Common Lisp completo: ; variáveis que vamos usar no programa (let ((num1)(num2)(maior)(mmc)) ; Vamos ler o primeiro número (princ "Informe o primeiro número: ") ; talvez o seu compilador não precise disso (force-output) ; atribui o valor lido à variável num1 (setq num1 (read)) ; Vamos ler o segundo número (princ "Informe o segundo número: ") ; talvez o seu compilador não precise disso (force-output) ; atribui o valor lido à variável num2 (setq num2 (read)) ; agora escolhemos o maior número (cond ((> num1 num2)(setq maior num1)) (t (setq maior num2)) ) ; e entramos em um laço loop (loop ; testa se o maior é divisível por num1 e por num2 (cond ((and (= 0 (rem maior num1))(= 0 (rem maior num2))) ; mmc recebe o maior e sai do laço (setq mmc maior)(return))) ; incrementa o valor da variável maior (setq maior (+ maior 1)) ) ; mostra o resultado (format t "O MMC dos dois números é ~D" mmc) ) Ao executarmos este código Common Lisp nós teremos o seguinte resultado: Informe o primeiro número: 6 Informe o segundo número: 3 O MMC dos dois números é: 6 Note que a linguagem Common Lisp possui uma função LCM() que permite calcular o MMC de dois ou mais números. Minha intenção com essa dica foi mostrar como o cálculo do MMC é feito em Common Lisp. |
PHP ::: Dicas & Truques ::: PDO (PHP Data Objects) |
PHP PDO - Como disparar comandos SELECT usando a função PDO->query()Quantidade de visualizações: 14530 vezes |
Nesta dica mostrarei como disparar uma query SELECT usando PDO->query(). Veja que mostramos ainda como percorrer os resultados obtidos. Para este exemplo eu me conectei a um banco de dados MySQL e obtive dados de uma tabela chamada "produtos". Veja o código PHP PDO MySQL completo para o exemplo (incluindo a conexão com o banco de dados): <html> <head> <title>Estudando PHP</title> </head> <body> <?php // primeiro vamos obter a conexão com o banco de dados $server = "localhost"; $user = "root"; $pass = "osmar1234"; $db = "estudos"; try{ $conn = new PDO("mysql:host=$server;dbname=$db", $user, $pass); // echo "Conexão efetuada com sucesso."; } catch(PDOException $e){ die('Não foi possível conectar: ' . $e->getMessage()); } // agora que já temos a conexão, vamos disparar // o comando DML SELECT $resultado = $conn->query("SELECT * FROM produtos"); if($resultado){ while($linha = $resultado->fetch(PDO::FETCH_ASSOC)){ echo "Id: " . $linha['id'] . "<br>"; echo "Nome: " . $linha['nome'] . "<br>"; echo "Preço: " . $linha['preco'] . "<br>"; echo "Quantidade: " . $linha['quantidade'] . "<br><br>"; } } ?> </body> </html> Ao executar este código nós teremos o seguinte resultado: Id: 1 Nome: ARROZ TIPO A Preço: 13 Quantidade: 320 Id: 2 Nome: FEIJÃO CARIOCA Preço: 9.5 Quantidade: 120 Id: 3 Nome: EXTRATO DE TOMATE AMD Preço: 4.24 Quantidade: 50 |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle |
Exercícios Resolvidos de C - Ler os lados de um triângulo e informar se ele é isósceles, escaleno ou equiláteroQuantidade de visualizações: 2509 vezes |
Pergunta/Tarefa: Um triângulo é uma forma geométrica (polígono) composta de três lados, sendo que cada lado é menor que a soma dos outros dois lados. Assim, para que um triângulo seja válido, é preciso que seus lados A, B e C obedeçam à seguinte regra: A < (B + C), B < (A + C) e C < (A + B). Escreva um programa C que leia os três lados de um triângulo e verifique se tais valores realmente formam um triângulo. Se o teste for satisfatório, informe se o triângulo é isósceles (dois lados iguais e um diferente), escaleno (todos os lados diferentes) ou equilátero (todos os lados iguais). Sua saída deverá ser parecida com: Informe o primeiro lado do triângulo: 30 Informe o segundo lado do triângulo: 40 Informe o terceiro lado do triângulo: 60 O triângulo é escaleno Veja a resolução comentada deste exercício usando C: #include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]){ setlocale(LC_ALL,""); // para acentos do português int lado_a, lado_b, lado_c; // vamos ler o primeiro lado do triângulo printf("Informe o primeiro lado do triângulo: "); scanf("%d", &lado_a); // vamos ler o segundo lado do triângulo printf("Informe o segundo lado do triângulo: "); scanf("%d", &lado_b); // vamos ler o terceiro lado do triângulo printf("Informe o terceiro lado do triângulo: "); scanf("%d", &lado_c); // os lados informados formam um triângulo? if((lado_a < (lado_b + lado_c)) && (lado_b < (lado_a + lado_c)) && (lado_c < (lado_a + lado_b))){ // é um triângulo equilátero (todos os lados iguais)? if((lado_a == lado_b) && (lado_b == lado_c)){ printf("\nO triângulo é equilátero\n"); } else{ // é isósceles (dois lados iguais e um diferente)? if((lado_a == lado_b) || (lado_a == lado_c) || (lado_c == lado_b)){ printf("\nO triângulo é isósceles\n"); } else{ // é escaleno printf("\nO triângulo é escaleno\n"); } } } else{ printf("\nOs lados informados não formam um triângulo.\n"); } printf("\n\n"); system("pause"); return 0; } |
Revit C# ::: Dicas & Truques ::: Revit C# Windows Forms |
Como criar um formulário Windows Forms a partir do Revit C#Quantidade de visualizações: 810 vezes |
Nesta dica mostrarei os passos necessários para se criar uma aplicação Revit C# contendo uma formulário Windows Forms. O objetivo é demonstrar como o usuário pode interagir com os elementos do formulário para acessar e manipular objetos do Revit a partir de códigos C#. Antes de continuarmos, veja a janela Windows Forms que criamos logo abaixo: ![]() Veja que temos um formulário contendo 6 Labels e 6 TextBox contendo as coordenadas inicias e finais de uma linha geométrica usada para criar um novo eixo na área de desenho do Revit. Ao informar as coordenadas e clicar o botão Desenhar Eixo, um novo objeto da classe Grid da Revit API é criado e desenhado no documento atual. Este código é muito útil para iniciantes em programação Revit C# porque mostra como acessar o documento ativo usando ActiveUIDocument e em seguida passar este objeto para uma outra classe C#. De posse deste objeto nós podemos realizar várias tarefas, entre elas criar uma nova linha geométrica usando Line.CreateBound() e, em seguida, criar um novo Grid usando Grid.Create(). Veja o código completo para uma macro chamada Estudos do tipo Aplicativo. Se tiver dificuldades para executar, chama a gente nos contatos na parte superior do site que teremos prazer em ajudá-lo. Eis a listagem do código C#: using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace Estudos { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes. TransactionMode.Manual)] [Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")] public partial class ThisApplication { private void Module_Startup(object sender, EventArgs e) { JanelaPrincipal janela = new JanelaPrincipal(); janela.uidoc = this.ActiveUIDocument; janela.ShowDialog(); } private void Module_Shutdown(object sender, EventArgs e) { // para fazer alguma limpeza de memória ou algo assim } #region Revit Macros generated code private void InternalStartup() { this.Startup += new System.EventHandler(Module_Startup); this.Shutdown += new System.EventHandler(Module_Shutdown); } #endregion } // classe para representar o formulário public class JanelaPrincipal : System.Windows.Forms.Form { public UIDocument uidoc; public System.Windows.Forms.TextBox txtX0; public System.Windows.Forms.TextBox txtY0; public System.Windows.Forms.TextBox txtZ0; public System.Windows.Forms.TextBox txtX1; public System.Windows.Forms.TextBox txtY1; public System.Windows.Forms.TextBox txtZ1; // construtor da classe public JanelaPrincipal() { this.Text = "Meu Formulário Revit C# Windows Forms"; // título da janela this.Width = 390; // largura da janela this.Height = 240; // altura da janela // define a posição atual da janela this.StartPosition = FormStartPosition.CenterScreen; // vamos criar quatro labels e quatro caixas de texto Label label1 = new Label(); label1.Text = "X Inicial:"; label1.Location = new System.Drawing.Point(20, 20); label1.Height = 15; label1.Width = 80; Label label2 = new Label(); label2.Text = "Y Inicial:"; label2.Location = new System.Drawing.Point(120, 20); label2.Height = 15; label2.Width = 80; Label label3 = new Label(); label3.Text = "Z Inicial:"; label3.Location = new System.Drawing.Point(220, 20); label3.Height = 15; label3.Width = 80; txtX0 = new System.Windows.Forms.TextBox(); txtX0.Location = new System.Drawing.Point(20, 40); txtX0.Width = 80; txtX0.Height = 15; txtY0 = new System.Windows.Forms.TextBox(); txtY0.Location = new System.Drawing.Point(120, 40); txtY0.Width = 80; txtY0.Height = 15; txtZ0 = new System.Windows.Forms.TextBox(); txtZ0.Location = new System.Drawing.Point(220, 40); txtZ0.Width = 80; txtZ0.Height = 15; Label label4 = new Label(); label4.Text = "X Final:"; label4.Location = new System.Drawing.Point(20, 80); label4.Height = 15; label4.Width = 80; Label label5 = new Label(); label5.Text = "Y Final:"; label5.Location = new System.Drawing.Point(120, 80); label5.Height = 15; label5.Width = 80; Label label6 = new Label(); label6.Text = "Z Final:"; label6.Location = new System.Drawing.Point(220, 80); label6.Height = 15; label6.Width = 80; txtX1 = new System.Windows.Forms.TextBox(); txtX1.Location = new System.Drawing.Point(20, 97); txtX1.Width = 80; txtX1.Height = 15; txtY1 = new System.Windows.Forms.TextBox(); txtY1.Location = new System.Drawing.Point(120, 97); txtY1.Width = 80; txtY1.Height = 15; txtZ1 = new System.Windows.Forms.TextBox(); txtZ1.Location = new System.Drawing.Point(220, 97); txtZ1.Width = 80; txtZ1.Height = 15; // botão que desenha o eixo nas coordenadas indicadas Button button1 = new Button(); button1.Text = "Desenhar Eixo"; button1.Location = new System.Drawing.Point(95, 160); button1.Width = 150; button1.Click += new System.EventHandler(DesenharEixo); // botão que fecha a janela Button button2 = new Button(); button2.Text = "Fechar"; button2.Location = new System.Drawing.Point(265, 160); button2.Width = 80; button2.Click += new System.EventHandler(FecharJanela); // adiciona os controles à janela this.Controls.Add(label1); this.Controls.Add(label2); this.Controls.Add(label3); this.Controls.Add(label4); this.Controls.Add(label5); this.Controls.Add(label6); this.Controls.Add(txtX0); this.Controls.Add(txtY0); this.Controls.Add(txtZ0); this.Controls.Add(txtX1); this.Controls.Add(txtY1); this.Controls.Add(txtZ1); this.Controls.Add(button1); this.Controls.Add(button2); } // função usada para desenhar um novo eixo no documento atual private void DesenharEixo(object sender, System.EventArgs e) { // primeiro obtemos uma referência ao documento atual Document doc = uidoc.Document; // criamos a linha geométrica para posicionar o eixo XYZ inicio = new XYZ(Double.Parse(txtX0.Text), Double.Parse(txtY0.Text), Double.Parse(txtZ0.Text)); XYZ final = new XYZ(Double.Parse(txtX1.Text), Double.Parse(txtY1.Text), Double.Parse(txtZ1.Text)); // construímos a linha Line linhaGeometrica = Line.CreateBound(inicio, final); // iniciamos uma nova transação using(Transaction t= new Transaction(doc)) { t.Start("Criar um novo Grid"); Grid grid = Grid.Create(doc, linhaGeometrica); t.Commit(); } } // função usada para fechar a janela private void FecharJanela(object sender, System.EventArgs e) { this.Close(); } } } Não se esqueça de adicionar referências a System.Windows.Forms e System.Drawing. Basta, dentro do SharpDevelop, ir no menu Projeto -> Adicionar Referência. |
Nossas 20 dicas & truques de programação mais populares |
JavaScript - Como calcular o coeficiente angular de uma reta em JavaScript dados dois pontos no plano cartesiano Python - Exercícios Resolvidos de Python - Como converter de binário para decimal em Python usando o laço for Fórmulas da Física - Fórmula da Velocidade - Como calcular a velocidade quando temos a distância percorrida e o tempo gasto |
Você também poderá gostar das dicas e truques de programação abaixo |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |