-
Здрасти. Вопрос в название темы. Если Static, то как сделать перенос строки и автоматически меняющийся размер как в Label(VCL, WordWrap и AutoSize)?
-
SS_OWNERDRAW, рисовать самому DrawText()
-
> junglecat (30.08.14 21:23) [1] > SS_OWNERDRAW, рисовать самому DrawText()
Оказалось я дурак , надо было писать ss_left. CreateWindowEx(0, 'Static', '111', WS_CHILD or WS_VISIBLE or SS_LEFT, 1, 33, 100, 50, AddForm, LBNameId, HInstance, nil);
-
Static - это не аналог Label
-
> Игорь Шевченко © (31.08.14 13:02) [3] > Static - это не аналог Label
А что на Label похоже?
-
> А что на Label похоже?
см [1]
-
А в STATIC'e можно рисовать по таймеру?:)
-
можно
-
В любом окне можно рисовать по таймеру. Зачем тебе это вообще нужно?
-
API изучаю. В VCL рисовал в PaitBox, если на форме были другие компонеты или усли форма пуста - то на последней. Вычитал когда-то и где , что STATIC можно загрузить только изображения формата BMP, а другие форматы нет?
-
> [9] MA (02.09.14 20:04)
любой формат можно привести к bmp. А можно воспользоваться GDI+ или какой-нибудь другой графической библиотечкой
-
> junglecat (02.09.14 20:09) [10] > > [9] MA (02.09.14 20:04)любой формат можно привести к > bmp.А можно воспользоваться GDI+ или какой-нибудь другой > графической библиотечкой
Мнеб хотелость сделать стандартными средствами для начала.
-
GDI+ является стандартом при работе с графикой
-
Здравствуйтес. Рисовать фигурки и лилии вроде получаестя :). WM_PAINT:
Var
Rectl: TRect;
Ps : TPAINTSTRUCT;
DC : HDC;
nBrush : HBRUSH ;
nPen : HPEN ;
begin
dc:=BeginPaint(Form, &ps);
GetClientRect(Form, Rectl);
Rectangle(DC, Rectl.Right div 2, 5, Rectl.Right - 5, 45);
nBrush:=CreateSolidBrush(RGB(10,200,100));
SelectObject(dc, nBrush);
Ellipse(dc, 20,100,200,200);
nBrush:=CreateSolidBrush(RGB(250,200,100));
SelectObject(dc, nBrush);
nPen:=CreatePen(2,2,RGB(0,0,255));
SelectObject(dc, nPen);
RoundRect(dc, 20, 250, 250, 350, 15, 15);
MoveToEx(DC,1,25,nil);
LineTo(dc, Rectl.Right - 5, 25);
ValidateRect(Form, nil);
EndPaint(Form, &ps);
end; а как в таймере(Смущает BeginPaint и EndPaint)? Икак обновить или перерисовать(для WM_PAINT)? Спасибо.
-
WM_TIMER: RedrawWindow(Form, nil, 0, RDW_UPDATENOW);
-
> MA (03.09.14 23:39) [13]
Эдак ты все GDI хэндлы в системе захватишь под себя. Ресурсы то освобождать кто будет?
-
Есть "Оконные" компоненты и есть "Рисованные" компоненты. "Оконные" - это создаётся окно с какими-то параметрами, и во многих случаях ОС сама отрисовывает всё что нужно без вашего участия. "Рисованные" - это на существующем окне добавляется рисующая процедура в WM_PAINT этого окна. Тут всё рисуется самостоятельно внутри программы (хотя и через функции рисования ОС).
Копонент - это группа взаимосвязанных классов, оформленных в виде готового блока с определённой функциональностью, который "умеет" взаимодействовать с другими компонентами, например TForm и TLabel. У TForm есть список дочерних компонентов и при OnPaint оно сначала отрисовывает себя, а после поочерёдно дёргает OnPaint всех дочерних (рисующих на том же HDC).
Аналог TLabel это подфункция в WM_PAINT, рисующая текст. А вы делая "CreateWindowEx" создавали аналог TStatic (или TStaticLabel, не помню точно).
Правильный вывод анимации делается так: в нужном OnPaint (вызываемом внутри WM_PAINT окна) рисуется графика с параметрами зависящими от времени, или каких-то других переменных, а в таймере делается только Repaint (то что в VCL называется Refresh).
-
> Edgar_Wine (08.09.14 22:48) [16] > Есть "Оконные" компоненты и есть "Рисованные" компоненты. >
Вы меня вообще запутали. Може книгу посаветуете? "Щупак" уже читаю.
-
-
Лень самому рисовать кнопку - создаёте окно с классом, дающим нужное поведение (если такой есть). А непосредственно TLabel просто рисует на TForm.Canvas текст.
SelectObject возвращает предыдущий объект, который нужно запоминать и удалять или возвращать на место. Созданные nBrush тоже нужно куда-то девать. Или создать одну и пользоваться только ей, или хранить, или удалять.
|