Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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)




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




Наверх





Память: 0.73 MB
Время: 0.019 c
1-32722           anod                  2002-03-30 00:37  2002.04.11  
Ошибка при создании popup меню


3-32666           Alexsys               2002-03-16 06:55  2002.04.11  
Описание отчета в текстовом файле??? Выручайте... ПЛИЗ!


14-32948          Pete                  2002-03-04 09:33  2002.04.11  
New Component...


1-32906           L.eXX                 2002-03-24 21:26  2002.04.11  
Прозрачно-серый фон


3-32704           visa                  2002-03-21 19:40  2002.04.11  
проект без BDE