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

Вниз

Прозрачно-серый фон   Найти похожие ветки 

 
L.eXX   (2002-03-24 21:26) [0]

Привет, Мастера! Очень интересует такой вопрос: как сделать чтобы весь экран за моей формой стал позрачно-серым и чтобы можно было работать только с моей формой, которая всегда должна быть активна (и плюс чтобы никаких заставок, Alt+Tab и Ctrl+Alt+Del).

То есть как сделать такую штуку, как в win98, когда нажимаешь "Пуск -> Завершение работы" ?


 
Song   (2002-03-24 21:35) [1]

Такая штука делается рисованием на канвасе десктопа путём or"а с числом (каким не помню) каждой точки.


 
L.eXX   (2002-03-25 00:48) [2]

хм... я посмотрел - в этой "сетке" точки идут через одну, со сдвигом влево на каждых второй строке и втором столбце:

# # # # # #
# # # # # #
# # # # # # #
# # # # # #

написал такую штуку:

procedure TForm1.Button1Click(Sender: TObject);
var
hdcDesk: THandle;
Brush: TBrush;
i,j: Word;
x,y: Word;
begin
hdcDesk:=GetWindowDC(GetDesktopWindow);
Brush:=TBrush.Create;
Brush.Color:=clBlack;
SelectObject(hdcDesk,Brush.Handle);
y:=0;
for i:=0 to 768 do begin // 768
if Odd(i) then x:=0 else x:=1;
for j:=0 to (1024 div 2) do begin // а почему, кстати, достаточно 512 ?
Rectangle(hdcDesk,x,y,x+1,y+1);
x:=x+1+1;
end;
y:=y+1;
end;
ReleaseDC(hdcDesk,GetDesktopWindow);
Brush.Free;
end;


только вот... наверно Rectangl"ы рисовать не очень хорошо :) а как точечку-то одну нарисовать? а то ведь наверняка из-за них и медленно заливается (1024х768 за 4 секунды)

и что за метод рисования or"а с числом?


 
Nikolay M.   (2002-03-25 14:20) [3]

Ну ты и почесался с этими Brush-ами... Тем более под НТ 4 не прокатило.
Вот так не пробовал?

hdcDesk := GetWindowDC (GetDesktopWindow);
for i := 0 to 768 do
for j := 0 to (1024 div 2) do
begin
MoveToEx (hdcDesk, j * 2 + (i mod 2), i, nil);
LineTo (hdcDesk, j * 2 + 1, i);
end;
ReleaseDC (hdcDesk, GetDesktopWindow);

Конечно, быстрее будет создавать скрытый DC, рисовать в нем и копировать в GetDesktopWindow... Если опять будет проблема с быстродействием - пиши, заморочусь.


 
L.eXX   (2002-03-25 19:32) [4]

Хм, это вроде даже почти на секунду быстрей получается :)

Однако этот код рисует простую сетку. Я пытался в предыдущем сообщении показать что мне нужно, однако пробелы почему-то поисчезали ;)

Пиксели в сетке расположены как на шахматной доске чёрные клетки! Вот. И чего-то я не очень соображу, чего тут надо поменять...

Да, проблема с быстродействием осталась :( Нужен скрытый DC... И наверно нужно также будет в ещё один скрытый DC копировать изображение desktop"а до сетки. Ну чтобы потом, когда сетку уже убирать надо...


 
Shaman_Naydak   (2002-03-25 20:30) [5]

Могу порекомендовать следующее (очень быстро):
сделать монохромный bitmap 8x8, в котором нарисовать точечки как треба.
Этот Bitmap -> brush,
ну и залить все rectangle(0,0,Width,Height)

Когда надо восстановить будет экран
InvalidateRect(0, nil, True);

И все + никаких гвоздей,
Ну а нажатия клавиш - тему поднимали неоднократно



 
L.eXX   (2002-03-26 02:30) [6]

Shaman_Naydak:

м... суперская скорость!!! :)

Я сделал так:

procedure TForm1.FormCreate(Sender: TObject);
var
hdcDesk: THandle;
Brush: TBrush;
begin
hdcDesk:=GetWindowDC(GetDesktopWindow);
Brush:=TBrush.Create;
Brush.Bitmap:=TBitmap.Create;
Brush.Bitmap.LoadfromFile("8x8.bmp"); // "шахматная доска" 8x8, 2 бита цветов
Brush.Bitmap.TransparentColor:=clWhite;
Brush.Bitmap.TransparentMode:=tmFixed;
Brush.Bitmap.Transparent:=True;
SelectObject(hdcDesk,Brush.Handle);
Rectangle(hdcDesk,0,0,Screen.Width,Screen.Height);
ReleaseDC(hdcDesk,GetDesktopWindow);
Brush.Bitmap.Free;
Brush.Free;
end;


Всё рисуется, всё быстро, всё здорово. Только опять проблема: сетка какая-то непрозрачная получилась!! :( В чём же дело? Я вроде в свойствах указал...


 
L.eXX   (2002-03-30 01:04) [7]

И всё-таки: как же сделать сетку прозрачной (чтоб сковзь неё был виден десктоп)? Почему она по хорошему не хочет? ( Brush.Bitmap.Transparent:=True)



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

Форум: "Основная";
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
14-32983
Dimich
2002-02-28 12:00
2002.04.11
Где можно взять драйвер для Mustek 12000sp+ под Win XP


4-33021
DelBoy
2001-12-15 21:05
2002.04.11
Приложение - Агент


3-32702
AlexNic
2002-03-20 22:34
2002.04.11
Работа с InterBase


1-32732
CrazyAngel
2002-03-28 20:02
2002.04.11
Как создать что-нибудь.lnk ?


3-32689
Sergey_R
2002-03-21 10:00
2002.04.11
Логическая структура БД





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский