2015-05-19 5 views
0

IAM пытается нарисовать градиент фона по просмотра списка с помощью GraphUtil, у меня есть только проблема с градиентом позицииЗаполнение ListView с градиентом цвета фона

здесь мой пользовательский список вид Жеребьевка событие

Var 
    R: TRect; 
begin 
    // Full ListView 
    SetRect(R, ARect.Left, ARect.Top, ARect.Right - ((ARect.Right-ARect.Left) div 2), ARect.Bottom); 
    GradientFillCanvas(Sender.Canvas, panelemo.Color, clWhite, R, gdVertical); // GraphUtil 
    SetRect(R, ARect.Right - ((ARect.Right-ARect.Left) div 2), ARect.Top, ARect.Right, ARect.Bottom); 
    GradientFillCanvas(Sender.Canvas, panelemo.Color, clWhite, R, gdVertical); 
    panelmeter.Color := panelemo.Color; 

я хочу нарисовать градиент справа налево не сверху вниз, как это изображение

enter image description here

+0

'gdVertical' → gdHorizontal' – TLama

+1

Я сделал это перед его срезом на заднем плане – DelphiStudent

+1

Да, потому что вы собираетесь нарисовать только один градиент (от начального цвета до конечного цвета), а не два из них, не так ли? ? Думаю, вы ищете именно эту строку кода «GradientFillCanvas (Sender.Canvas, panelemo.Color, clWhite, ARect, gdHorizontal);'. Но я отказываюсь от ваших вопросов. Кажется, что только я не могу их понять (поскольку люди голосуют за них). – TLama

ответ

1

It неясно, что вы на самом деле хотите, потому что то, что вы говорите, отличается от того, что вы показываете.

Во всяком случае, gdHorizontal означает, что цвет меняется с StartColor на EndColor горизонтально слева направо. На вашем изображении, как если бы вы указали белый цвет как цвет начала и turqoise как конечный цвет. Если вы хотите изменить горизонтальное направление (справа налево), вам нужно поменять цвета.

Пример горизонтальной с использованием кода:

GradientFillCanvas(ListView1.Canvas, AColor, clWhite, R, gdHorizontal); 

enter image description here

gdVertical означает, что цвет является вертикально меняется, от верхней части к нижней части. Если вы хотите изменить вертикальное направление (снизу вверх), вам нужно поменять цвета.

Пример вертикального с использованием кода:

GradientFillCanvas(ListView1.Canvas, AColor, clWhite, R, gdVertical); 

enter image description here

нарезанный результат я думаю, что вы смотрите, это вызвано тем, что вы рисуете градиент с двумя вызовами GradientFillCanvas() один раз для каждой половины TRect.

+0

мой оригинальный код показывает сверху вниз, если вы проверите этот код после изменения в списке на draw 'SetRect (R, ARect.Left, ARect.Top, ARect.Right - ((ARect.Right-ARect.Left) div 2) , ARect.Bottom); GradientFillCanvas (Sender.Canvas, panelemo.Color, clWhite, R, gdHorizontal); // GraphUtil SetRect (R, ARect.left - ((ARect.Right-ARect.Left) div 2), ARect.Top, ARect.left, ARect.Bottom); GradientFillCanvas (Sender.Canvas, panelemo.Цвет, clWhite, R, gdHorizontal); 'Посмотрите, как результат отобразится в – DelphiStudent

+0

и +1 для вашего примера, но это не так, как это выглядит в моем коде, который вы можете увидеть после теста. – DelphiStudent

+0

@DelphiStudent. Прочитайте снова мой последний абзац. Я не знаю, не проверяя, что ваш список разделен на две части, и каждый имеет свой собственный градиент, IOW «разрезан», как вы говорите. Но почему вы сосредотачиваетесь на чем-то, чего не хотите? Не разделяйте прямоугольник пополам! Используйте только один вызов GradientFillCanvas! –

Смежные вопросы