Отправляет email-рассылки с помощью сервиса Sendsay

Программирование на Delphi

  Все выпуски  

Программирование на Delphi #23


Информационный Канал Subscribe.Ru

Программирование на DELPHI
 
Разделы рассылки:
Разделы сайта:
Выпуск #23 (19 марта 2005 г.)


Доброго времени суток , уважаемые читатели!

А вот и новый выпуск нашей рассылки! Ничего особо рассказывать не хочу (да и нечего). Только вот хочу вас опросить. Попрошу отнеститсь к этому очень серьёзно:

Нужно ли при публикации ответов выводить e-mail человека, который ответил или достаточно только имени?

>>> Да, следует выводить имя и e-mail (например, Name).
>>> Нет, лучше только имя (например, Name).

Почему я делаю такой опрос?.. Дело в том, что когда ваш e-mail публикуется в рассылке, то это "прекрасная работа" для спамеров и то, что они не попадут в нашу рассылку, гарантировать не может никто. Т.е. если они найдут ваши "мыла", то могут потом рассылать спам. Отсюда и хочется узнать ваше мнение. Конечно, насколько мне известно, таких случаев пока не было.

Количество подписчиков: 2136.


Читатели, лидирующие по количеству баллов:

Место
Имя
Кол-во баллов
Место
Имя
Кол-во баллов
1.
195 баллов
6.
58 баллов
2.
183 балла
7.
53 балла
3.
177 баллов
8.
50 баллов
4.
143 балла
9.
48 баллов
5.
105 баллов
10.
39 баллов


Основные правила нашей рассылки:

1. Не присылайте ответов на вопросы вроде "да я не знаю" или "да/нет". Такие ответы не публикуются.
2. Вопросы, не касающиеся Delphi, не принимаются (для этого существуют другие рассылки).
3. Запрещено присылать вложенные файлы, размером более 100 Кб, без предварительной связи с администратором.
4. Не изменяйте тем присылаемых писем. Письма с "неправильными" темами не публикуются! Используйте текстовый формат писем.


Новые вопросы.

87. Здравствуйте! Хотел узнать следующее: в Delphi 6 у всех глючит IDE (ошибки run-time библиотек, code autocomplete и т.д.)?
У меня установлен пакет исправлений SP2 Delphi 6 но и это не улучшает ситуацию. Если есть дополнительные патчи, или исправления, где их можно скачать? [Ответить].

88. Вопрос по TChart. Как осуществить привязку указателя мыши к линии LineSeries? И еще. По оси X - время (DateTime). Как \"вытащить\" значение Y в любой точке LineSeries? [Ответить].

89. Во время компиляции Delphi присваивает файлу стандартную безликую иконку во многих исходниках я замечал что присутствует файл *.ico, как подменить стандартную на ту которую мне надо? [Ответить].

90. Как в DBGrid из библиотеки Ehlib 3.6 добавить Lookup-поле, чтобы оно действительно работало? Поле вроде сделано, но ключевое поле, оставленное рядом для контрола не меняется, по какому событию обработчик писать? [Ответить].

91. Можно ли на Делфи 7 сделать Кубик-рубик? [Ответить].

92. Как в WinXP оключить комбинации клавиш Ctrl+Alt+Del, Alt+F4, Ctrl+Esc и Alt+Tab? [Ответить].



Ответы на вопросы.

79. (Программное изменение обоев на рабочем столе). [Отвечает: Dasha]: Можно так:
SystemParametersInfo(SPI_SETDESKWALLPAPER,0, PChar(FileName), SPIF_SENDWININICHANGE);

[Отвечает: Сергей]: Установка своих обоев:

procedure ChangeWallpaper(FileName: String);
var
PC: Array[0..$FF] of Char;
begin
StrPCopy(PC, FileName);
SystemParametersInfo(spi_SetDeskWallpaper, 0, @PC, spif_UpdateIniFile);
end;

Пример использования:
ChangeWallpaper('c:\1.bmp');

