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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

Народное голосование ПРЕМИИ РУНЕТА-2007!
Голосуем за RusFAQ.ru >>

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

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

Выпуск № 988
от 24.11.2007, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 446, Экспертов: 57
В номере:Вопросов: 4, Ответов: 15


Вопрос № 110117: Здравствуйте. Я хочу из Delphi экспортировать некоторые данные, которые храняться в базе данных, в существующий документ Word. Мне просто в определенные строки документа нужно вставлять определенное значение из базы данных. Подскажите как мне это сде...
Вопрос № 110135: Здравствуйте! Подскажите, пожалуйста, как мне перехватить для обработки событие нажатия на "крестик" в верхнем правом углу формы? При нажатии на него программа закрывается некорректно. Или хотя бы сделать его недоступным пользователю. Спаси...
Вопрос № 110149: Здравствуйте! Помогите, пожалуйста, сделать более удобный для пользователя интерфейс. Необходимо, чтобы переход курсора по окошкам Edit на форме осуществлялся с помощью клавиши Enter. Как Это реализовать? Спасибо....
Вопрос № 110181: Подробней будет так, создал dll Par adox7 в ней данные сотрудников, а именно их дни рождения, вот как бы мне сделать, так, чтобы по истечению любой из дат программка бы оповещала меня об этом...

