[D5] GetDС + память + RePaint

Здарова, программеры!
8 марта 2004 г., понедельник, 22:54:35 (GMT+05:00) Делфи - память: monah намылил:
Идея мне понравилась. Я решил её сплагинить ;')
Появились вопросы, соответствующие места в коде
отмечены - // <комментарий>
1) Почему перекрываются адреса переменных PChar?
2) Как сменить фонт для DC?
3) Как получить цвет шрифта у значков на рабочем столе?
4) Как указать окну на котором рисуешь то что пора перерисоваться? У
меня где-то был такой код, но после получаса поиска в моем скопище
он найден не был (там был код - монитор красными пятнами
покрывается (якобы вирусом заразился ;), а при выходе из проги все
пятна исчезают - может код а может статья была, но помню что это
делается едва ли не одной функцией). Все это надо для прозрачности
т.к. иначе цифры накладываются. И еще, есть процедурка которая
указывает перерисовать Rect в окне а не все окно, тоже подскажите,
а то я найти не могу.
5) Прога на харде занимает 17,5 кб, а в памяти - 1 212 кб (и тоже как
у monaha растет, хотя и очень медленно - во всяком случем на
несколько кило в первые секунды). Почему так много и почему растет?
PS: Может что посоветуете по оптимизации цикла - что вынести за
пределы. Только насчет GetDC, ReleaseDC советы не принимаю -
при нажатии ctrl+alt+del DC: HDC; слетает.
PPS: По ходу дела через DC поверх игр рисует!!!! rulezzzz.
program Project1;
uses
Windows;
var
DC: HDC;
ScreenWidth: integer;
sSize: integer;
ptaDay: POLYTEXT;
ptaDate: POLYTEXT;
ptaTime: POLYTEXT;
ptaArray: array [0..2] of POLYTEXT;
SystemTime: _SystemTime;
DateString: PChar absolute $40560C; // без absolute перекрываются адреса
DayString: PChar absolute $40560C + $100; // глюк какой-то непонятный
TimeString: PChar absolute $40560C + $200; // на этих адресах на другой тачке
может заглючить
tmpTime: string;
{$O-}
begin
ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
DateString := #0;
DayString := #0;
TimeString := #0;
with ptaDate do
begin
x := ScreenWidth - 100;
y := 10;
uiFlags := ETO_OPAQUE;
PAnsiChar := @DateString;
n := 1;
end;
with ptaDay do
begin
x := ScreenWidth - 100;
y := 25;
uiFlags := ETO_OPAQUE;
PAnsiChar := @DayString;
n := 1;
end;
with ptaTime do
begin
x := ScreenWidth - 100;
y := 40;
uiFlags := ETO_OPAQUE;
PAnsiChar := @TimeString;
n := 1;
end;
ptaArray[0] := ptaDate;
ptaArray[1] := ptaDay;
ptaArray[2] := ptaTime;
while true do
begin
GetLocalTime(SystemTime);
sSize := GetTimeFormat(LOCALE_SYSTEM_DEFAULT, LOCALE_NOUSEROVERRIDE, @SystemTime,
nil, @TimeString, 0);
GetTimeFormat(LOCALE_SYSTEM_DEFAULT, LOCALE_NOUSEROVERRIDE, @SystemTime,
nil, @TimeString, sSize);
ptaTime.PAnsiChar := @TimeString;
if tmpTime = ptaTime.PAnsiChar then
begin
sleep(200);
continue;
end;
tmpTime := ptaTime.PAnsiChar;
ptaTime.n := sSize - 1;
sSize := GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_USE_ALT_CALENDAR, @SystemTime,
'd MMMM', @DateString, 0);
GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_USE_ALT_CALENDAR, @SystemTime,
'd MMMM', @DateString, sSize);
ptaDate.PAnsiChar := @DateString;
ptaDate.n := sSize - 1;
sSize := GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_USE_ALT_CALENDAR, @SystemTime,
'dddd', @DayString, 0);
GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_USE_ALT_CALENDAR, @SystemTime,
'dddd', @DayString, sSize);
ptaDay.PAnsiChar := @DayString;
ptaDay.n := sSize - 1;
ptaArray[0] := ptaDate;
ptaArray[1] := ptaDay;
ptaArray[2] := ptaTime;
DC := GetDC(0);
//cn.Font.Style:=[fsBold]; // не знаю как задать шрифт для DC
//SetBkMode(DC, TRANSPARENT);
SetBkMode(DC, OPAQUE);
SetBkColor(DC, GetSysColor(COLOR_DESKTOP));
SetTextColor(DC, not GetSysColor(COLOR_DESKTOP)); // не знаю как получить
цвет
// шрифта у значков на
рабочем столе
PolyTextOut(DC, ptaArray, 3);
sleep(300);
ReleaseDC(0, DC);
end;
end.
Здравствуйте!
Мне нужно скрыть программу от Control+Alt+Delete.
Программа без форм, а примерно такого вида:
program proga;
uses
Windows.
begin
{skip}
end.
Как это сделать? Подскажите пожалуйста.
Пока!
С уважением Lakmus
http://www.nvkz.kuzbass.net/lakmus
Номер выпуска : 2507
Возраст листа : 170 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99977
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru
http://subscribe.ru/ mailto:ask@subscribe.ru