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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2013, 20:03   #1
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию рисовать на рабочем столе

есть код:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
 ACanvas:TCanvas;
 ScreenDC:HDC;
begin
with ACanvas do
  begin
  ScreenDC := GetDC(0);
  ACanvas:=TCanvas.Create();
  ACanvas.Handle:=ScreenDC;

  TextOut(500,500,DateToStr(Now));

  ReleaseDC(0,ScreenDC);
  ACanvas.Free;
  end;
end;
так я могу рисовать на рабочем столе (нашел в интернете), проблема в том что рисование происходит не только на рабочем столе, но и поверх всех окон, возможно ли как то рисовать ТОЛЬКО на рабочем столе? да и еще, TextOut делает вокруг текста белую рамку, возможно ли выводить текст без нее? (ну понятно белая по цвету Brush, но как сделать прозрачный цвет или типа того?)
NewLamer&Programer вне форума Ответить с цитированием
Старый 11.05.2013, 20:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ТОЛЬКО на рабочем столе?
Код:
ScreenDC := GetDC(GetDesktopWindow);
Или
Код:
  deskWND:= FindWindow('ProgMan', nil);
  deskWND:= GetWindow(deskWND, GW_CHILD);
  deskWND:= GetWindow(deskWND, GW_CHILD);
ScreenDC := GetDC(deskWND);
Цитата:
возможно ли выводить текст без нее?
Код:
ACanvas.Brudh.Style:=bsNone;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 20:45   #3
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
ScreenDC := GetDC(GetDesktopWindow);
вообще ничего не рисует
Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
  deskWND:= FindWindow('ProgMan', nil);
  deskWND:= GetWindow(deskWND, GW_CHILD);
  deskWND:= GetWindow(deskWND, GW_CHILD);
ScreenDC := GetDC(deskWND);
рисует, и вполне нормально, только я не понял что вы присваиваете? что за окно 'ProgMan'?
почему эта deskWND:= GetWindow(deskWND, GW_CHILD); строка 2 раза?
и вообще переменная deskWND имеет какой тип? попробовал и HDC и HWND оба раза и скомпилировалось и рисовало...
Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
ACanvas.Brudh.Style:=bsNone;
Incompatible types: 'TBrushStyle' and 'TFormBorderStyle'
п.с. оказывается bsClear, а не bsNone

Последний раз редактировалось NewLamer&Programer; 11.05.2013 в 20:53.
NewLamer&Programer вне форума Ответить с цитированием
Старый 11.05.2013, 21:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что за окно 'ProgMan'?
Это окно рабочего стола. Сложно обьяснить - забей это название в гугл, почитай о нем.
Цитата:
оказывается bsClear, а не bsNone
С потолка писал. Бывает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 21:27   #5
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

такой еще вопрос, а как стереть нарисованное? просто там начинают символы друг друга перекрывать в некоторых местах... да и еще я обнаружил, что после закрытия программы текст продолжает висеть на рабочем столе до перекрытия
NewLamer&Programer вне форума Ответить с цитированием
Старый 11.05.2013, 21:35   #6
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Он и должен висеть. Что бы его убрать просто обновите рабочий стол.
Kix.IV вне форума Ответить с цитированием
Старый 11.05.2013, 21:38   #7
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Kix.IV Посмотреть сообщение
Он и должен висеть. Что бы его убрать просто обновите рабочий стол.
как??? (програмно)
NewLamer&Programer вне форума Ответить с цитированием
Старый 11.05.2013, 21:55   #8
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

http://kak-iskat.ru/?q=%D0%BE%D0%B1%...D%D0%BE+delphi
Kix.IV вне форума Ответить с цитированием
Старый 11.05.2013, 22:01   #9
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Kix.IV Посмотреть сообщение
так остроумно... мне кажется ты дольше искал этот сайт, чем думал... а теперь смотрим что мы имеем: нет мне не нужно менять обои, и удалять ярлык и даже делать скриншот рабочего стола... да много так нашлось... но того что нужно нет остряк че... тут конкретная ситуация, а гугл туго соображает... тут нужен человек... и я умею пользоваться гуглом будь спокоен

п.с. нашел вот такие варианты, но они не работают почему то...

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);

SendMessage(FindWindow('Progman','P rogram Manager'),WM_COMMAND,$A065,0);

Последний раз редактировалось NewLamer&Programer; 11.05.2013 в 22:12.
NewLamer&Programer вне форума Ответить с цитированием
Старый 11.05.2013, 22:13   #10
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

http://yn0.ru/?q=InvalidateRect+Delphi Не проверял, но должно сработать
eoln вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисовалка на рабочем столе Downloads Общие вопросы Delphi 10 27.06.2012 23:12
ЧАТ на Рабочем столе! Kachimov Свободное общение 7 11.08.2010 01:21
кнопка на рабочем столе guffer Общие вопросы Delphi 3 08.07.2009 12:15
Значки на рабочем столе Xardas Свободное общение 4 01.03.2008 20:21
SpeedButton на рабочем столе ERASERROR Общие вопросы Delphi 10 22.01.2008 16:58