Вопрос № 110.117
Здравствуйте. Я хочу из Delphi экспортировать некоторые данные, которые храняться в базе данных, в существующий документ Word. Мне просто в определенные строки документа нужно вставлять определенное значение из базы данных. Подскажите как мне это сделать(желательно с примером кода). Заранее благодарен.
Отправлен: 19.11.2007, 11:43
Вопрос задал: Orz (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Orz!

Для этого лучше всего использовать компонент EkRTF.

Он берет за основу шаблон в формате rtf, в котором вместо значений программист записывает переменные. После чего из базы данных в эти переменные записываются значения.
Это удобно, так как конечный пользователь может в любой момент изменить шаблон с помощью Word.
В компоненте хороший хелп и набор примеров.
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 19.11.2007, 12:02
Оценка за ответ: 5
Комментарий оценки:
Спасибо за отличную идею

Отвечает: Degtyarev Anton
Здравствуйте, Orz!
Вам потребуется шаблон вашего документа с определёнными метками в тексте где вы захотите вставлять данные нпример #ИНН# а также исходный фаил домустим txt который будет содержать значения подставляемые в шаюлон приблизительный код выглядит вот так

фаил формируется следующим образом
var
List :Tlist;
begin
List.Add('ИНН =' + 'Получить значение ИНН из базы';

aList.SaveToFile(Path + aFileName + '.txt');
end;

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

Приложение:

---------
Сколько волка не корми, а слон всё равно толще

Ответ отправил: Degtyarev Anton (статус: 2-ой класс)
Ответ отправлен: 19.11.2007, 12:11
Оценка за ответ: 4
Комментарий оценки:
Это мне не подходит, тк данные я буду заносиьт из БД

Отвечает: Mishell
Здравствуйте, Orz!
можно экспорптировать данные через OLE или с пом. компонента TWordApplication (есть в Д7, наверно и в др. версиях) - кому как нравится.
вот тут есть примеры:
http://delphiworld.narod.ru/base/sg_to_msword.html
http://delphiworld.narod.ru/base/export_to_word.html
http://delphiworld.narod.ru/base/delphi_and_word_ole_automation.html
...
Ответ отправил: Mishell (статус: 7-ой класс)
Ответ отправлен: 19.11.2007, 12:13
Оценка за ответ: 5
Комментарий оценки:
Спасибо за инфу


Вопрос № 110.135
Здравствуйте! Подскажите, пожалуйста, как мне перехватить для обработки событие нажатия на "крестик" в верхнем правом углу формы? При нажатии на него программа закрывается некорректно. Или хотя бы сделать его недоступным пользователю. Спасибо.
Отправлен: 19.11.2007, 13:19
Вопрос задала: Kalina (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Coupler
Здравствуйте, Kalina!
Событие перед закрытием формы - OnCloseQuery:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=False;
end;
Ответ отправил: Coupler (статус: Практикант)
Ответ отправлен: 19.11.2007, 13:30

Отвечает: Vas177
Здравствуйте, Kalina!

Сделать недоступной кнопку закрыть можно так, как указано в приложении

Приложение:

Ответ отправил: Vas177 (статус: 2-ой класс)
Ответ отправлен: 19.11.2007, 13:33

Отвечает: Delph
Здравствуйте, Kalina!

Есть ещё одно событие перед закрытием программы - OnClose. По нему формируется обработчик:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Ваши действия
Action := caNone; //ещё варианты: caHide, caFree, caMinimize.
end;

В моей практике пригождались caNone (проигнорировать нажатие крестика) и caFree (всё-таки закрыть форму, а в случае главной формы - и программу).
---------
Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: Студент)
Ответ отправлен: 19.11.2007, 13:41

Отвечает: Зиновьев Дмитрий Владимирович
Здравствуйте, Kalina!
За кнопки наверху формы (в строке заголовка) отвечает свойство BorderIcons.
Поставьте напротив biSystemMenu значение False
Ответ отправил: Зиновьев Дмитрий Владимирович (статус: 7-ой класс)
Ответ отправлен: 19.11.2007, 13:57

Отвечает: Стома С.С.
Здравствуйте, Kalina!

чтобы не дать пользователю закрыть окно достаточно обработать событие
FormClose переменной Action присваиваем caNone и форма не закроется Action:= caNone;
но введите глобальное условие при котором вы можете правильно закрыть программу т.е Action:= caFree;
в этом обработчике кстати можете поместить код который правильно бы выгружал форму

ниже код запрещающий кнопку закрытия приложения

Приложение:

Ответ отправил: Стома С.С. (статус: 2-ой класс)
Ответ отправлен: 20.11.2007, 18:08


Вопрос № 110.149
Здравствуйте! Помогите, пожалуйста, сделать более удобный для пользователя интерфейс. Необходимо, чтобы переход курсора по окошкам Edit на форме осуществлялся с помощью клавиши Enter. Как Это реализовать? Спасибо.
Отправлен: 19.11.2007, 14:18
Вопрос задала: Kalina (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vas177
Здравствуйте, Kalina!

Самый простой способ:
У компонента TEdit создаём обработчик события OnKeyDown с указанным в приложении содержимым.

В моём примере нажав Enter (VK_RETURN) в поле Edit1 фокус переходит в поле Edit2

Приложение:

Ответ отправил: Vas177 (статус: 2-ой класс)
Ответ отправлен: 19.11.2007, 14:26
Оценка за ответ: 5
Комментарий оценки:
спасибо, так я, пожалуй, и сделаю :)

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

Создаеш собственный обработчик сообщений, и при нажатии Enter переделываеш сообщение в Tab. Ниже пример реализации:

procedure TForm1.FormCreate(sender: TObject);
begin
Application.OnMessage := CustomMessageHandler;
end;

procedure TForm1.CustomMessageHandler(var Msg: TMsg; var Handled: Boolean);
begin
with Msg do
if message = WM_KEYDOWN then
if wParam = VK_RETURN then
wParam := VK_TAB;
end;
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 9-ый класс)
Ответ отправлен: 19.11.2007, 14:32

Отвечает: Зиновьев Дмитрий Владимирович
Здравствуйте, Kalina!
Напишите обработчик события OnKeyDown для каждого Edit'a следующим образом:
if Key = VK_RETURN then //Если нажали Enter
Edit2.SetFocus; // Фокус переходит на Edit2
Ответ отправил: Зиновьев Дмитрий Владимирович (статус: 7-ой класс)
Ответ отправлен: 19.11.2007, 14:32

Отвечает: Mishell
Здравствуйте, Kalina!
можно посылать сообщение WM_NEXTDLGCTL диалоговому окну для того чтоб перевести фокус ввода следующему элементу управления (из списка Tab Order)
SendMessage(Handle, WM_NEXTDLGCTL, 0, 0 );
т.е. следить за нажатием VK_RETURN на форме и при этом отправлять вышеуказанную команду
Ответ отправил: Mishell (статус: 7-ой класс)
Ответ отправлен: 19.11.2007, 14:57

Отвечает: Genia007
Здравствуйте, Kalina! Предлагаю свой код, который я уже использовал не раз.

Приложение:

Ответ отправил: Genia007 (статус: 1-ый класс)
Ответ отправлен: 19.11.2007, 17:01

Отвечает: Стома С.С.
Здравствуйте, Kalina!

отслеживаем нажатие клавиши Enter после чего делаем такую обработку
TEdit(FindComponent('Edit' + IntToStr(i))).SetFocus;
переменную i сделайте глобальной и при перемещении ее по компонентам постоянно увеличивайте в инспекторе объектов установите общий обработчик нажатия клавиши я сделал для первого эдита

Приложение:

Ответ отправил: Стома С.С. (статус: 2-ой класс)
Ответ отправлен: 20.11.2007, 17:55


Вопрос № 110.181
Подробней будет так, создал dll Paradox7 в ней данные сотрудников, а именно их дни рождения, вот как бы мне сделать, так, чтобы по истечению любой из дат программка бы оповещала меня об этом
Отправлен: 19.11.2007, 16:36
Вопрос задал: Sefiros (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Mishell
Здравствуйте, Sefiros!
см. приложение - это пример - Вам придется слегка модифицировать код под свою программу
даже скорее всего Вам надо будет сделать все посвоему,
просто для определения, что дата наступила надо проверить что дата сотрудника меньше Now (текущие дата и время) + к этому надо как-то запомнить, что проверка была произведена
или другой вариант - можно проверять не входит ли Now в интервал времени - например дата сотрудника ±1минута, но тогда программа может не "поймать" заданное время

Приложение:

Ответ отправил: Mishell (статус: 7-ой класс)
Ответ отправлен: 19.11.2007, 17:14
Оценка за ответ: 5


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.64 от 24.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное