| | | | |
ListBox с Fixed рядами и произвольными иконками для каждого ряда. | Полный текст материала
Цитата или краткий комментарий: «... В данном примере хочется рассмотреть, как с помощью канвы можно преобразить и добавить функциональности компоненту ListBox. ...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
| | Содержит полезные и(или) интересные сведения | [1] | 1 | 50% | | | | Ничего особенно нового и интересного | [2] | 1 | 50% | | | | Написано неверно (обязательно укажите почему) | [3] | 0 | 0% | | Всего проголосовали: 2 | | | Все понятно, материал читается легко | [1] | 1 | 100% | | | | Есть неясности в изложении | [2] | 0 | 0% | | | | Непонятно написано, трудно читается | [3] | 0 | 0% | | Всего проголосовали: 1 |
[TListBox] [GDI, рисование на канве]
Отслеживать это обсуждение
Всего сообщений: 717-01-2005 07:132 Алексей Румянцев:
В том то и дело, что в выни... А если в линухе? Вы уверены, что всегда под выньдовс будете программировать? Я нет...
Кроме того, эта закраска работает ТОЛЬКО с моделью цвета РГБ. Если будет использоваться другая модель(например HLS), придется переводить в ргб => лишие вычисления, работа.
2 vano:
Я не ставлю цель сравнения моей библиотеки и этой функции. Заметьте, я ничего не говорил по поводу использования моей библиотеки. НИ СЛОВА. Я не пропагандирую использование. Это личное дело каждого программиста - выбор инструмента. Я просто сказал, что именно эта функция глючит. Если так в прикол сравнивать быстродействие - сравнивайте, мне почти все равно. Просто именно в этой функции используется куча лишних вычислений, к тому же рисуется прямоугольниками... Так можно только двумя видами заливать, а я - за фантазию.
З.Ы. Извините за разворачивание флейма, я не нарочно... |
|
17-01-2005 06:10Offtopic (не относится именно к этой статье).
Сколько бы нибыло компонент с градиентной заливкой, столько же появляется и версий этой самой градиентной заливки. Для меня остается непонятным зачем каждый раз пишут ее поновой, когда в виндусе есть замечательная функция GradientFill, которая закрашивает кажется любые области(Rect) без "скачков".
Юнит-обертка:
unit ApiGradient;
interface
uses
Windows, SysUtils, Graphics;
type
TTriVertex = packed record
x : Longint;
y : Longint;
Red : SmallInt;
Green: SmallInt;
Blue : SmallInt;
Alpha: SmallInt;
end;
function GradientFill(DC: HDC; var p2: TTriVertex; p3: ULONG; p4: Pointer; p5, p6: ULONG): BOOL; stdcall;
type
TGradientDirection = (gdHorizontal, gdVertical);
function GradientRect(Canvas: TCanvas; const ARect: TRect;
Color1, Color2: TColor; Direction: TGradientDirection): Boolean;
implementation
function GradientFill; external msimg32 name 'GradientFill';
type
TRGB = record
R, G, B: Byte;
end;
function GetRGB(Color: TColor): TRGB;
var
iColor: TColor;
begin
iColor := ColorToRGB(Color);
Result.R := GetRValue(iColor);
Result.G := GetGValue(iColor);
Result.B := GetBValue(iColor);
end;
function GradientRect(Canvas: TCanvas; const ARect: TRect; Color1,
Color2: TColor; Direction: TGradientDirection): Boolean;
function InitTriVertex(XPos, YPos: Integer; Color: TColor): TTriVertex;
begin
with Result do
begin
x := XPos;
y := YPos;
Alpha := 2;
with GetRGB(Color) do
begin
Red := R shl 8;
Green := G shl 8;
Blue := B shl 8;
end
end
end;
const
Flag: array[TGradientDirection] of Longint = (
GRADIENT_FILL_RECT_H, GRADIENT_FILL_RECT_V);
var
GRect : TGradientRect;
Vertex: array[0..1] of TTriVertex;
begin
GRect.UpperLeft := 0;
GRect.LowerRight := 1;
Vertex[0] := InitTriVertex(ARect.Left, ARect.Top, Color1);
Vertex[1] := InitTriVertex(ARect.Right, ARect.Bottom, Color2);
Result := GradientFill(Canvas.Handle, Vertex[0], 2, @GRect, 1,
Flag[Direction]);
end;
end.
Пример:
GradientRect(Canvas, Rect(0, 0, 300, 300), clYellow, clRed, gdVertical); |
|
16-01-2005 19:38to sega: А давай по-приколу сравним результаты закраски градиентом твоей библиотекой и этой функцией(раз уж ты так к этой мелочи прицепился) и если увижу хоть какую разницу - буду рад за твои успехи!!! |
|
16-01-2005 15:03Тьфу ты! Я хотел сказать, что горизонтальная нормальная... Сообщение не подписано |
|
16-01-2005 10:15Вообще-то есть... Попробуй потестировать метод - на разных областях по размеру, ориентации и так далее. Вертикальная заливка - более или менее, а вертикальная - ни к черту. Да и если тело процедуры посмотреть, то слишком много вычислений идет. Слишком. Зачем так все усложнять - не понимаю... |
|
14-01-2005 15:44to sega:А мне больше стилей закраски и не надо!! Основная цель- эффект Office 2003!!! И поэтому нет разницы м/д Draw Gradient и твоей библиотекой(рассматривал ее на досуге-довольно прикольно!) |
|
14-01-2005 15:21Функция DrawGradient слегка подглючивает... Ntv более, только одна ориентация закраски. Именно после использования этой функции я решил написать свою библитеку. А так довольно интересный прием. |
|
|
|