Главная страница
    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.023 c
14-1127306450
Антоний
2005-09-21 16:40
2005.10.09
Завершение lsass.exe


9-1117763063
Slavikk
2005-06-03 05:44
2005.10.09
GLScene и OpenGL


3-1125303576
Ольга
2005-08-29 12:19
2005.10.09
Как в T-SQL удалить IDENTITY у поля?


4-1123652186
pepper
2005-08-10 09:36
2005.10.09
Отключение сетевыеx дисков


3-1125279600
Булат
2005-08-29 05:40
2005.10.09
delphi база данных двойники





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