В Coords - DrawArc и SeoMouseDown ... для основных обработчиков для независимости от GraphWPF
Вернул пока назад CharAnsi
This commit is contained in:
parent
db0f880b5d
commit
0e066aac48
|
|
@ -9,8 +9,8 @@ begin
|
||||||
c := Chr(i);
|
c := Chr(i);
|
||||||
Println($'Символ с кодом {i} в кодировке Unicode - это {c}');
|
Println($'Символ с кодом {i} в кодировке Unicode - это {c}');
|
||||||
Println;
|
Println;
|
||||||
i := OrdAnsi(c);
|
i := OrdWindows(c);
|
||||||
Println($'Код символа {c} в кодировке Windows равен {i}');
|
Println($'Код символа {c} в кодировке Windows равен {i}');
|
||||||
c := ChrAnsi(i);
|
c := ChrWindows(i);
|
||||||
Println($'Символ с кодом {i} в кодировке Windows - это {c}');
|
Println($'Символ с кодом {i} в кодировке Windows - это {c}');
|
||||||
end.
|
end.
|
||||||
15
InstallerSamples/WhatsNew/3_11_1/ArcCoords.pas
Normal file
15
InstallerSamples/WhatsNew/3_11_1/ArcCoords.pas
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Использование DrawArc и ATan2 (3.11.1)
|
||||||
|
uses Coords;
|
||||||
|
|
||||||
|
begin
|
||||||
|
SetMouseDown((x,y,mb) -> begin
|
||||||
|
if mb <> 2 then exit;
|
||||||
|
var xr := ScreenToRealX(x);
|
||||||
|
var yr := ScreenToRealY(y);
|
||||||
|
DrawCircle(xr,yr,0.1,Colors.Red);
|
||||||
|
DrawLine(0,0,xr,yr);
|
||||||
|
var angle := RadToDeg(ATan2(yr,xr));
|
||||||
|
DrawArc(0,0,2,0,angle);
|
||||||
|
Println(angle);
|
||||||
|
end);
|
||||||
|
end.
|
||||||
|
|
@ -310,6 +310,45 @@ begin
|
||||||
dc.DrawEllipse(cb,cp,p,r,r);
|
dc.DrawEllipse(cb,cp,p,r,r);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure ArcPlay(dc: DrawingContext; x,y,r,startAngle,endAngle: real; c: Color);
|
||||||
|
begin
|
||||||
|
var cp := ColorPen(c,CurrentPenWidth);
|
||||||
|
var center := fso.RealToScreen(Pnt(x,y));
|
||||||
|
r := r * Scale;
|
||||||
|
|
||||||
|
var geometry := new System.Windows.Media.StreamGeometry();
|
||||||
|
var context := geometry.Open();
|
||||||
|
var startAngleRad := startAngle * PI / 180;
|
||||||
|
var endAngleRad := endAngle * PI / 180;
|
||||||
|
var startPoint := new Point(
|
||||||
|
center.X + r * Cos(startAngleRad),
|
||||||
|
center.Y - r * Sin(startAngleRad)
|
||||||
|
);
|
||||||
|
var endPoint := new Point(
|
||||||
|
center.X + r * Cos(endAngleRad),
|
||||||
|
center.Y - r * Sin(endAngleRad)
|
||||||
|
);
|
||||||
|
|
||||||
|
context.BeginFigure(startPoint, false, false);
|
||||||
|
|
||||||
|
var cw := endAngle - startAngle < 0;
|
||||||
|
var dir := System.Windows.Media.SweepDirection.Counterclockwise;
|
||||||
|
if cw then
|
||||||
|
dir := System.Windows.Media.SweepDirection.Clockwise;
|
||||||
|
context.ArcTo(endPoint,
|
||||||
|
new System.Windows.Size(r, r),
|
||||||
|
0,
|
||||||
|
False,
|
||||||
|
dir,
|
||||||
|
true,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
context.Close;
|
||||||
|
|
||||||
|
dc.DrawGeometry(nil, cp, geometry);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure RectanglePlay(dc: DrawingContext; x,y,w,h: real; c: Color; borderc: Color);
|
procedure RectanglePlay(dc: DrawingContext; x,y,w,h: real; c: Color; borderc: Color);
|
||||||
begin
|
begin
|
||||||
var cb := ColorBrush(c);
|
var cb := ColorBrush(c);
|
||||||
|
|
@ -404,6 +443,12 @@ type
|
||||||
public
|
public
|
||||||
procedure Play(dc: DrawingContext); override := LinePlay(dc,x,y,x1,y1,c,width);
|
procedure Play(dc: DrawingContext); override := LinePlay(dc,x,y,x1,y1,c,width);
|
||||||
end;
|
end;
|
||||||
|
ArcC = auto class(Command)
|
||||||
|
x,y,radius,startAngle,endAngle: real;
|
||||||
|
c: Color;
|
||||||
|
public
|
||||||
|
procedure Play(dc: DrawingContext); override := ArcPlay(dc,x,y,radius,startAngle,endAngle,c);
|
||||||
|
end;
|
||||||
TextC = auto class(Command)
|
TextC = auto class(Command)
|
||||||
x,y: real;
|
x,y: real;
|
||||||
text: string;
|
text: string;
|
||||||
|
|
@ -533,6 +578,11 @@ begin
|
||||||
DrawPoints(points,PointRadius);
|
DrawPoints(points,PointRadius);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
/// Рисует дугу
|
||||||
|
procedure DrawArc(x,y,r,startAngle,endAngle: real; Color: GColor := Colors.Black)
|
||||||
|
:= ArcC.Create(x,y,r,startAngle,endAngle,Color).AddToListAndPlay;
|
||||||
|
|
||||||
|
|
||||||
/// Расстояние между точками
|
/// Расстояние между точками
|
||||||
function Distance(p1,p2: Point): real := Sqrt((p2.x-p1.x)**2 + (p2.y-p1.y)**2);
|
function Distance(p1,p2: Point): real := Sqrt((p2.x-p1.x)**2 + (p2.y-p1.y)**2);
|
||||||
/// Расстояние между точками
|
/// Расстояние между точками
|
||||||
|
|
@ -671,6 +721,39 @@ type
|
||||||
AfterResize := True;
|
AfterResize := True;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure SetMouseDown(handler: (real,real,integer) -> ());
|
||||||
|
begin
|
||||||
|
OnMouseDown += handler;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SetMouseUp(handler: (real,real,integer) -> ());
|
||||||
|
begin
|
||||||
|
OnMouseUp += handler;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SetMouseMove(handler: (real,real,integer) -> ());
|
||||||
|
begin
|
||||||
|
OnMouseMove += handler;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SetKeyPress(handler: char -> ());
|
||||||
|
begin
|
||||||
|
OnKeyPress += handler;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SetKeyDown(handler: Key -> ());
|
||||||
|
begin
|
||||||
|
OnKeyDown += handler;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function RealToScreenX(xx: real) := fso.RealToScreenX(xx);
|
||||||
|
function RealToScreenY(yy: real) := fso.RealToScreenY(yy);
|
||||||
|
function ScreenToRealX(xx: real) := fso.ScreenToRealX(xx);
|
||||||
|
function ScreenToRealY(yy: real) := fso.ScreenToRealY(yy);
|
||||||
|
function ScreenToReal(p: Point): Point := fso.ScreenToReal(p);
|
||||||
|
function RealToScreen(p: Point): Point := fso.RealToScreen(p);
|
||||||
|
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
InitCoordGrid;
|
InitCoordGrid;
|
||||||
|
|
|
||||||
|
|
@ -2123,6 +2123,12 @@ function Succ(x: char): char;
|
||||||
function ChrWindows(a: byte): char;
|
function ChrWindows(a: byte): char;
|
||||||
/// Преобразует символ в код в кодировке Windows
|
/// Преобразует символ в код в кодировке Windows
|
||||||
function OrdWindows(a: char): byte;
|
function OrdWindows(a: char): byte;
|
||||||
|
|
||||||
|
/// Преобразует код в символ в кодировке Windows. Устарело. Используйте ChrWindows
|
||||||
|
function ChrAnsi(a: byte): char;
|
||||||
|
/// Преобразует символ в код в кодировке Windows. Устарело. Используйте OrdWindows
|
||||||
|
function OrdAnsi(a: char): byte;
|
||||||
|
|
||||||
/// Преобразует код в символ в кодировке Unicode
|
/// Преобразует код в символ в кодировке Unicode
|
||||||
function Chr(a: word): char;
|
function Chr(a: word): char;
|
||||||
/// Преобразует символ в код в кодировке Unicode
|
/// Преобразует символ в код в кодировке Unicode
|
||||||
|
|
@ -9960,6 +9966,11 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function ChrAnsi(a: byte): char := ChrWindows(a);
|
||||||
|
|
||||||
|
function OrdAnsi(a: char): byte := OrdWindows(a);
|
||||||
|
|
||||||
|
|
||||||
function Ord(a: integer): integer;
|
function Ord(a: integer): integer;
|
||||||
begin
|
begin
|
||||||
Result := a;
|
Result := a;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue