4 de dez. de 2004
Como funcionam os Namespaces em Delphi?
3 de dez. de 2004
Como criar uma constante array em C#?
para criar um array de constantes inteiras. Mas existe um pequeno problema... embora o array não possa ser modificado, cada elemento individual pode ser alterado!1 static readonly int [] constIntArray = 2 new int[] {1, 2, 3};
Como desenhar texto rotacionado em VB.NET?
1 Public Enum Direction As Integer 2 N = 0 3 NE = 1 4 E = 2 5 SE = 3 6 S = 4 7 SW = 5 8 W = 6 9 NW = 7 10 End Enum 11 12 Protected Overrides Sub OnPaint(ByVal e As 13 System.Windows.Forms.PaintEventArgs) 14 15 e.Graphics.Clear(Me.BackColor) 16 17 Dim bounds As Rectangle 18 Dim g As Graphics 19 Dim rotation As Single = 0 20 21 g = e.Graphics 22 bounds = New Rectangle(50, 50, Me.Width - 100, 23 Me.Height - 100) 24 25 Dim rect As System.Drawing.RectangleF 26 27 g.DrawEllipse(Pens.Black, bounds) 28 29 Dim myMatrix As Drawing2D.Matrix 30 Dim sf As New StringFormat(StringFormatFlags.NoWrap) 31 32 sf.Alignment = StringAlignment.Center 33 myMatrix = g.Transform() 34 rect = New System.Drawing.RectangleF(bounds.X, 35 bounds.Y, bounds.Width, bounds.Height) 36 37 For i As Integer = 0 To 7 38 If i > 0 Then 39 myMatrix.RotateAt(45, 40 New PointF(Me.Width / 2, Me.Height / 2), 41 Drawing.Drawing2D.MatrixOrder.Append) 42 g.Transform = myMatrix 43 End If 44 45 Dim directionString As String 46 47 directionString = 48 System.Enum.GetName(GetType(Direction), i) 49 g.DrawString(directionString, 50 New Font("Arial", 12, FontStyle.Bold), 51 Brushes.Black, rect, sf) 52 Next 53 End Sub
23 de nov. de 2004
Qual o tamanho máximo de um identificador em C#?
Como centralizar a janela MDI filha na janela MDI pai?
Do fórum do ClubeDelphi:
Quando crio um projeto MDI, e consequentemente os forms MDI filhos, em geral coloco a propriedade Position = poMainFormCenter. Porém, ao abrir o form filho nunca ele aparece posicionado exatamente no centro do form principal. Sempre aparece posicionado um pouco para baixo do centro. Já tentei colocar a propriedade Position em todas as outras opções de "center", mas sempre o form abre decentralizado. Quando os forms são pequenos não tem problema, mas quando ocupam a maior parte da dimensão vertical da tela, eles aparecem cortado embaixo. Ou melhor, uma faixa da parte de baixo fica escondida.
Esse problema ocorre porque o Delphi irá centrar a janela MDI filha na área cliente da janela pai, que não coincide com a área cliente MDI da janela pai. A área cliente é toda área da janela exceto o título e as bordas enquanto a área cliente MDI é a área utilizada pelas janelas MDI filhas.
O código seguinte centra a janela filha na janela pai:
1 type 2 TFormFilho = class(TForm) 3 public 4 procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; 5 end; 6 7 ... 8 9 procedure TFormFilho.SetBounds(ALeft, ATop, AWidth, 10 AHeight: Integer); 11 var 12 MainForm: TForm; 13 Rect: TRect; 14 Origem: TPoint; 15 begin 16 if Showing then begin 17 18 MainForm := Application.MainForm; 19 20 // Obtem o retângulo da área cliente MDI 21 Windows.GetWindowRect(MainForm.ClientHandle, Rect); 22 23 // Calcula a origem da área cliente MDI no form 24 Origem := Rect.TopLeft; 25 Dec(Origem.x, MainForm.Left); 26 Dec(Origem.y, MainForm.Top); 27 28 // Calcula nossa nova posição 29 ALeft := (MainForm.Width - Width) div 2 - Origem.x; 30 ATop := (MainForm.Height - Height) div 2 - Origem.y; 31 end; 32 33 inherited SetBounds(ALeft, ATop, AWidth, AHeight); 34 end;
O código seguinte centra a janela filha na área cliente MDI da janela pai:
1 type 2 TFormFilho = class(TForm) 3 public 4 procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; 5 end; 6 7 ... 8 9 procedure TFormFilho.SetBounds(ALeft, ATop, AWidth, 10 AHeight: Integer); 11 var 12 MainForm: TForm; 13 Rect: TRect; 14 OurWidth: Integer; 15 OurHeight: Integer; 16 begin 17 if Showing then begin 18 19 MainForm := Application.MainForm; 20 21 // Obtem o retângulo da área cliente MDI 22 Windows.GetWindowRect(MainForm.ClientHandle, Rect); 23 24 // Calcular largura e altura da área cliente 25 OurWidth := Rect.Right - Rect.Left; 26 OurHeight := Rect.Bottom - Rect.Top; 27 28 // Calcula a nova posição 29 ALeft := (OurWidth - Width) div 2; 30 ATop := (OurHeight - Height) div 2; 31 end; 32 33 inherited SetBounds(ALeft, ATop, AWidth, AHeight); 34 end;
8 de nov. de 2004
Design Patterns em C#
26 de out. de 2004
STA vs MTA
In general, the only time you want to explicitly set the apartment state is if you are doing COM interop with STA components. You want your thread apartment type to match the threading model of any COM objects the thread uses to minimize performance hits.
25 de out. de 2004
O que é conformidade CLS?
- sbyte
- ushort
- uint
- ulong
- UIntPtr
23 de out. de 2004
Funções Estatísticas em .NET
21 de out. de 2004
Arquivos de Ajuda HTML e o Caractere #
19 de out. de 2004
Como usar Reflection para manipular as propriedades de um objeto em C#?
Listar as Propriedades de um Objeto
O exemplo seguinte ilustra como acessar as propriedades públicas de um objeto. A chave para isso é o objeto PropertyInfo.1 using System.Reflection; 2 3 public static void ListarPropriedades(object o) { 4 5 Type t = o.GetType(); 6 7 foreach (PropertyInfo pi in t.GetProperties()) { 8 9 Console.WriteLine(string.Format("{0} {1}", 10 pi.PropertyType.FullName, pi.Name)); 11 } 12 }
Obter o Valor das Propriedades de um Objeto
O exemplo seguinte ilustra como obter os valores das propriedades públicas de um objeto.1 using System.Reflection; 2 3 public static void ListarValores(object o) { 4 5 Type t = o.GetType(); 6 7 foreach (PropertyInfo pi in t.GetProperties()) { 8 9 Console.WriteLine(string.Format("{0} {1} = {2}", 10 pi.PropertyType.FullName, pi.Name, 11 pi.GetValue(o, null))); 12 } 13 }
Alterar o Valor das Propriedades de um Objeto
O exemplo seguinte é ligeiramente diferente dos anteriores. Ele ilustra como alterar o valor de uma determinada propriedade pública de um objeto.1 using System.Reflection; 2 3 public static void AlterarValor(object o, 4 string propriedade, object valor) { 5 6 Type t = o.GetType(); 7 8 foreach (PropertyInfo pi in t.GetProperties()) { 9 10 if (pi.Name.Equals(propriedade)) { 11 12 pi.SetValue(o, valor, null); 13 break; 14 } 15 } 16 }
Note que AlterarValor() pode receber qualquer objeto como argumento, independente do objeto possuir ou não a propriedade desejada; se o objeto possuir a propriedade, o valor dela será ajustado para o valor fornecido.
Outro ponto: como o valor é passado como um object, dependendo como o argumento é passado, existe uma penalidade envolvida que é o boxing do argumento.
Componentes de Acesso ao PostgreSQL
Atualizado em 13/01/2007