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

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

  Все выпуски  

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


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

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


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

На опрос о публикации e-mail'а откликнулись как всегда единицы, а именно 14 человек. Самое интересное: голоса разделилсь ровно поровну. Один из читателей высказал идею о том, что иногда человек, задававший вопрос, может захотеть что-то дополнительно уточнить у того, кто ответил на его вопрос. Если адреса почтового ящика нет, то он не сможет этого сделать и будет вынужден задать ещё один вопрос в рассылку. В связи с этим, как e-mail'ы публиковались, так они и будут публиковаться.

Также хочу сказать по поводу форума... Он открыт уже почти две недели, но там пока открыто всего несколько тем, в которых немного ответов. Господа, давайте уважать друг друга! Если то, что я делаю, вообще никому не нужно и неинтересно, то я серьёзно задумаюсь о судьбе этого проекта. Зачем мне всё это делать, стараться, если никто не оценит этого? Объясните мне, зачем...

И ещё насчёт ответов на вопросы... Многие отвечают на вопросы, спустя неделю, а то и больше. В результате, часто эти ответы просто "слизаны" с ответов других, т.к. рассылка с ответами уже была на этой неделе. Публикуются точно такие же ответы, какие уже были, но с другим порядком слов... В связи с этим вводится новое правило: ответы на вопросы принимаются вплоть до следующего выпуска рассылки. После этого ответы уже не будут засчитываться. В основном, наша рассылка выходит по выходным (в субботу или воскресенье). Старайтесь отвечать в будние дни.


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


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


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

Место
Имя
Кол-во баллов
Место
Имя
Кол-во баллов
1.
скрыто
скрыто
6.
63 балла
2.
193 балла
7.
58 баллов
3.
187 баллов
8.
53 балла
4.
163 балла
9.
50 баллов
5.
115 баллов
10.
39 баллов


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

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


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

93. Доброго времени суток! У меня два вопроса. 1 - как сделать так, чтобы при вводе текста в Edit, если нажимается Enter ?выполнялось некое действие. 2 - как в Delphi написать программу, осуществляющую обработку собственных скриптов, а то в Rambler-е все ссылки на PHP и Perl. Заранее благодарен. [Ответить].

94. Я хотел узнать, есть ли функции, переводящие строку, в которой записано математическое выражение, в какую-либо последовательность действий для компьютера. Если есть, пожалуйста, объясните, как ей пользоваться. [Ответить].

95. Как сделать программу для отправки и получения e-mail? [Ответить].

96. Как из unit-файла ".pas" создать ".dcu"? [Ответить].

97. Подскажите, пожалуйста, есть ли где русифицированный файл помощи для Дельфи любой версии? [Ответить].

98. Помогите пожалуйста, как заставить InstallShield Express for Delphi7 понимать русский язык? [Ответить].

99. Я начинающий програмист... Я создал программу для просмотра файлов с расширением dat, sys, cpp. Заинсталировал ее, установил, вроде все нормально... настроил... Но вот проблема в том, что при щелчке по файлу с расширением dat, она сразу не отображает его содержимое... Помогите, плииз, подскажите, что мне в ней прописать, и как, чтобы она при щелчке сразу отображала содержимое файла. [Ответить].

100. У меня Делфи 7, компоненты совсем не могу установить - выходит сообщение "фатальная ошибка". Наверно из-за того что я установил русификатор? [Ответить].

101. Где взять ADO2 под Delphi 6 - для работы с Oracle 8. И как ее установить в Delphi 6? [Ответить].

102. Здравствуйте уважаемые эксперты! Прошу Вас помочь разобраться в таком вопросе: я пытаюсь сделать файл-серверную базу данных Paradox. В принципе должно быть несколько десятков таблиц (пока сделал 4 и они ещё не наполнены данными). Также делаю в Дельфи 7 формы для визуализации данных (MDI). В главной форме данные не визуализируются (так задумано), а виз-ся они должны в новом окне и в окне с названием \"Все заявки\". Так вот в окне \"Все заявки\" эти таблицы как раз и не появляются. Вроде бы по книге (Фаронов, \"Прогр-е баз данных в Дельфи 7\") всё делал правильно. На форме два GRIDa, вверху и внизу. В верхнем должна быть видна таблица Allsell.db, в нижнем - Allbuy.db. Эти таблицы являются \"master\" для Bitsell.db и Bitbuy.bd (а те, соответственно, \"detail\" и таких дочерних detail - таблиц должно быть в принципе много, а в Allsell.db и в Allbuy.db должны храниться все данные вообще (по продаже и покупке) и визуализироваться как раз в форме под названием \"Все заявки\"). Я пока не связывал таблицы связью master - detail. Однако в инспекторе объектов в свойстве Data source не появляются эти базы, поэтому связать их с GRIDaми не могу. Когда делал похожий учебный пример по книге - была та же история - у Фаронова всё получилось, а у меня нет. Прошу Вас, помогите, пожалуйста, разобраться. Для наглядности я прислал проект в zip-архиве (350 кб.). Заранее Вас благодарю! [Ответить]. [От ведущего: присланный проект скачать пока неоткуда].