[Отвечает: Андрей]:
uses
ComObj, ShlObj;
procedure ChangeActiveWallpaper;
const
CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
ActiveDesktop.SetWallpaper('c:\windows\forest.bmp', 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;

[Отвечает: Заяц]: Я делаю так:

procedure TForm1.FormCreate(Sender: TObject);
var
wall: String;
begin
wall:= 'C:\My_paper.bmp';
SystemParametersInfo(SPI_SETDESKWALLPAPER, UINT(wall), nil,
SPIF_SENDCHANGE);
end;

А еще можно сделать вот так:

...
var
reg: TRegIniFile;
begin
reg:= TRegIniFile.Create('Control Panel');
reg.WriteString('Desktop', 'Wallpaper', 'C:\My_paper.bmp');
reg.WriteString('Desktop', 'TileWallpaper', '0');
reg.Free;
SystemParametersInfo(SPI_SETDESKWALLPAPER,0 ,nil, SPIF_SENDWININICHANGE);
end;

[Отвечает: Feniks]: Это совсем несложно! Вот несколько способов.

Способ №1:

uses Registry, WinProcs;
{....................}
procedure SetWallpaper(sWallpaperBMPPath: string; bTile: boolean);
var
reg: TRegIniFile;
begin
// Изменяем ключи реестра
// HKEY_CURRENT_USER
// Control Panel\Desktop
// TileWallpaper (REG_SZ)
// Wallpaper (REG_SZ)
reg := TRegIniFile.Create('Control Panel\Desktop');
with reg do
begin
WriteString('', 'Wallpaper', sWallpaperBMPPath);
if (bTile) then
begin
WriteString('', 'TileWallpaper', '1');
end
else
begin
WriteString('', 'TileWallpaper', '0');
end;
end;
reg.Free;
// Оповещаем всех о том, что мы изменили системные настройки
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
end;

Способ №2:

uses ComObj, ShlObj;
{....................}
procedure ChangeActiveWallpaper;
const
CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
as IActiveDesktop;
ActiveDesktop.SetWallpaper('c:\windows\forest.bmp', 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;

Способ №3:

SystemParametersInfo(SPI_SETDESKWALLPAPER,
0,
PChar('C:\SOMEPATH\SOME.BMP'),
SPIF_SENDWININICHANGE);

И в качестве приложения: "Как обновить рабочий стол".

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;

86. (Книга по Delphi, рассчитанная на новичка). [Отвечает: VeroLom]: Стив Тейксейра (Steve Teixeira), Ксавье Пачеко (Xavier Pacheco) - "Delphi 5, Руководство разработчика". Можно взять на http://www.podgoretsky.com/.

[Отвечает: Feniks]: Я рекомендую книги автора Фаронов В.В. "Delphi 3. Учебный курс" и "Delphi 5. Учебный курс...". Отличные книги для новичка. Я сам начал изучать Делфи 3 именно с его книги "Delphi3. Учебный курс". Потом перешел на Делфи 5.

[Отвечает: Dasha]: Глушаков С.В., Клевцов А.Л., Теребилов С.А. "Программирование на Delphi 5.0", серия "Учебный курс".

5. (Стиль Windows XP). [Отвечает: Novikov]: http://www.ssgroup.fatal.ru/index.php?st=art&nf=stylexp.

84. (Отлавливание моментов соединения и отключения интернета). [Отвечает: Ершов Денис]: Все что необходимо для работы с модемом находится в библиотеке RASAPI32.dll. Конкретно, чтобы определить есть ли соединение, можно с помощью функции RasEnumConnections. Однако справки по ее использованию у меня нет, как и практического опыта. Поэтому примеров дать не могу. Кроме того, для работы с модемом имеются компоненты ApdRasDialer и ApdRasStatus библиотеки "TurboPower Async Professional". Можно использовать эти компоненты, а также модуль AdRasUtl, который и обеспечивает взаимодействие с некоторыми функциями RASAPI32.dll.

[Отвечает: Андрей]: Вот функция, которая возвращает True, если соединение отсутствует и False, если компьютер соединён с интернетом. Функция импортируется из url.dll:

function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL';

а вот пример использования:

if InetIsOffline(0) then ShowMessage('Интернет не подключен.') else ShowMessage('Вы в сети!');

Параметр Flag функции игнорируется. Соответственно, проверяй наличие соединения с определённой периодичностью, запоминая предыдущее значение. Если значение изменилось, значит интернет подключили/отключили.

85. (Обновление только одной записи с помощью ADO). [Отвечает: Тихонов Михаил]: Попробуйте выполнить: MyADOQuery.Recordset.Resync(adAffectCurrent,adResyncAllValues); только в uses надо включить ADOInt.

72. (Перенесение программы с ПК на КПК). [Отвечает: Feniks]: Для того, чтобы перенести прогу с ПК на КПК, твоя прога должна быть написанной специально под ту ОСь, которая стоит на КПК. Как правило, это Windows CE. И это уже другая тема для разговора... :) А чтобы перенести прогу на КПК, тебе надо создать инсталяшку специально для для КПК и его ОСи. Для создания иснталяшек я использую Wise for Windows Installer 6.0. Этот монстр создает их в формате MSI. И у него есть примочка - можно указать, что инсталяшка делается для КПК и для какой именно ОСи (кажется там Windows CE). После чего Wise предложит тебе сделать некоторые настройки твоей инсталяшки специально для этого. Сам я не создавал такие дистрибутивы в виду отсутствия самого КПК :)) Так что, ищи прогу Wise for Windows Installer 6.0 Enterprise. Весит она около 60 метров в дистрибутиве. Или ищи другие проги на туже тему, например от InstallShield.

