- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
type
THackImage = class(TGraphicControl)
public
property Canvas;
end;
procedure TColorPicker.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
{$IFDEF HACKS}
Assert(Sender is TImage, 'в Sender всегда передается экземпляр класса TImage');
FSelectedColor := THackImage(Sender).Canvas.Pixels[X, Y];
{$ELSE}
(* то, что было лень писать сразу *)
Говнистая работа с библиотекой VCL. Не притрагивался к проекту около года, потом загрузил и почти час втыкал, за каким этот грёбаный хак здесь нужен.
ZLOvar 07.09.2010 21:37 # −1
hdkeeper 08.09.2010 10:18 # 0
Lure Of Chaos 08.09.2010 10:23 # +1
bugmenot 08.09.2010 13:53 # +1
спойлер нужен зачем так сделано?
Lure Of Chaos 08.09.2010 10:14 # 0
Stalker 08.09.2010 14:51 # 0
bugmenot 08.09.2010 22:12 # +1
При том что TImage может масштабировать и центрировать - пришлось прилично кнопки потоптать ради преобразования координат к нужным.
Stalker 08.09.2010 23:54 # 0
Stalker 09.09.2010 00:19 # +1
bugmenot 09.09.2010 02:41 # 0
иначе через такую жопу значение пиксела доставать...
ctm 13.09.2010 11:00 # 0
Странно, что в VCL не предусмотрен нормальный доступ к уже нарисованной картинке...
вариант
FSelectedColor := TForm(TControl(Sender).Parent).Canvas.Pi xels[
X + TControl(Sender).Left, Y + TControl(Sender).Top
];
хуже тем, что картинка должна лежать на форме, ее уже не положить на панельку, табу или еще куда-нибудь.
А код действительно вводит в заблуждение %)
bugmenot 14.09.2010 00:38 # 0
С родительской канвой я не пробовал, потому что у меня там скроллбокс и в итоге расчетов не меньше, чем при получении прямо из битмапа
Stalker 14.09.2010 02:54 # 0