103. Здравствуйте, появился вопрос - можно ли использовать шейдеры в OpenGL и если да то как? [Ответить].



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

89. (Изменение иконки конечного exe-файла). [Отвечает: Ефим]: Попробуй меню Project Options вкладка Aplication там есть кнопка Load Icon…, и выбирай какую хочешь, мне этого вполне хватает.

[Отвечает: PWL]: Элементарно... 1. Project => Options => Application => Load Icon... 2. Object Inspector => Icon...

[Отвечает: Iron Monk]: Меню: Project => Options...=> Application => Load Icon... и выбираете нужную вам иконку.

[Отвечает: Dron]: Нужно зайти в: Project - Options - Application - Load Icon... и выбрать нужную иконку, которая и будет присвоена exe-файлу.

[Отвечает: Садовников Владимир]: Project->Options... Вкладка Application, кнопка Load Icon. Выбираешь ту иконку, которая по душе. Я ещё на всякий случай копирую в папку с исходниками саму иконку (мало ли кому потом понадобится эта иконка - чтобы из файла ресурсов не выдирать).

[Отвечает: Igor]: Подменить иконку очень просто: Заходите в меню Проект > Опции , потом на вкладку "Приложение". Там, кроме заголовка приложения, можно сменить иконку. Нажмите кнопку "Выбрать" напротив рисунка текущей иконки и укажите ico-файл с новой иконкой.

[Отвечает: mfred]: На Делфи 7 в папке где у тебя проект ищешь файл *.res. Открываешь его через Image Editor, который вместе с Делфи идет и там уже либо сам рисуешь, либо вставляешь. Перед этим удали в корзину ехе'шник. Когда все это сделал, запускаешь Делфи и заново компилируешь.

[Отвечает: VeroLom]: Меню Project => Options. Там на закладке Application выбираешь нужную иконку.

[Отвечает: Барабанов Виктор]: Project,options,application выбираешь иконку и Load icon. Всё :)

[Отвечает: Sandro]: Зайди в свойства проекта, там есть строка "иконка приложения" - выбери, что тебе нужно.

[Отвечает: mvp]: Project->Options... Вкладка Application и кнопка LoadIcon.

[Отвечает: Марина]: Самым простым способом установить приложению свою иконку является: указать нужный файл на вкладке Application окна Project - Options. Если же вам нужна смена иконки в runtime, то можно использовать свойство Application.Icon. Например, так: Application.Icon.LoadFromFile(FileName); Посмотрите справку по Application.Icon. Там есть готовый пример загрузки иконки по выбору пользователя во время выполнения программы.

[Отвечает: Feniks]: Дык, элементарно... Меню Project -> Options или Ctrl + Shift + F11. В появившемся окне Настроек Проекта выбираешь вкладку Application. А в этой вкладке есть кнопка "Load Icon" и она там же отображается. Теперь перебилдиваешь весь проект и ... воля...

[Отвечает: Дмитрий]: Это можно сделать несколькими способами. Заходите Project>Options>Application>Load Icon и загружаете любую какую захотите, также можно нарисовать свою иконку в Image Editor, который поставляется вместе с Дельфи. Также форме через инспектор или программно можно назначить иконку.

[Отвечает: Budkevich Evgeniy]: Изменить иконку можно так: Project->Options, закладка Application -> кнопка Load Icon...

[Отвечает: Антон]: Для замены стандартной иконки нужно открыть пункт меню Project/Options... В появившемся диалоговом окне выбрать вкладку Application, нажать на кнопку Load Icon и выбрать любой понравившийся Вам файл с расширением *.ico. А если выбрать пункт меню Tools/Image Editor, то в появившемся редакторе картинок/иконок можно самому даже нарисовать даже иконку и возмоможно даже свой курсор для мышки, который потом можно прицепить в свою даже программу 8-)) А еще есть специальная программа для рисования полноцветных иконок и анимированных курсоров - "Microangelo 98", дистриб весит 1,35 Мб. Если надо - могу скинуть.

[Отвечает: Dasha]: В пункте меню Project-> Options -> Application есть Load Icon.

92. (Блокировка системных комбинаций клавиш). [Отвечает: PWL]: Подавить реакцию Windows на CTRL+ALT+DEL, ALT+TAB, CTRL+ESC...

В некоторых случаях (например, при работе в полноэкранном режиме, показе своей презентации или экранной заставки ...) бывает полезно заблокировать перечисленные комбинации клавиш. Они блокируются при работе системы в режиме "экранная заставка" , который в свою очередь несложно включить и выключить:

// Включение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
// Выключение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);

[Отвечает: Dasha]: Для Windows 9x: Ctrl+Alt+Del:

var
i: integer;
begin
i:=0;
SystemParametersInfo(SPI_SETFASTTASKRUNNING, 1, @i, 0);
end;


Alt+Tab:
var
i: integer;
begin
i:=0;
SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @i, 0);
end;

Alt+F4 можно отключить перехватом клавиш, но работать оно будет только на самой форме:

var
Form1: TForm1;
AltPress: bool;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
KeyPreview:=TRUE;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_MENU then
AltPress:=true;
if Key=VK_F4 then
if AltPress=true then
begin
key:=0;
ShowMessage('Alt+F4');
end;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_MENU then
AltPress:=false;
end;

[Отвечает: Gregory Mail]: Попробуйте сделать это с помощью функции SystemParametersInfo, где 2-м или 3-м (точно не помню, извиняйте...) параметром передать значение SPI_SCREENSAVERRUNNING, а после него 0 или 1 (выкл/вкл).

34. (Озвучивание текста программой). [Отвечает: Gin]: Попробуйте поискать здесь: http://www.gigabyte.iatp.org.ua/.

86. (Книга по Delphi, рассчитанная на новичка). [Отвечает: alexlazer]:
1. Фаронов В.В. Delphi 4. Учебный курс. - М.: "Нолидж", 1999. - 464 с., ил.
2. Баженова И.Ю. Delphi 5. Самоучитель программиста. - М.: КУДИНЦ-ОБРАЗ, 2000. - 336 с.
3. Баас Р., Фервай М., Гюнтер Х. Delphi 5 для пользователя: пер. с нем. - К.: Издательская группа BHV, 2000. - 496 с.: ил.
4. Александровский А.Д. Delphi 4. Шаг в будущее. - М.: ДМК, 1999. - 528 с., ил.
(последняя книга слегка посложнее).

[Отвечает: Садовников Владимир]: Насчёт книги на новичка точно не скажу, но знаю достаточно хорошие:
- учебник: А.Я. Архангельский "Программирование в Delphi 5",
- справочник: А.Я. Архангельский "Delphi 5".

83. (Рисование на рабочем столе). [Отвечает: Feniks]: Если речь идет о рисовании на рабочем столе, то вот пример из рассылки "X-Program ПО, новости "сайта и программирование в Delphi7" (comp.soft.prog.program):

Осуществить это можно очень простым способом, напишем процедуру для рисования:


procedure TForm1.DeskTopPaint(Sender:Tobject);
var
DeskTop:TCanvas;
begin
DeskTop:=TCanvas.Create;
try
DeskTop.Handle:=GetDC(0);// Получим Handle Рабочего стола
И ВСЕ !!! Далее работаем с DeskTop как с обычным TCanvas.
Например поместим текущую дату:
DeskTop.Brush.Style:=bsClear; // Устанавливаем тип кисти
With DeskTop.Font do // Подбираем шрифт
Begin
Color:=clRed;
Size:;
Name:='Times New Roman';
Style:=[fsBold];
end;
DeskTop.TextOut(10,10,'Сегодня : '+DateToStr(Now));
ReleaseDC(0, DeskTop.handle);
finally
DeskTop.Free; // Уберем за собой
end;
DeskTop.Free;
end;


