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

Вниз

Вопрос: Как обновить рабочий стол (Desktop)?   Найти похожие ветки 

 
Huliganka   (2005-08-11 11:55) [0]

Есть процедура (пишет текст на Desktop):

procedure WriteDC(s: string);
var c: TCanvas;
begin
 c := TCanvas.Create;
 c.Brush.Color := clBlue;
 c.Font.color := clYellow;
 c.Font.name := "Fixedsys";
 c.Handle := GetDC(GetWindow(GetDesktopWindow, GW_OWNER));
 c.TextOut(screen.Width - c.TextWidth(s) - 100, screen.Height - 200, s);
 c.free;
end;

Хочу чтобы этот текст мигал на Desktope по таймеру.


 
Kerk ©   (2005-08-11 11:56) [1]

 RedrawWindow(0, nil, 0, RDW_ERASE + RDW_INVALIDATE + RDW_UPDATENOW
   + RDW_ALLCHILDREN);


 
Eraser ©   (2005-08-11 18:13) [2]

Huliganka   (11.08.05 11:55)

Ещё как вариант: InvalidateRect(0, nil, false);


 
wicked ©   (2005-08-11 22:55) [3]

замечание - а кто DC освобождать будет?...


 
Eraser ©   (2005-08-12 01:33) [4]

wicked ©   (11.08.05 22:55) [3]
c.free;


А это что тогда?


 
Kazakh   (2005-08-13 17:24) [5]

Я пользуюсь этим:

procedure TForm1.Button1Click(Sender: TObject);
begin
 SendMessage(FindWindow("Progman", "Program Manager"),
 WM_COMMAND, $A065, 0);
end;
Можно и так

winexec(Pchar("rundll32 user,repaintscreen"), sw_Show);

или так

procedure RefreshDesktop;
var
 hDesktop: HWND;
begin
 hDesktop := FindWindowEx(FindWindowEx(
   FindWindow("Progman", "Program Manager"), 0,
   "SHELLDLL_DefView", ""), 0, "SysListView32", "");
 PostMessage(hDesktop, WM_KEYDOWN, VK_F5, 0);
 PostMessage(hDesktop, WM_KEYUP, VK_F5, 1 shl 31);
end;

так тоже можно

uses
  ShlObj;

procedure RefreshDesktop1;
begin
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;


 
wicked ©   (2005-08-13 17:47) [6]

> Eraser ©   (12.08.05 01:33) [4]
это - освобождение обьекта c, в деструкторе которого сам dc не освобождается...
прежде чем писать здесь свои замечания, я посмотрел в файле graphics.pas на деструктор класса TCanvas... и вам советую поступать так же...


 
wicked ©   (2005-08-13 17:55) [7]

касательно мигания текста по таймеру - я бы посоветовал выводить его в path, затем преобразовывать в region и присваивать окну этот region через SetWindowRgn... окно, разумеется, должно быть always-on-top... например, так (на билдере):
 // sample settings
 int x=0, y=0;
 const char *text="Sample Text";
 // begin path recording - in this case, just one string of text
 BeginPath(Canvas->Handle);
 // prevent the text box"s outline from being added to the path
 SetBkMode(Canvas->Handle,TRANSPARENT);
 Canvas->TextOut(x,y,text);
 EndPath(Canvas->Handle);
 // now the path can be manipulated - in this case, turn into window outline
 HRGN region=PathToRegion(Canvas->Handle);
 ::SetWindowRgn(Handle,region,true);

пример не мой, но я по нему учился... :)

тогда мигание - это просто прятание и показывание окна...

так, как есть, тоже будет работать, но тормозов будет немерянно - всем окнам периодически будет приходить полный WM_PAINT, что есть очень накладно...


 
Eraser ©   (2005-08-13 21:22) [8]

wicked ©   (13.08.05 17:47) [6]

Твоя правда! Действительно надо было обратить внимание на  c.Handle := GetDC(GetWindow(GetDesktopWindow, GW_OWNER));



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

Форум: "WinAPI";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.024 c
1-1126947438
Piter
2005-09-17 12:57
2005.10.09
Непонятка с директивами компилятора


2-1125154685
Иван Семенов
2005-08-27 18:58
2005.10.09
Как перебрать все компоненты на двух формах?


14-1127136832
vecna
2005-09-19 17:33
2005.10.09
Про черные ящки =)


14-1126612790
McSimm
2005-09-13 15:59
2005.10.09
тест


2-1125064034
гвест
2005-08-26 17:47
2005.10.09
скроллбары





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