Русский developing - бессмысленный и беспощадный! 

z.g писал(а):и производительность проседала невероятно
а она кстати, будет проседать невероятно. например при выводе 10000 точек, таким вот способом. 
предлагаю даже написать тест и сравнить скорость работы, например в WinXP, отрисовки точек до патчевым и послепатчевым способом! 
Опыт работы с DC функциями подсказывает, что скорость упадёт значительно... хотя бы просто за счёт дополнительных call-ов. Не забываем, что на старых компах (где, как-раз висты нет), скорость упадёт ещё сильнее!
z.g писал(а):фикс простой. проблему решает.
Фикс плохой, потому что диктует "фикс для висты" абсолютно для всех Windows систем.
правильнее было бы так:
- Код: Выделить всё
 procedure VistaSetPixel(CanvasHandle: HDC; X, Y: integer; AColor: COLORREF);
var
  pen, oldpen: HPEN;
begin
  if x and 8=0 then 
    Windows.SetPixel(CanvasHandle, X, Y, Windows.ColorRef(ColorToRGB(AColor)))
  else begin
    pen := Windows.CreatePen(PS_SOLID, 1, Windows.ColorRef(ColorToRGB(AColor)));
    oldpen := Windows.SelectObject(CanvasHandle, pen);
    Windows.MoveToEx(CanvasHandle, X, Y, nil);
    Windows.LineTo(CanvasHandle, X, Y + 1);
    Windows.SelectObject(CanvasHandle, oldpen);
    Windows.DeleteObject(pen);
  end;
end;
procedure WinSetPixel(CanvasHandle: HDC; X, Y: integer; AColor: TGraphicsColor);
begin
  Windows.SetPixel(CanvasHandle, X, Y, Windows.ColorRef(ColorToRGB(AColor)));
end;
var
  IntSetPixel : procedure (anvasHandle: HDC; X, Y: integer; AColor: TGraphicsColor) = @WinSetPixel;
procedure TWin32WidgetSet.DCSetPixel(CanvasHandle: HDC; X, Y: integer; AColor: TGraphicsColor);
begin
  IntSetPixel(CanvasHandle, X,Y, AColor);
end;
constructor TWin32WidgetSet.Create;
begin
  ...
  if isWindowsVista then IntSetPixel:=@VistaSetPixel;
  ...
end;
и никому не будет больно... кроме висты 

z.g писал(а):1. способы исправления в уже готовых приложениях.
если имеется в виду, уже скомпилированных, то ответ - никак! баг Висты 

любое приложение использовавшее в Висте SetPixel API, без пересборки не заработает.
z.g писал(а):2. способы исправления в своём приложении без правки lcl.
- Код: Выделить всё
 procedure MySetPixel(c: TCanvas; x,y: integer; color: TColor);
var
  b : TColor;
begin
  if not isVista then 
    c.SetPixel(x,y, color);
  else begin
    b:=c.Pen.Color; // penwidth+pen+style
    c.Pen.Color:=color;
    c.FillRect(x, y,x+1, y+1)
    c.Pen.Color:=b;
  end ;
end;
Но лучший способ - выкинуть SetPixel нафик (зачем он используется?!). Вместо него использовать, например, TBitmap.
Добавлено спустя 4 минуты 51 секунду:вот ещё можно так написать:
to: Lazarus mailing list <lazarus@lists.lazarus.freepascal.org>
subject: Russian Lazarus developers.
Hello Lazarus team
Why Russian Lazarus developers are so cruel?! Aren't you feeding them? 
Could you please reassign the issue (
http://bugs.freepascal.org/view.php?id=15822) to some other maintainer not Russian, please. I find my patch to be working, but for some reason, your Russian developer refuses to accept it. I think it's because he's Russian.
Regards,
z.g 
Такое письмо порадует немецких разработчиков на 8-9 мая  
 сорри за троллинг! весна чо!