Вот есть форма System.Window.Forms.From
, и нужно, что бы изображение отображалось на экране передним планом с Top.Most
, но события кликов мыши её не трогали, а действовали на нижнее окно. Как это сделать? Пересмотрел свойства System.Window.Forms.From
, но ничего путного не нашёл.
Сомневаюсь что это возможно… А что именно вы этим добиваетесь?
А нельзя это нижнее окно на самом деле сделать верхним и прозрачным? И проблема уйдет. А так, я не слышал, чтобы та же Microsoft игралась с координатами неактивного окна.
main.pas (2,4 КБ)
На самом деле, есть предположение, как это можно обойти в конкретно моей ситуации: сделать центральную область прозрачной, а на периметр вывести границы круга.
Сделал с
g.DrawEllipse(new Pen(color.Green,2), new RectangleF((size.Width - n )div 2 , (size.Height - n) div 2, n, n)); //n = 40
получилось весьма неплохо. Я просто границы отрисовал,а в центре область пустая.
Вы так и не объяснили чего добиваетесь. Какое то выделение курсора?
При наложении окна на экран в качестве Form.TopMost
верхнего окна при клике на него происходила смена фокуса. Курсор мышки всегда остаётся в центре экрана при практичном использовании, поэтому для решения проблемы я сделал FillEllipse
вместо DrawEllipse
уже вокруг курсора, а оставшаяся область формы, в том числе центральная, не отображается и не реагирует на события (её как бы не существует). main v 2.0.pas (2,1 КБ). Таким образом, вопрос исчерпан.
Но есть новый, уже касательно другой темы. Мне нужно считать свойства с файла для записи в класс (т.е. что бы по началу шло название свойства, а потом его значение. Очень бы хотелось, что бы можно было по названию свойства в классе парсерить файл):
///Файл свойств, примерный вид
<--------------->
radius 40
dx 0
dy 0
<---------------->
Как это сделать? И как удобнее? Может через формат .csv
или .cfg
?
<---------------->
radius;40;
dx;0;
dy;0; ///пример записи .csv
<---------------->
Какая разница какое расширение. Расширение нужно только проводнику (тому что отображает папки как окна), чтоб знать, какой .exe запускать передавая ему в качестве первого аргумента командной строки путь к данному файлу.
В вашем случае, есть 2 варианта:
- Сделать всё руками. Это будет быстрее, хоть и придётся написать чуток муторного кода.
- Сделать через рефлекцию:
type
t1=class
a,b: byte;
end;
const
BindFlags =
System.Reflection.BindingFlags.Static or
System.Reflection.BindingFlags.Instance or
System.Reflection.BindingFlags.Public or
System.Reflection.BindingFlags.NonPublic;
begin
var o := new t1;
var t := typeof(t1);//o.GetType;
var f1_a := t.GetField('a', BindFlags);
var f2_b := t.GetField('b', BindFlags);
f1_a.SetValue(o, byte(3));
f2_b.SetValue(o, byte(5));
writeln(o.a);
writeln(o.b);
end.
Премного вам благодарен!
Как организовать цикл нашёл на сайте; даже в конструкторе класса получилось реализовать считывание. Спасибо за помощь, вопрос исчерпан.
Вообще, почитайте как использовать сериализаторы. Так должно быть лучше. Вот, к примеру, бинарный: