Главная страница
    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.46 MB
Время: 0.005 c
15-1220007907
DiamondShark
2008-08-29 15:05
2008.10.19
С какой учётной записью


2-1221488145
Totaren
2008-09-15 18:15
2008.10.19
Как убрать полосы прокрутки в родительской форме MDI приложения?


2-1221038683
dmitry_12_08_73
2008-09-10 13:24
2008.10.19
Определение дескриптора окна под текущим окном


3-1208278127
Вопрос
2008-04-15 20:48
2008.10.19
как найти 10 "последних записей" в sql ?


2-1221112968
Костик
2008-09-11 10:02
2008.10.19
Помогите подскажите





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский