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

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 438
от 09.04.2006, 08:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 300, Экспертов: 69
В номере:Вопросов: 7, Ответов: 19


Вопрос № 39264: Здравствуйте уважаемые эксперты! Не могу отловить нажатие Alt+F4, необходимо, чтобы программа не закрывалась по Alt+F4. Использовал такой код: (см прил.), нашел в одном из FAQ'ов, но он не работает :(. Вариант OnCloseQuery => CanClose:=False н...
Вопрос № 39277: Уважаемые эксперты, Как присоединить файл с кодеком к проекту, например, присоединить кодек. Или Разные DLL??...
Вопрос № 39280: Добрый день! Можно ли записывать string переменные в файл в интернете и с помощью какой функции можно закачать файл на сайт? Заранеее спасибо! ...
Вопрос № 39282: Здраствуйте. Подскажите, что не правильно в этом куске кода (в приложении)? Пытаюсь подставить эту процедуру в обработчик OnKeyPress Edit'a, вылетает ошибка: '('expected but ')' found. (Чёт я не пойму чё за error, откуда он взялся?) Как э...
Вопрос № 39304: Здравствуйте, уважаемые эксперты! Мне нужно заполнить определенный участок Canvas при помощи FloodFill Как пользоваться этой функцией: procedure TCanvas.FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle); x,y - внутренняя область...
Вопрос № 39311: Доброго времени суток. Ув. эксперты опять прошу у вас помощи. Закачал с нета компонент ComboBoxEx Но вот как его установит, не знаю. В компоненте есть такие файлы: ComboBoxX.dcr ComboBoxX.dcu ComboBoxX.pas FlatComboBox...
Вопрос № 39326: Доброго здоровья всем! Как отследить открытие ЛЮБЫМ ПРИЛОЖЕНИЕМ диалога Open(Save). Хочу пристроить рядом свою форму, как это сделано в 'ImageFox' (примочка к ACDSee 4.0). Извините, если подобный вопрос уже задавался. Не нашёл... Спас...

Вопрос № 39.264
Здравствуйте уважаемые эксперты!
Не могу отловить нажатие Alt+F4, необходимо, чтобы программа не закрывалась по Alt+F4. Использовал такой код: (см прил.), нашел в одном из FAQ'ов, но он не работает :(. Вариант OnCloseQuery => CanClose:=False не подходит, т.к. при завершении винды программа закрывается. Что посоветуете?

Приложение:

Отправлен: 03.04.2006, 10:49
Вопрос задал: AnD1 (статус: 4-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Jadd
Здравствуйте, And1!
Нужно обработать сообщение WM_QUERYENDSESSION. В дельфи нужно написать обработчик. Выглядеть это будет примерно так:

в объявлении класса:

procedure WMQueryEndSession(var Message: TMessage); message WM_QUERYENDSESSION;

в реализации:

procedure TMyClass.WMQueryEndSession(var Message: TMessage);
begin
//your code here
end;

Успехов.

---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 03.04.2006, 11:17
Оценка за ответ: 5

Отвечает: Евгения
Здравствуйте, And1!
посмотрите еще ответ на вопрос 37894
там несколько вариантов - может что-то подойдет.
Ответ отправила: Евгения (статус: 2-ой класс)
Ответ отправлен: 03.04.2006, 11:18
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, And1!
Пиши обработчик на событие OnClose:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
end;

Еще можеш обработать сообщение WM_QUIT
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 2-ой класс)
Ответ отправлен: 03.04.2006, 11:20
Оценка за ответ: 5

Отвечает: Артём Шегеда
Здравствуйте, And1!

Для того, чтобы приложение закрывалось по завершения сеанса Windows, почитай это:
http://rusfaq.ru/?Step=info&Action=Question&ID=39097

А вообще, отключить Alt+F4 можно, перехватив обработчик сообщения WM_SYSCOMMAND и отфильтровав по команде SC_CLOSE. Подробнее - в справке по Win32 API, раздел "Keyboard Accelerators"
Ответ отправил: Артём Шегеда (статус: 4-ый класс)
Ответ отправлен: 03.04.2006, 11:32
Оценка за ответ: 5

Отвечает: Злоумышленник
Здравствуйте, And1!
Твой код не будет работать, если ты с-во формы KeyPreview не поставил в true (в инспекторе объектов можно это сделать). И я бы вместо MessageBeep(0); Key := 0;
поставил бы просто abort
Ответ отправил: Злоумышленник (статус: 5-ый класс)
Ответ отправлен: 03.04.2006, 21:21


Вопрос № 39.277
Уважаемые эксперты,
Как присоединить файл с кодеком к проекту, например, присоединить кодек. Или Разные DLL??
Отправлен: 03.04.2006, 15:15
Вопрос задал: ErBep (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Артём Шегеда
Элементарно, Ватсон!

Создаёшь файл в каталоге проекта с именем 1.rc, пишешь в нём приблизительно следующее:
FILE1 EXECUTABLE codec.ax
Затем добавляешь этот ресурсный файл к проекту. Проследи, чтобы в каталоге проекта лежал файл codec.ax
В тексте программы пишешь кусок из приложения. После выполнения этого кода у тебя в каталоге приложения появится файл codec.ax

Приложение:

Ответ отправил: Артём Шегеда (статус: 4-ый класс)
Ответ отправлен: 03.04.2006, 16:11

Отвечает: Delphin
Здравствуйте, ErBep!
Я так понял тебе нужно нести вместе с вашим проектом какие0либо файлы?
Сделать это можно с помощью ресурсов. Самый легкий способ - это найти в каталоге с программой файл .res и открыть его в редакторе ресурсов и добавить то что тебе нужно. Мой выбор - Restorator.

Второй способ это создать файл xxx.rc добавить в него слудующие строки:
ИМЯ ТИП ПУТЬ_К_ФАЙЛУ
Например:
codec1 CODEC file.ax

Компилируеш его brcc.exe.

В проект добавляеш:

{$R xxx.res}

Там уже есть такое рядом с глобальным VAR. Тока вместо xxx.res имя_проекта.res

Приложение:

---------
Обращаться в ICQ: 66550088 (Ally) или E-Mail: AvePassion@GMail.Com

Ответ отправил: Delphin (статус: Студент)
Ответ отправлен: 03.04.2006, 18:45


Вопрос № 39.280
Добрый день! Можно ли записывать string переменные в файл в интернете и с помощью какой функции можно закачать файл на сайт? Заранеее спасибо!
Отправлен: 03.04.2006, 16:51
Вопрос задал: Грицай Алексей Юрьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лучников Ю.В.
Здравствуйте, Грицай Алексей Юрьевич!

Загружать файлы на сайт можно через протокол FTP.

Для работы с FTP в Делфи есть копмонент TIdFTP с вкладки Indy Clients.

Исходные коды примеров по работе с компонентами Indy вы можете скачать тут, раздел Downloads.

Запись string в txt-файл, расположенный на сервере можно осуществить так:
Закачиваете нужный файл себе в Memo, добавляете в Memo нужные строки, сохраняете содержимое Memo методом Memo1.Lines.SaveToFile(), полученный файл закачиваете снова на сервер вышеупомянутым способом.

Успехов!
Ответ отправил: Лучников Ю.В. (статус: *Администратор)
Россия, Киров
WWW: Чат Кировской молодежи
ICQ: 176308580
----
Ответ отправлен: 03.04.2006, 17:58
Оценка за ответ: 5

Отвечает: Delphin
Смотря через что ты хочеш выгружать файлы. Большинство хостеров предоставляют доступ к файлам через FTP. Для этого можно легко использовать компонент Indy Clients -> TIdFTP.
Так же можно написать скрипт на PHP или CGI который будет изменять переданный параметром файл на переданное содержимое. Тогда можно использовать тоже компоненты Indy, но для работы с http серверами.
И еще, для того чтобы что-то выгрузить на сервер его нужно перед этим сохранить. Например в типизированный файл. (var F: TextFile )
---------
Обращаться в ICQ: 66550088 (Ally) или E-Mail: AvePassion@GMail.Com
Ответ отправил: Delphin (статус: Студент)
Ответ отправлен: 03.04.2006, 18:36

Отвечает: AnD1
Здравствуйте, Грицай Алексей Юрьевич!
Проще сохранить строковую переменную в файл т.о.:
var
f: TextFile;
s: string;
...
AssignFile (f, 'ИМЯ_ФАЙЛА');
Reset (f); {открываем файл для записи, уничтожаея его содержимое, или можно так: Append (f) - дописать в конец файла}
Writeln (s); {записываем стр. перем.}
CloseFile (f);
А на вторую часть вопроса, Вам уже ответели :), хотя что-нибудь из компонентов еще можно посмотреть здесь - http://www.torry.net/pages.php?s=90
Ответ отправил: AnD1 (статус: 4-ый класс)
Ответ отправлен: 03.04.2006, 18:39
Оценка за ответ: 5