83. (Как рисовать прямо на экране). [Отвечает: Андрей]: Очень легко, просто нужно получить контекст самого экрана (DC).

Procedure DrawOnScreen;
Var DC:HDC;
DesktopCanvas:TCanvas;
begin
DC:=GetDC(0); // получили DC экрана
try
DesktopCanvas:=TCanvas.Create;
DesktopCanvas.Handle:=DC;
..................
// здесь рисуем на Canvas экрана
..................
finally
ReleaseDC(0,DC);
DesktopCanvas.Free;
end;
end;

[Отвечает: Dasha]:
var
dc : hdc;
s: string;
R:TRect;

begin
dc := GetWindowDc(0);
s:='Hello';
R:=Rect(50,50,100,70);
TextOut(dc,100,100,PChar(s),Length(s));
//или так
DrawText(dc,PChar(s),Length(s),R,DT_CENTER);
MoveToEx(Dc, 0, 0, nil);
LineTo(Dc, 300, 300);
ReleaseDc(0, Dc);
end;

81. (Регистрация DLL). [Отвечает: Андрей]: Именно так и делать - регистрировать её через regsvr32.exe, но с ключом /s - тогда запроса не будет. Чтобы узнать каталог программы, воспользуйся ExtractFilePath(Application.ExeName). Если в системных каталогах - используй GetWindowsDirectory и GetSystemDirectory.

[Отвечает: mvp]: Этот вариант вам не подойдёт?

f1: function( List: Integer): DWord; stdcall; функции DLL;
f2: function: DWord; stdcall;
p1: procedure(a : Integer); stdcall;
//.
procedure LoadDLL;
begin
if dh <> 0 then exit; //если уже загружена, то выходим
try
dh := LoadLibrary(pChar(ExtractfileDir(paramStr(0))
+ '\yuordll.dll')); //загружаем библиотеку
if dh = 0 then exit; //ошибка!
@f1 := GetProcAddress(dh, 'f1dll' ); // получаем адресса функций в
библиотеке по их имени
@f2 := GetProcAddress(dh, 'f2dll' );
@p1 := GetProcAddress(dh, 'p1dll');
if (@f1 = nil) or (@f2 = nil) or (@p1 = nil) then // если не получили
все - что-то не то с библиотекой, т. е. в //библиотеке нет по крайней мере
одной из функций
begin
FreeLibrary(dh); //поэтому выгружаем библиотеку
dh := 0;
end
except
FreeLibrary(dh); //если были ошибки - выгружаем на всякий случай
dh := 0
end;
end;
///.
var dh : THandle;
initialization
begin
dh := 0;
end;


Вы также можете ответить на предыдущие вопросы. Поскольку на них уже ответили как минимум раз, они больше не публикуются в рассылке. Но если вы можете что-то добавить к ответам других, пожалуйста, отвечайте - ответы будут опубликованы. Найти предыдущие вопросы вы можете на нашем сайте: http://www.delphi-faq.fatal.ru/ или в спец-выпусках рассылки.


Статья по Delphi.

Извините, сегодня ничего не приготовил.


Присылайте свои статьи по адресу delphi-faq@list.ru с темой 'Article' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки. Также вы можете заполнить вот эту форму. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки).


Download.

Из данного раздела Вы можете скачать различные файлы: компоненты, plug-in'ы для Delphi, документацию по программированию, программы, игры, написанные на Delphi и всё остальное... Вы можете добавить свои файлы в данный раздел, будем очень признательны! Чтобы сделать это, пожалуйста, заполните форму на сайте. Когда администратор ответит Вам и даст согласие на добавление файла(ов), тогда Вы их и пришлёте. Убедительная просьба соблюдать все вышеописанные правила.

Новое на нашем сайте:

Название / описание файла
Объём
Ссылки
Статьи
Создание хранителя экрана (Screensaver)
6.75 Кб
Компоненты
WaveAudio- пакет для работы с wave-файлами. Позволяет выполнять любые операции с ними: не только воспроизведение, но и редактирование. Идеальная вещь для создания звукового редактора.
65.2 Кб
Plug-in's
Документация
Список и описание функций RxLib.
11.1 Кб
Исходники
Flame - Пламя с использованием DirectDraw.
30.4 Кб
Программы
Игры
     


Дружественные сайты.

Адрес раздела на сайте: http://www.delphi-faq.fatal.ru/modules.php?name=Friends.

Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите наш баннер на своём сайте. Подробнее о том, как это сделать, можно прочитать на странице данного раздела на нашем сайте (ссылка дана чуть выше). Узнать о всех наших друзьях более подробно вы сможете на той же странице...

http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом.

http://www.basic.webhost.ru/ - Программирование на Basic & Visual Basic. На сайте Вы найдете множество примеров, статьи, исходники, ActiveX, а также многое другое!

http://www.sashook.nm.ru/ - Игры, флешки, обои, компьютерные приколы.

http://www.ssgroup.fatal.ru/ - Delphi 39. Ресурс для программистов. Статьи, исходники, компоненты, учебники, справочники, FAQ, программы и многое другое.

Рассылки со сходной тематикой:

Рассылки Subscribe.Ru
Интернет для Delphi-программиста
Рассылки Subscribe.Ru
Программирование в Delphi 7

 


Юмор.

Почему-то фраза "Профессор завалил студента на экзамене" звучит совершенно обыденно, а вот "Студент завалил профессора после экзамена" вызывает бурную реакцию.

* * *

Если вы, без малейших затрат и без всякого риска хотите сделать много $? Тогда нажмите левой рукой кнопку Shift, а правой быстро нажмите три раза четверку.

* * *

Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы уже пьяные.

* * *

"Незаменимых людей нет" - любил поговаривать директор. Все боялись - и только один программист не мог спрятать кривую улыбку...

* * *

Новости компьютерного бизнеса. Процессор Аthlоn 2400, фирмы АМD, уверенно лидирует на рынке бытовых нагревательных приборов...

* * *

Двое общаются в чате:
Он:
- Ты, наверное, очень красивая.
Она:
- (кокетливо) Почему ты так думаешь?
Он:
- Только так природа могла компенсировать такую тупость.

* * *

- Доктор, у меня по экрану монитора все время ездят паровозики.
- Ну, батенька, может быть, это заставка такая.
- Не знаю, доктор, но они весь потолок закоптили!

* * *

Просыпается утром хакер с бодуна, открывает глаза - рядом классная девушка:
- Опаньки, обнаружено новое устройство ввода-вывода...

* * *

Если однажды ты пpидя домой не сможешь войти в системy с админскими пpавами - значит дети yж выpосли...


Присылайте свои анекдоты по этой ссылке: Delphi-FAQ@list.ru и они обязательно будут опубликованы!

Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу!
Если вы не нашли ответа на свой вопрос, не отчаивайтесь! Ведь количество подписчиков постоянно растёт и, наверняка, найдётся тот человек, который поможет вам!
На сегодня всё. До встречи через неделю! Ведущий рассылки, Андрей.

 

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphifaq
Отписаться

В избранное