Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
2-1220780338
Point
2008-09-07 13:38
2008.10.19
Как научиться составлять sql запросы.


2-1220531255
zzz
2008-09-04 16:27
2008.10.19
Проверка на последнюю запись


2-1219596481
Виталий_д
2008-08-24 20:48
2008.10.19
высота TMainMenu


2-1220825497
dars73
2008-09-08 02:11
2008.10.19
Подскожите пожалуйста почему я не могу подключить модуль


2-1220850278
FIL-23
2008-09-08 09:04
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский