Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26048
Рейтинг: 2110
#181: 2022-02-04 21:54:57 ЛС | профиль | цитата
andrestudio писал(а):
win.pas

Ты предлагаешь засунуть отрисовку фона на GDI+ в Win?
1. Ну не всем же нужна красивая отрисовка, некоторым нужно быстродействие, а отрисовка -- это ресурсы.
2. Ты уверен, что на стандартных контролах отрисует нормально фон? У меня не получилось, получилось только на форме отрисовать, большинство перекрывает твои действия. Да и на форме ставить ресурсоемкий код не сильно-то хочется, да и нужен ли он там. Но если только попробовать OnEraseBkgnd перекрыть...
andrestudio писал(а):
ID достаточно 0..52 integer

А где искать потом, какой ID соответствует какой кисточки.
карма: 22

0
Ответов: 5126
Рейтинг: 578
#182: 2022-02-04 22:13:27 ЛС | профиль | цитата
Да я спутал, для формы конечно...
hiMainForm

запарился малость, извиняюсь.
карма: 5
0
Разработчик
Ответов: 26048
Рейтинг: 2110
#183: 2022-02-05 05:30:23 ЛС | профиль | цитата
Ну че, я реализовал HatchBrush через onEraseBkgnd:



Там еще рамка есть, но требуется подстройка для точного вписания в клиентскую область.

Все, пошел спать.

Редактировалось 4 раз(а), последний 2022-02-05 05:34:24
карма: 22

1
Голосовали:envoy_sky
Ответов: 5126
Рейтинг: 578
#184: 2022-02-05 11:19:53 ЛС | профиль | цитата
nesco, это по сути нужно для всех режимов BorderStyle делать
карма: 5
0
Разработчик
Ответов: 26048
Рейтинг: 2110
#185: 2022-02-05 11:39:01 ЛС | профиль | цитата
andrestudio писал(а):
это по сути нужно для всех режимов BorderStyle делать

А он для всех и работает



Редактировалось 1 раз(а), последний 2022-02-05 11:39:22
карма: 22

0
Ответов: 5126
Рейтинг: 578
#186: 2022-02-05 11:46:10 ЛС | профиль | цитата
nesco, вот, тогда уж руш как там поживают на холсте закеж
карма: 5
0
Разработчик
Ответов: 26048
Рейтинг: 2110
#187: 2022-02-05 12:10:09 ЛС | профиль | цитата
andrestudio писал(а):
вот, тогда уж руш как там поживают на холсте закеж

Как-то так:



Нашел баг -- в WinRushControl.ini убрана прозрачность, забыл вернуть.

Редактировалось 1 раз(а), последний 2022-02-05 12:15:02
карма: 22

0
Ответов: 5126
Рейтинг: 578
#188: 2022-02-05 12:19:31 ЛС | профиль | цитата
nesco, вот видишь, даже вроде ничего, цвет фона приблизить к цвету схемы то уже гуд
Я пока пилю GDIPFormGradient (наверно по другому обозвать уже придётся)
Вот такие свойства наваял
[Type]
Class=Element
Info=Пользовательская отрисовка формы с помощью GDI+
Sub=Form

[Property]
##Options=Дополнительные настройки
ShowMenu=Отображать меню|14|1|True,False
BorderStyle=Внешний вид формы|4|2|bsNone,bsSingle,bsSizeable,bsDialog
Menu=Определяет пункты меню|5|
Icon=Картинка формата PNG,ICO,GIF,TIFF,JPG,BMP для иконки заголовка формы|10|
##
StyleBkgnd= Стиль фона клиентской области|4|0|None,Gradient,Brush,UseBrush
BrushID=Вид кисти для режима StyleBkgnd равному Brush (0-52)|1|47
UseBrush=Картинка формата PNG,ICO,GIF,TIFF,JPG,BMP для заливки клиентской области мозайкой|10|
Color1=Верхний цвет градиента|8|clWhite
Color2=Нижний цвет градиента|8|clSkyBlue
Color3=Цвет бордюрной рамки|8|12615680
BorderSize=Ширина бордюрной рамки|1|4

UseBrush пока занимаюсь, остальное уже работает.


Редактировалось 1 раз(а), последний 2022-02-05 12:27:46
карма: 5
0
Разработчик
Ответов: 26048
Рейтинг: 2110
#189: 2022-02-05 12:25:39 ЛС | профиль | цитата
andrestudio писал(а):
Я пока пилю GDIPFormGradient

Назови лучше GDIPCustomForm. А че так мало градиента, их основных вообще-то 9, не считая инверсных?

--- Добавлено в 2022-02-05 12:26:31

P.S. А это патч на WinRushControl.ini

Редактировалось 1 раз(а), последний 2022-02-05 12:26:31
карма: 22

0
файлы: 1WinRushControl_05-02-2022.zip [889B] [76]
Ответов: 5126
Рейтинг: 578
#190: 2022-02-05 12:28:46 ЛС | профиль | цитата
nesco писал(а):
А че так мало градиента, их основных вообще-то 9, не считая инверсных?

Не понял правда про что?
карма: 5
0
Разработчик
Ответов: 26048
Рейтинг: 2110
#191: 2022-02-05 12:31:40 ЛС | профиль | цитата
andrestudio писал(а):
Не понял правда про что?

Про стили градиента:
Horizontal
Vertical
ForwardDiagonal
BackwardDiagonal
DobleHorizontal
DoubleVertical
DoubleForwardDiagonal
DoubleBackwardDiagonal
Center

Редактировалось 1 раз(а), последний 2022-02-05 12:31:56
карма: 22

0
Ответов: 5126
Рейтинг: 578
#192: 2022-02-05 12:35:43 ЛС | профиль | цитата
А понял, добавлю конечно
карма: 5
0
Разработчик
Ответов: 26048
Рейтинг: 2110
#193: 2022-02-05 12:42:34 ЛС | профиль | цитата
Но до такого компонента, как у тебя, мне еще очень далеко. Это у тебя же отдельный набор за отдельную плату для народа. Я же вижу, что стоят разные контролы одного направления. Самое большое пока, так это я могу сейчас градиент на форму всучить. На большее меня пока не хватит.

Редактировалось 2 раз(а), последний 2022-02-05 12:46:14
карма: 22

0
Ответов: 5126
Рейтинг: 578
#194: 2022-02-05 13:06:20 ЛС | профиль | цитата
nesco, да чё там писать то, если без академизма то примерно так

procedure THIGDIPFormGradient.DrawForm(ACanvas: PCanvas; const ARect: TRect;
AColor1,AColor2: TColor);
const
w: integer = 0;
h: integer = 0;

var
Graphics: TGPGraphics;
GPRect: TGPRect;
Pen: TGPPen;
Brush: TGPBrush;
BrushColor: TGPColor;
PenColor: TGPColor;
Color1,Color2: TGPColor;
GradBrush: TGPLinearGradientBrush;
R: TRect;
GPReg: TGPRegion;
begin
R := FForm.ClientRect;
// Создаём график
Graphics := TGPGraphics.Create(ACanvas.Handle);
// Создаём прямоугольник
GPRect := GDIPAPI.MakeRect(0, FPanel2.Height,FForm.Width,r.Bottom-FPanel2.Height);
// создаём перо для контура
PenColor := IntToGPColor(_prop_Color3,{_prop_Alpha1}255);
Pen := TGPPen.Create(PenColor,(_prop_BorderSize));

Color1 := IntToGPColor(AColor1,{_prop_Alpha1}255);
Color2 := IntToGPColor(AColor2,{_prop_Alpha2}255);

if _prop_StyleBkgnd = 0 then
Brush := TGPSolidBrush.Create(IntToGPColor(FForm.Color,255));

// заливка прямоугольника
if _prop_StyleBkgnd = 1 then // Gradient
Brush := TGPLinearGradientBrush.Create(GPRect, Color1, Color2, LinearGradientModeVertical);

if _prop_StyleBkgnd = 2 then // Brush GDI+
Brush := TGPHatchBrush.Create(THatchStyle(_prop_BrushID),Color1, Color2);

//if _prop_StyleBkgnd = 3 then // UseBrush
// Brush := TGPTextureBrush.Create();

Graphics.FillRectangle(Brush,GPRect);
// рисуем контур
if _prop_BorderSize >= 1 then
begin
GPRect := GDIPAPI.MakeRect(0, 0,FForm.Width,FForm.Height);
Graphics.DrawRectangle(Pen,GPRect);
end else //begin
Graphics.DrawLine(Pen,0,0,FForm.Width,0);

Pen.Free;
Brush.Free;
Graphics.Free;
end;

Альфу наверно тоже добавлю, а то везде есть а тут чёт забыл
сейчас процедурку доделаю StreamImg to TGPTextureBrush и вся любовь
карма: 5
0
Разработчик
Ответов: 26048
Рейтинг: 2110
#195: 2022-02-05 14:34:58 ЛС | профиль | цитата
Тю! Это у тебя два прямоугольника и все, но кнопок таких у нас пока нет. Не, я понимаю, но такое можно у нас и на DTM сделать, если его немного допилить. Будет немного проще, тк можно подстроить под любые хотелки, не меняя код. Мне туда осталось только кисточку воткнуть. Единственное что, так это надо событие onEraseBkgnd к форме прикрутить. Вот этим я, наверное, и займусь. Че-то в форме код кисточек кажется лишним. А, я заметил, что у тебя есть треугольник, надо бы нам такую фигуру тоже иметь.

Редактировалось 5 раз(а), последний 2022-02-05 14:44:14
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)