Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2008, 21:22   #1
zwook
 
Регистрация: 28.10.2008
Сообщений: 5
По умолчанию "Прозрачная" Программа

Возможно ли в дельфи сделать программу которая рисует что либо (в моем случае параболу) поверх всех окон, при этом фон должен быть прозрачный. Саму программу я написать могу но вот как сделать так, чтобы фон был прозрачный и поверх всех действующих окон незнаю

Для тех кто не понял вопроса, программа должна рисовать линию которая изображатеся поверх действующего окна. При этом все то, что за периметром этой линией должно быть прозрачным т.е. просвечивать действующее окно.
zwook вне форума Ответить с цитированием
Старый 02.11.2008, 22:08   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Рисует простую прямую. Параболу можно построить по нескольким малым отрезкам.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  desk: tcanvas;
begin
  desk := tcanvas.create;
  desk.handle := getdc(hwnd_desktop);
  desk.MoveTo(100, 100);
  desk.LineTo(300,300);
  releasedc(desk.handle, hwnd_desktop);
  desk.free
end;
desk - обычная канва, можно изменить цвет, толщину линии и т.д.
eoln вне форума Ответить с цитированием
Старый 02.11.2008, 22:30   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); // поместим на верх
// допустим BMP: TBITMAP с PixelFormat = pf32bit и вы он заполнен нулям
// теперь нарисуите на нем параболу и к ее цвета в альфа канале 255 - полная не прозрачность
// теперь
UpdateLayeredWindow(Handle, 0, @ZTopLeft, @ZSize, BMP.Canvas.Handle, @ZPoint, 0, @ZBF, ULW_ALPHA);
ну переменные сами разберете.. а при создании окна у которого Handle указан.. пишите SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);

P.s. писал все коды и слова прямо тут так что если что подкорректируите сами.
BOBAH13 вне форума Ответить с цитированием
Старый 03.11.2008, 10:14   #4
zwook
 
Регистрация: 28.10.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Код:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); // поместим на верх
// допустим BMP: TBITMAP с PixelFormat = pf32bit и вы он заполнен нулям
// теперь нарисуите на нем параболу и к ее цвета в альфа канале 255 - полная не прозрачность
// теперь
UpdateLayeredWindow(Handle, 0, @ZTopLeft, @ZSize, BMP.Canvas.Handle, @ZPoint, 0, @ZBF, ULW_ALPHA);
ну переменные сами разберете.. а при создании окна у которого Handle указан.. пишите SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);

P.s. писал все коды и слова прямо тут так что если что подкорректируите сами.
Огромное спасибо! =)
zwook вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
программа,определенние "1" в таблице!помогите пожалуйста.. katy)))) Помощь студентам 2 06.12.2007 12:09
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49