Вопрос № 39.282
Здраствуйте.
Подскажите, что не правильно в этом куске кода (в приложении)?
Пытаюсь подставить эту процедуру в обработчик OnKeyPress Edit'a, вылетает ошибка: '('expected but ')' found. (Чёт я не пойму чё за error, откуда он взялся?)
Как это вылечить?
Спасибо.:)

Приложение:

Отправлен: 03.04.2006, 17:02
Вопрос задал: Yarking (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Yarking!
Ошибка у Вас здесь и должна быть. Когда процедура является методом формы, то Text - это второе наименование свойства Caption формы (опеределено глубоко в VCL). А когда это отдельная процедура, то компилятор не может найти в списке доступных переменных Text, и считает этот идентификатор каким-то типом, приведение к которому не закончено.
Исправление - вместо Text подставить Edit1.Text (для вашего случая). Но вариантов много
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 2-ой класс)
Ответ отправлен: 03.04.2006, 17:10
Оценка за ответ: 5

Отвечает: Проходящий Мимо
Здравствуйте, Yarking!
Процедура TForm3.Edit1KeyPress получает значение text из поля объекта TControl, который есть предком ТEdit. Поэтому, нужно в процедуру DecimalSeparatorKeyPress передавать значение key и text самому, например так:

procedure DecimalSeparatorKeyPress(Text: string; var Key: Char);
begin
if ((Key = DecimalSeparator) or
(Key in [',', '.'])) and
(Pos(DecimalSeparator, Text) <> 0)
then Key := #0;
if not (Key in ['0'..'9', DecimalSeparator, #8])
then Key := #0;
end;

Здесь Key передается в качестве параметра внешней процедурой
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 1-ый класс)
Ответ отправлен: 04.04.2006, 09:29


Вопрос № 39.304
Здравствуйте, уважаемые эксперты!
Мне нужно заполнить определенный участок Canvas при помощи FloodFill Как пользоваться этой функцией: procedure TCanvas.FloodFill(X, Y: Integer; Color: TColor;
FillStyle: TFillStyle); x,y - внутренняя область закрашиваемой поверхности Color -- цвеи границы. а как задать FillStyle? как мне изсестно там указывается цвет и метод закраски.
Спасибо.
Отправлен: 03.04.2006, 22:06
Вопрос задал: Граур Василий Олегович (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгения
Здравствуйте, Граур Василий Олегович!
procedure FloodFill (X, Y: Integer; Color: TColor; FillStyle: Tf illStyle) ; TFillstyle="(fsSurface," fsBorder);
Производит заливку области текущей кистью. Процесс начинается с точки (X, Y). Если режим FillStyle равен fsSurface, то он продолжается до тех пор, пока есть соседние точки с цветом Color. В режиме fsBorder закрашивание, наоборот, прекращается при выходе на границу с цветом Color. Работает примерно как заливка в Paint.

например FloodFill(ClientWidth,ClientHeight,clWhite,fsSurface);
Ответ отправила: Евгения (статус: 2-ой класс)
Ответ отправлен: 03.04.2006, 22:36

Отвечает: Полховский Александр Владимирович
Здравствуйте, Граур Василий Олегович!
Добавлю, что закраска идёт с использованием палитры, установленной для данной канвы (Brush) (Fills an area of the canvas using the current brush). А уже изменяя саму палитру, можно выбрать цвет и стиль заливки (свойствами Bush.Color и Brush.Style). Насколько мне известно, нельзя сделать свой стиль заливки (по крайней мере при использовании процедуры FloodFill), только выбрать из существующих.
Дополню предыдущий ответ:
FloodFill(5, 5, clWhite, fsBorder) - будет заливать область, ограниченную белым цветом, начиная с точки. с координатами (5,5).
FloodFill(5, 5, clWhite, fsSurface) - будет заливать область, имеющую белый цвет, начиная с точки. с координатами (5,5). (Будьте внимательны, так как если пиксель (5,5) не будет белым, то есть clWhite, то закраска не будет произведена. Для этого лучше сначала взять значение цвета точки, с которой начинается закраска, и уже потом поставить его в параметры).
Удачи.
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 04.04.2006, 06:59
Оценка за ответ: 5


Вопрос № 39.311
Доброго времени суток.
Ув. эксперты опять прошу у вас помощи.
Закачал с нета компонент ComboBoxEx
Но вот как его установит, не знаю.
В компоненте есть такие файлы:
ComboBoxX.dcr
ComboBoxX.dcu
ComboBoxX.pas
FlatComboBoxX.dcu
FlatComboBoxX.pas
RES_CBX.RES

Подскажите, как их приладить.

Заранее благодарен.
Алексеев А.В.
Отправлен: 03.04.2006, 22:47
Вопрос задал: Алексеев Александр Владимирович (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Timoshin A.B.
Здравствуйте, Алексеев Александр Владимирович!
Меню Component->New Component. Желательно предварительно скопировать файлы компонента в папку $(DELPHI)Imports.
---------
СЭ отбивает желание, отвечать на вопросы посетителей...
Ответ отправил: Timoshin A.B. (статус: 10-ый класс)
Ответ отправлен: 03.04.2006, 22:56
Оценка за ответ: 5

Отвечает: Евгения
Здравствуйте, Алексеев Александр Владимирович!
http://logic-bratsk.ru/radio/progr/comp_ust/comp_ust.htm
поглядите тут - тут вроде понятно растолковано :)
Ответ отправила: Евгения (статус: 2-ой класс)
Ответ отправлен: 03.04.2006, 23:05
Оценка за ответ: 4

Отвечает: Cheater76
Здравствуйте, Алексеев Александр Владимирович!
"Component" -> "Install component" -> Указываешь pas файл в котором есть
procedure Register;
Выбраешь закладку "Into new Package"
Имя файла пекета указываешь и Ок.
Незабудь пути прописать к файлам в "Environment Option"-> "Library"-> "Library Path"
Ответ отправил: Cheater76 (статус: 3-ий класс)
Ответ отправлен: 03.04.2006, 23:05
Оценка за ответ: 5

Отвечает: Артём Шегеда
Здравствуйте, Алексеев Александр Владимирович!

Возможности скачать компоненту не было, однако, основываясь на опыте, подскажу:
- выбираете в меню "Компоненты" пункт "Установить компонент".
- по умолчанию предлагается установить в пакет dclusr.dpk (пакет пользовательских компонент) - это нормально.
- необходимо указать имя модуля, содержищего код регистрации компоненты (обычно в имени модуля имеется слог REG - например, CompReg.pas), если таких модулей нет, то стоит просмотреть модули на предмет наличия процедуры Register - это верный признак установки.
- нажимаем "ОК" и видим окно пакета с модулями. Файлы с расширением DCR автоматически вносятся в проект - это пиктограммы компонент для отрисовки на палитре и на форме (если компонента невизуальная)
- нажимаем "Компилировать" или "Установить" в окне пакета, соглашаемся с закрытием открытых форм и...
- вуаля: компонента установлена.
В процессе установки могут возникнуть проблеммы, в частности, нехватка модулей, наличие уже установленной компоненты в другом пакете... Но это другая история..
Ответ отправил: Артём Шегеда (статус: 4-ый класс)
Ответ отправлен: 03.04.2006, 23:18
Оценка за ответ: 5


Вопрос № 39.326
Доброго здоровья всем!
Как отследить открытие ЛЮБЫМ ПРИЛОЖЕНИЕМ диалога Open(Save).
Хочу пристроить рядом свою форму, как это сделано в 'ImageFox' (примочка к ACDSee 4.0).
Извините, если подобный вопрос уже задавался. Не нашёл...
Спасибо.
Отправлен: 04.04.2006, 07:32
Вопрос задал: Фомичёв Вячеслав Степанович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: AnD1
Здравствуйте, Фомичёв Вячеслав Степанович!
Необходимо использовать API для работы с окнами. Посмотрите слылки, первая- статья по ф-ям, вторая сорец показывающий работу с окнами.

Приложение:

Ответ отправил: AnD1 (статус: 4-ый класс)
Ответ отправлен: 04.04.2006, 08:13
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.30 (beta) от 09.04.2006
Яндекс Rambler's Top100

В избранное