Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.19;
Скачать: CL | DM;

Вниз

Эффекты на висте. Какие будут мнения?   Найти похожие ветки 

 
Darvin   (2008-08-27 11:48) [0]

Создаю проект. Кидаю на форму PainBox, обрабатываю его событие OnPaint, в обработчике пишу следующее:
procedure TForm1.pbDrawPaint(Sender: TObject);
var
 I, J : Integer;
begin
 for I:=1 to pbDraw.ClientHeight - 1 do begin
   if (I mod 10) = 0 then begin
     for J:=0 to pbDraw.ClientWidth - 1 do begin
       pbDraw.Canvas.Pixels[J, I] := clBlack;
     end;
   end;
 end;
end;

Вообщем, выделить черным каждую десятую линию через Pixels (принципиально! хотя и не оптимально, естественно).

Теперь эффект. В теме Windows Vista все прекрасно работает, а в стиле Классическая рисует пунктиром, шириной 256 точек, как будто координата X задается байтом. По Y таких эффектов нет.
Смотрю реализацию SetPixel, идет обращение к API:
procedure TCanvas.SetPixel(X, Y: Integer; Value: TColor);
begin
 Changing;
 RequiredState([csHandleValid, csPenValid]);
 Windows.SetPixel(FHandle, X, Y, ColorToRGB(Value));
 Changed;
end;

Это что, глюк Windows или я туплю?
Да, это все на Delphi7.


 
han_malign ©   (2008-08-27 14:06) [1]

if(GetMapMode(pbDraw.Canvas.Handle) = MM_TEXT)then ShowMessage("Глюк Windows");

а если нет - то разбирайся, начиная с Get/SetMapMode...


 
han_malign ©   (2008-08-27 14:17) [2]

хотя вряд ли, скорее стоит вспомнить о TFT мониторе на D-Sub интерфейсе...
Кажется для тем Vista другой режим(DirectX) пользует.
Для начала стоит в Классическом стиле калибровку монитора сделать.


 
Darvin   (2008-08-27 14:30) [3]

Спасибо, попробую


 
Darvin   (2008-08-27 14:36) [4]

Хотя - это не критично. Вот так работает:
procedure TForm1.pbDrawPaint(Sender: TObject);
var
I, J : Integer;
begin
for I:=1 to pbDraw.ClientHeight - 1 do begin
  if (I mod 10) = 0 then begin
    pbDraw.Canvas.MoveTo(0, I);
    pbDraw.Canvas.LineTo(Width-1, I);
  end;
end;
end;


 
tesseract ©   (2008-08-27 15:35) [5]


>   pbDraw.Canvas.Pixels[J, I] := clBlack;


Так лучше не делать, это сильно тормозной изврат. Особенно будучи запихнутый в OnPaint.


 
ЛшдлуттнСфе   (2008-08-27 16:07) [6]


> Эффекты на висте. Какие будут мнения?


Они там есть и много. И большинство с графикой совершенно не связаны.


 
Darvin   (2008-08-27 16:36) [7]

>tesseract ©   (27.08.08 15:35) [5]
Внимательно читай пост 0:
линию через Pixels (принципиально! хотя и не оптимально, естественно).

Я просто заметил эффект и вынес на обсуждение...
Сделано совсем по другому



Страницы: 1 вся ветка

Текущий архив: 2008.10.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
2-1221417830
Johnnnn
2008-09-14 22:43
2008.10.19
Как присвоить свою процедуру к TInternetExplorer.OnDocumentComple


15-1219762713
ChaosAD
2008-08-26 18:58
2008.10.19
Что почитать по Хранимым Процедурам для MSSQL


15-1219907118
tesseract
2008-08-28 11:05
2008.10.19
Чего-то все про Абрамова забыли


2-1218701003
Нов_и_чок
2008-08-14 12:03
2008.10.19
преобразование длинных имен файлов Windows в DOS


15-1219802795
Slider007
2008-08-27 06:06
2008.10.19
С днем рождения ! 27 августа 2008 среда