Единственный минус данного способа - другие формы затирают надпись. Поэтому есть несколько других методов. Это прозрачная форма и помещение изображения вместо бакграунда ( так делают почти все программы календари ). Для смены обоев предусмотрена функция Win32API:
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar('Path'),SPIF_SENDWININICHANGE);Где Path - путь к BMP файлу.
По умолчанию устанавливает обои 'В центре', а как поставить 'Размножить' я так и не нашел. Если вы захотите убрать обои, то в параметре Path надо указать несуществующий файл.
При работе часто требуется обновить рабочий стол, по умолчанию это делается клавишей F5. В Delphi это делается это вот такой функцией:
SendMessage(FindWindow ('Progman', 'Program Manager'), WM_COMMAND, $A065, 0);
Функцией FindWindow находим, и получаем handle на нужное окно.
Первый параметр - class name / название класса /, а второй - window name / название окна /
SendMessage - функция, для посылания сообщений окну или окнам, вот ее параметры :
SendMessage(
HWND hwnd, // handle на посылаемое окно, его мы нашли функцией FindWindow
UINT uMsg, // сообщение для посылки
WPARAM wParam, // первый и
LPARAM lParam // второй параметры.

[Отвечает: mfred]: На зкране не знаю, на рабочем столе пожалуста:

procedure TForm1.Button1Click(Sender: TObject);
Var
dc : hdc;
begin
dc := GetDc(0);
MoveToEx(Dc, 0, 0, nil);
LineTo(Dc, 300, 300);
ReleaseDc(0, Dc);
end;

84. (Отлавливание соединения и отключения интернета). [Отвечает: mfred]: Вот есть пример, недавно сам им пользовался:

procedure TForm1.Button1Click(Sender: TObject);
var
CommPort : string;
hCommFile : THandle;
ModemStat : DWord;
begin
{Здесь вместо СОМ2 ставиш тот порт который надо, если надо}
CommPort := 'COM2';
{Open the comm port}
hCommFile := CreateFile(PChar(CommPort), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hCommFile = INVALID_HANDLE_VALUE then
begin
ShowMessage('Unable to open '+ CommPort);
exit;
end;
{Get the Modem Status}
if GetCommModemStatus(hCommFile, ModemStat) <> false then begin
if ModemStat and MS_CTS_ON <> 0 then
ShowMessage('The CTS (clear-to-send) is on.');
if ModemStat and MS_DSR_ON <> 0 then
ShowMessage('The DSR (data-set-ready) is on.');
if ModemStat and MS_RING_ON <> 0then
ShowMessage('The ring indicator is on.');
if ModemStat and MS_RLSD_ON <> 0 then
ShowMessage('The RLSD (receive-line-signal-detect) is on.');
end;
{Close the comm port}
CloseHandle(hCommFile);
end;

79. (Программная смена обоев на рабочем столе). [Отвечает: mfred]: Привет Всем! Изменить обои можно функцией SystemParametersInfo() переслав ей в качестве параметров константу SPI_SETDESKWALLPAPER и имя нового файла обоев:

procedure TForm1.Button1Click(Sender: TObject);
begin
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar('C:\zx.BMP'),SPIF_SENDWININICHANGE);
end;

87. (Глюки оболочки Delphi). [Отвечает: Igor]: Да нет: у меня ничего в Delphi6 вроде не глючит. Иногда, правда, вылетают ошибки, типа Access Violation, но перезагрузка сразу помогает. А с run-time библиотеками ошибок пока не было, и с code autocomplete, т.е. автозавершением тоже. Может помочь переустановка Delphi.

81. (Загрузка DLL-библиотек). [Отвечает: Садовников Владимир]: Грузи библиотеку динамически функцией LoadLibrary, получай адреса функций и пользуй их, если возникают такие проблемы. В любом случае DLL должна подсоединиться, если она находится в папке windows\system.

91. (Как сделать игру "Кубик-Рубик"). [Отвечает: Садовников Владимир]: Можно. Главное, чтобы энтузиазм был и желание. Есть много способов, и надо обязательно решить, каким образом надо организовать интерфейс и сам геймплей. Заметь, что даже игрушка с несколько неудобным интерфейсом может на месяцы притянуть внимание, если сама её начинка будет потрясающей. Так что старайся и делай, Delphi - достаточно хороший инструмент для этого.

[Отвечает: Dron]: Конечно можно! Но если ты хочешь, чтобы другие писали игру за тебя - не дождёшься. Храни в двумерном массиве расположение цветов на гранях: var Colors: Array[1..6] Of Array[1..9] Of TColor; Так как граней 6, поэтому и в массиве будет 6 элементов - это грани. На каждой грани по 9 квадратов (если не ошибаюсь, именно 9, но может и 16 - разные кубики-рубики бывают :)), тут храним цвета обычным TColor. Ну а дальше думай сам. Когда имитируешь поворот стороны, меняй соответствующие элементы массива и после каждого хода проверяй на совпадение цветов на всех гранях. В плане реализации графики - как фантазии хватит. Можно сделать обычный "плоский" вид, а можно и с помощью DirectX или OpenGL рисовать.


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


Статья по Delphi.

В связи с обновлением сайта новых статей нет.

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


Download.

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

Название / описание файла
Объём
Ссылки
Новых файлов на сайте нет (причина описана в начале рассылки).


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

Адрес раздела на сайте: 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

 


Юмор.

- Этослужбатехническойподдержки?Уменяпробелзапал,чтоделать?
- Hастоящие_программисты_пробелами_не_пользуются!

* * *

В компьютерную фирму приходит тетка колоритной деревенской внешности:
- Я тут у вас коврик для мышей купила. Так вот, - мыши по нему бегают и не дохнут. Может, его водой надо поливать?

* * *

О человеке можно судить по его Temporary Internet Files...


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

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

 

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

В избранное