Мы не ищем легких путей! А кроме того, это не похоже на С/С++/С#/Java …
Медленно привыкаем к хорошему
Здравствуйте. Не подскажите как использовать System.Drawing.Pen
System.Drawing.Pen
это тип для рисования линий и контуров в GDI
:
{$reference System.Drawing.dll}
begin
//создаём картинку
var b := new System.Drawing.Bitmap(100, 100);
var gr := System.Drawing.Graphics.FromImage(b);
//рисуем первый прямоугольник
var pen := new System.Drawing.Pen(System.Drawing.Color.FromArgb($FFFF0000));//создаём новый Pen красного цвета
gr.DrawRectangle(pen, new System.Drawing.Rectangle(10, 40, 80, 20));//все "Graphics.Draw..." рисуют контуры, а "Graphics.Fill..." заполненные объекты
//рисует второй прямоугольник
pen.Color := System.Drawing.Color.FromArgb($FF00FF00);
pen.DashStyle := System.Drawing.Drawing2D.DashStyle.DashDotDot;//в этот раз поставим стиль линии на штрих-точка-точка
gr.DrawRectangle(pen, new System.Drawing.Rectangle(40, 10, 20, 80));
//сохраняем в файл что получилось
b.Save('out.bmp');
end.
На выходе получаем:
Вопрос: Что за тип single
? Как Integer
превратить в single
?
single=float(число с плавающей точкой на 4 байта). Просто паскалевское название.
Как Integer
превратить в single
?
begin
var i: integer := 5;
var s1: single := single(i);//явное преобразование
var s2: single := i;//неявное преобразование
end.
Любая учебная программа (и не только школьная) объясняет такое в 1 из первых уроков, вам стоит для начала хоть что то выучить перед тем как вопросы задавать.
В школе у нас преподаватели по информатике грубо говоря не очень. По этой программе я знаю только real
, integer
и array[0..n] of ...
, мы даже boolean
не проходили. И это за ~ 1 год обучения паскалю. Ну это отговорки.
graph.FillRectangle(bru, xx1, yy1, h, w);
Это не хочет работать. Нет перегруженной подпрограммы с такими типами параметров
xx1,yy1,h,w - single.
Вот как, сочувствую (а я думал это у меня информатику плохо преподавали )
Могу тогда посоветовать почитать всю справку и посмотреть примеры (всё это есть под кнопкой Помощь в IDE).
А это откуда? (из какого модуля)
В общем я лучше Вам скину полную версию
Код
unit Unit1;
interface
uses System, System.Drawing, System.Windows.Forms;
type
Form1 = class(Form)
procedure button1_Click(sender: Object; e: EventArgs);
procedure button3_Click(sender: Object; e: EventArgs);
{$region FormDesigner}
private
{$resource Unit1.Form1.resources}
button1: Button;
label1: &Label;
label2: &Label;
Px1: TextBox;
label3: &Label;
label4: &Label;
Px2: TextBox;
Py2: TextBox;
Py1: TextBox;
rad: TextBox;
button3: Button;
button2: Button;
label5: &Label;
button4: Button;
Zapoln: CheckBox;
RGB: RadioButton;
ARGB: RadioButton;
label7: &Label;
label8: &Label;
label9: &Label;
label10: &Label;
ColA: TextBox;
ColR: TextBox;
ColG: TextBox;
ColB: TextBox;
pictureBox1: PictureBox;
button5: Button;
button6: Button;
WidPen: TextBox;
label11: &Label;
label6: &Label;
{$include Unit1.Form1.inc}
{$endregion FormDesigner}
public
constructor;
begin
InitializeComponent;
end;
end;
implementation
procedure Form1.button1_Click(sender: Object; e: EventArgs);
var
x1, x2, y1, y2, a, r, g, b: integer;
begin
//Точки
x1 := StrToInt(Px1.Text);
y1 := StrToInt(Py1.Text);
x2 := StrToInt(Px2.Text);
y2 := StrToInt(Py2.Text);
//Инициализация графики
var graph := pictureBox1.CreateGraphics;
var pen := new System.Drawing.Pen(System.Drawing.Color.FromArgb(255, 255, 255));
pen.width := 1;
if RGB.Checked then begin
r := StrToInt(ColR.Text);
g := StrToInt(ColG.Text);
b := StrToInt(ColB.Text);
pen.Color := System.Drawing.Color.FromArgb(r, g, b);
end;
if ARGB.Checked then begin
a := StrToInt(ColA.Text);
r := StrToInt(ColR.Text);
g := StrToInt(ColG.Text);
b := StrToInt(ColB.Text);
pen.Color := System.Drawing.Color.FromArgb(a, r, g, b);
end;
//Рисуем
pen.Width := StrToInt(WidPen.Text);
graph.DrawLine(pen, x1, y1, x2, y2);
end;
procedure Form1.button3_Click(sender: Object; e: EventArgs);
var
x1, x2, y1, y2, a, r, g, b: integer;
//single
xx1, yy1, h, w: single;
begin
x1 := StrToInt(Px1.Text);
y1 := StrToInt(Py1.Text);
x2 := StrToInt(Px2.Text);
y2 := StrToInt(Py2.Text);
//Цвета, кисть, и тд
var graph := pictureBox1.CreateGraphics;
var pen := new System.Drawing.Pen(System.Drawing.Color.FromArgb(255, 255, 255));
var bru := new System.Drawing.Pen(System.Drawing.Color.FromArgb(255, 255, 255));
pen.width := 1;
if RGB.Checked then begin
r := StrToInt(ColR.Text);
g := StrToInt(ColG.Text);
b := StrToInt(ColB.Text);
pen.Color := System.Drawing.Color.FromArgb(r, g, b);
bru.Color := System.Drawing.Color.FromArgb(r, g, b);
end;
if ARGB.Checked then begin
a := StrToInt(ColA.Text);
r := StrToInt(ColR.Text);
g := StrToInt(ColG.Text);
b := StrToInt(ColB.Text);
pen.Color := System.Drawing.Color.FromArgb(a, r, g, b);
bru.Color := System.Drawing.Color.FromArgb(a, r, g, b);
end;
//Рисуем
pen.Width := StrToInt(WidPen.Text);
if Zapoln.Checked then graph.DrawRectangle(pen, x1, y1, x2, y2)
else begin
var xx := Abs(x2 - x1);
var yy := Abs(y2 - y1);
xx1 := x1;yy1 := y1;
h := xx;w := yy;
graph.FillRectangle(bru, xx1, yy1, h, w);
end;
end;
end.
Давайте тогда уже .zip или .rar всего проекта, тут 1 файлом не обойдёшься, слишком много зависимостей с другими файлами + без .pabcproj файла ничего компилироваться не будет.
У меня компилируется без проблем.
Странно. Может с .NET проблемы переустановить?
А, ну так вы ведь добавили .NETBrush
и теперь компилируется. А вообще для того чтобы заливать вам нужно не System.Drawing.Pen
а System.Drawing.SolidBrush
. Работает примерно так же, можно тоже как то настраивать.
Не подскажите как связать toolStripMenuItem4: ToolStripMenuItem;
с saveFileDialog1: SaveFileDialog;
И как этим пользоваться.
Может ли кто то объяснить почему так работает?
Программа 1:
{$reference System.Windows.Forms.dll}
uses System.Windows.Forms;
begin
var f := new Form;
var wr := new System.IO.BinaryWriter(System.IO.File.Create('temp'));
var h := f.Handle;//мало ли, может его уничтожит потому что в этой программе больше не используется
wr.Write(integer(h));
wr.BaseStream.Close;
System.Windows.Forms.Application.Run(f);
end.
Программа 2:
{$reference System.Windows.Forms.dll}
uses System.Windows.Forms;
begin
var re := new System.IO.BinaryReader(System.IO.File.OpenRead('temp'));
var c := Form.FromHandle(System.IntPtr(re.ReadInt32()));//c уже тут оказывается = nil
var f := Form(c);
re.BaseStream.Close;System.IO.File.Delete('temp');
Sleep(1000);
writeln($'found form with {f.Width} width');//Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта.
Sleep(1000);
f.Close;
end.
Сама идея в том чтоб не закрывать форму при переходе между программами на паскале и C++, а передать права на владение ею между ними.
Как явно указать тип-параметр (T) для данной функции?
function SendRequestAsync<T>(methodToExecute: TeleSharp.TL.TLMethod): System.Threading.Tasks.Task<T>;
SendRequestAsync&<Tип>