Так же хочу предложить изменения в класс “PictureWPF”.
В модуле WPFObjects я не нашел возможности отобразить картинку из Ресурсов программы.
По этому добавил в PictureWPF несколько методов,и конструкторы,для возможности отобразить картинку из Ресурсов.
Если изменить этот класс в модуле,тоон не работает.При запуске программы вылетает ошибка компилятора “Чтения за концом потока” .Но если скопировать код из модуля WPFObjects изменить название модуля,и изменить класс,то работает,но при таком подходе нужно модуль всегда рядом с программой носить.
PictureWPF = class(ObjectWPF)
private
PName: string;
function CreateBitmapImage(fname: string) := new BitmapImage(new System.Uri(fname, System.UriKind.Relative));
procedure Rest(x, y, w, h: real; b: BitmapImage);
begin
var im := new System.Windows.Controls.Image();
im.Source := b;
im.Width := w;
im.Height := h;
InitOb(x, y, w, h, im);
end;
function GetString(self: string; oi, ni: integer): string;
begin
for var i := oi to ni do
result += self[i];
end;
procedure InitOb5(x, y, w, h: real; name: string);
begin
PName := GetString(name, 1, name.LastIndexOf('.'));
var bmi := new System.Windows.Media.Imaging.BitmapImage();
bmi.BeginInit();
bmi.StreamSource := GetResourceStream(name);
bmi.EndInit();
Rest(x, y, w, h, bmi);
end;
procedure InitOb4(x, y: real; name: string);
begin
PName := GetString(name, 1, name.LastIndexOf('.'));
var bmi := new System.Windows.Media.Imaging.BitmapImage();
bmi.BeginInit();
bmi.StreamSource := GetResourceStream(name);
bmi.EndInit();
Rest(x, y, bmi.PixelWidth, bmi.PixelHeight, bmi);
end;
procedure InitOb3(x, y, w, h: real; fname: string);
begin
var b := CreateBitmapImage(fname);
Rest(x, y, w, h, b);
end;
procedure InitOb2(x, y: real; fname: string);
begin
var b := CreateBitmapImage(fname);
Rest(x, y, b.PixelWidth, b.PixelHeight, b);
end;
function GetInternalGeometry: Geometry; override;
begin
var r := Rect(0, 0, Width, Height);
Result := new RectangleGeometry(r);
end;
public
function Element := ob as System.Windows.Controls.Image;
/// Создает рисунок из файла fname с координатами левого верхнего угла (x,y)
constructor(x, y: real; fname: string):= Invoke(InitOb2, x, y, fname);
/// Создает рисунок из файла fname с координатами левого верхнего угла (x,y) и размерами (w,h)
constructor(x, y, w, h: real; fname: string):= Invoke(InitOb3, x, y, w, h, fname);
/// Создает рисунок из файла fname с координатой левого верхнего угла, заданной точкой p
constructor(p: Point; fname: string):= Invoke(InitOb2, p.x, p.y, fname);
/// Создает рисунок из файла fname с координатой левого верхнего угла, заданной точкой p, и размерами (w,h)
constructor(p: Point; w, h: real; fname: string):= Invoke(InitOb3, p.x, p.y, w, h, fname);
///Создает рисунок из потока
constructor(x, y: real; name: string;b:boolean:=false):=Invoke(InitOb4, x, y, name);
///Создает рисунок из потока с шириной w и высотой h
constructor(x, y, w, h: real; name: string;b:boolean:=false):=Invoke(InitOb5, x, y, w, h, name);
/// Декоратор текста объекта
function SetText(txt: string; size: real := 16; fontname: string := 'Arial'; c: GColor := Colors.Black): PictureWPF
:= inherited SetText(txt, size, fontname, c) as PictureWPF;
/// Декоратор поворота объекта
function SetRotate(da: real): PictureWPF := inherited SetRotate(da) as PictureWPF;
property Name: string read PName write PName := value;
end;