|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Перевод с C# на Delphi
Добрый день!
Помогите пожалуйста перевести нижеприведённый код с C# на Delphi. Код:
private void groupBox1_Paint(object sender, PaintEventArgs e) { GroupBox box = sender as GroupBox; DrawGroupBox(box, e.Graphics, Color.Red, Color.Red); } private void DrawGroupBox(GroupBox box, Graphics g, Color textColor, Color borderColor) { if (box != null) { Brush textBrush = new SolidBrush(textColor); Brush borderBrush = new SolidBrush(borderColor); Pen borderPen = new Pen(borderBrush); SizeF strSize = g.MeasureString(box.Text, box.Font); Rectangle rect = new Rectangle(box.ClientRectangle.X, box.ClientRectangle.Y + (int)(strSize.Height / 2), box.ClientRectangle.Width - 1, box.ClientRectangle.Height - (int)(strSize.Height / 2) - 1); // Clear text and border g.Clear(this.BackColor); // Draw text g.DrawString(box.Text, box.Font, textBrush, box.Padding.Left, 0); // Drawing Border //Left g.DrawLine(borderPen, rect.Location, new Point(rect.X, rect.Y + rect.Height)); //Right g.DrawLine(borderPen, new Point(rect.X + rect.Width, rect.Y), new Point(rect.X + rect.Width, rect.Y + rect.Height)); //Bottom g.DrawLine(borderPen, new Point(rect.X, rect.Y + rect.Height), new Point(rect.X + rect.Width, rect.Y + rect.Height)); //Top1 g.DrawLine(borderPen, new Point(rect.X, rect.Y), new Point(rect.X + box.Padding.Left, rect.Y)); //Top2 g.DrawLine(borderPen, new Point(rect.X + box.Padding.Left + (int)(strSize.Width), rect.Y), new Point(rect.X + rect.Width, rect.Y)); } } |
#2
|
|||
|
|||
Вот пример как можно сделать свою отрисовку для GB (к сожалению, события для отрисовки у стандартного компонента просто нету, соответсвенно, приходится пользоваться трюками):
Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TGroupBox = class(Vcl.StdCtrls.TGroupBox) private procedure Paint; override; public TextColor : TColor; BorderColor : TColor; constructor Create(AOwner : TComponent); override; end; TForm1 = class(TForm) GroupBox1: TGroupBox; btRed: TButton; btBlue: TButton; btGreen: TButton; procedure btRedClick(Sender: TObject); procedure btBlueClick(Sender: TObject); procedure btGreenClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} constructor TGroupBox.Create(AOwner : TComponent); begin inherited; TextColor := clBlack; BorderColor := clBlack; end; procedure TGroupBox.Paint; begin Self.Canvas.Font.Color := TextColor; Self.Canvas.Pen.Color := BorderColor; Self.Canvas.Rectangle(0,0,self.Width,self.Height); end; procedure TForm1.btBlueClick(Sender: TObject); begin GroupBox1.TextColor := clBlue; GroupBox1.BorderColor := clBlue; GroupBox1.Repaint; end; procedure TForm1.btGreenClick(Sender: TObject); begin GroupBox1.TextColor := clGreen; GroupBox1.BorderColor := clGreen; GroupBox1.Repaint; end; procedure TForm1.btRedClick(Sender: TObject); begin GroupBox1.TextColor := clRed; GroupBox1.BorderColor := clRed; GroupBox1.Repaint; end; end. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Коржик (29.04.2019)
|
#3
|
|||
|
|||
Спасибо большое! Это собственно и искал. Суть в чём поясню - когда форму делаешь цветом clMoneyGreen то групп-боксы (контур его) не видны вообще, может баг какой-то, но у меня так. Перерисовкой только можно добиться того, чтобы они нормально появлялись. Просто использовать сторонние компоненты в проекте не совсем охота.
|