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

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


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

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

Выпуск № 691
от 26.12.2006, 12:05

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


Вопрос № 67822: Уважаемые эксперты, подскажите пожалуйста, как сделать программу, чтобы она работала в Word'е, автоматически переводила курсор по закладкам подряд и вставляла текст в позицию курсора. Заранее благодарен....
Вопрос № 67931: Господа эксперты! Помогите составить SQL-запрос. Имеются две таблицы - клиенты и и х личные дела (кейсы) CLIENTS =============== ClID NAME =============== 1 Вася 2 Петя 3 Шура 4 Люся CASES<br...
Вопрос № 67960: Доброго времени суток! У меня 2 вопроса следующего содержания: 1. В компоненте TreeView я хотел бы использовать возможность выбора элемента дерева правой кнопкой мыши. Там есть свойство RightClickSelect, при установке значения которого ...
Вопрос № 67964: Здравствуйте! Как перехватить процедуру выключения ПК, чтобы подчить ей какую - либо другую процедуру, например удаление файла?...
Вопрос № 67967: Как можно перевести PSD файл в JPG?...

Вопрос № 67.822
Уважаемые эксперты, подскажите пожалуйста, как сделать программу, чтобы она работала в Word'е, автоматически переводила курсор по закладкам подряд и вставляла текст в позицию курсора. Заранее благодарен.
Отправлен: 20.12.2006, 12:34
Вопрос задал: Фёдоров, Иван, Сергеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: VaNuk
Здравствуйте, Фёдоров, Иван, Сергеевич!
Ищи справку по закладке servers больше ничем не могу помочь потому что сам ищу !
Ответ отправил: VaNuk (статус: 3-ий класс)
Ответ отправлен: 20.12.2006, 17:01

Отвечает: _Alex_
Здравствуйте, Фёдоров, Иван, Сергеевич!
Во первых поместите на форму TWordApplication с вкладки Servers.
После этого для работы с закдадками используйте свойство ActiveDocument.Bookmarks компонента TWordApplication.
Чтобы перейти на закладку используйте: WordApplication.ActiveDocument.Bookmarks.Item(Index).Select;
где Index переменная типа OleVariant содержащая номер закладки или её имя.
А чтобы печатать текст: WordApplication.Selection.TypeText('Ваш текст');
Насчет документации. Как справочник по функциям и Microsoft Word Visual Basic Reference может подойти. Но лучше закачай какую-нибудь книгу типа "Василий Корняков. Программирование документов и приложений MS Office в Delphi". Лежит в интернете.
---------
Век живи - век учись
Ответ отправил: _Alex_ (статус: 1-ый класс)
Ответ отправлен: 20.12.2006, 18:57


Вопрос № 67.931
Господа эксперты!
Помогите составить SQL-запрос.

Имеются две таблицы - клиенты и и х личные дела (кейсы)

CLIENTS
===============
ClID NAME
===============
1 Вася
2 Петя
3 Шура
4 Люся

CASES
==================================
CsID ClID CsNum CsDat Active
==================================
1 1 54 12.05.06 False
2 1 98 01.08.06 True
3 3 18 13.01.05 True
4 4 105 18.11.06 False

У клиента может быть один или несколько кейсов, может и не быть ни одного.
Если кейсов несколько, только один из нх может быть активным.
Запрос должен выдать полный список клиентов (без повторов) с их активными
кейсами, если такие есть:

==========================================
Name ClID CsNum CsDat
==========================================
Вася 1 98 01.08.06
Петя 2 Null Null
Шура 3 18 13.01.05
Люся 4 Null Null
Спасибо.

Vitaly Grobshtein
Отправлен: 21.12.2006, 03:39
Вопрос задал: Vitaly (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Синельников Сергей
Здравствуйте, Vitaly!

Если допустить, что у одного клиента не может быть двух Active=True только потому, что этого не может быть никогда :), то запрос будет такой:

SELECT * FROM CLIENTS A LEFT OUTER JOIN CASES B ON (A.CLID=B.CLID AND ACTIVE='TRUE') или

SELECT * FROM CLIENTS A LEFT OUTER JOIN CASES B ON (A.CLID=B.CLID AND ACTIVE) или

SELECT * FROM CLIENTS A LEFT OUTER JOIN CASES B ON (A.CLID=B.CLID AND ACTIVE=TRUE)

все зависит от Вашей СУБД.
Ответ отправил: Синельников Сергей (статус: 2-ой класс)
Ответ отправлен: 21.12.2006, 06:20
Оценка за ответ: 5
Комментарий оценки:
Именно так.
Я уже и сам допер.
Спасибо.


Вопрос № 67.960
Доброго времени суток!
У меня 2 вопроса следующего содержания:

1. В компоненте TreeView я хотел бы использовать возможность выбора элемента дерева правой кнопкой мыши. Там есть свойство RightClickSelect, при установке значения которого в "true", я могу "выделять" элемент. Но только визуально, т.к. маркер селекта вроде, фокусной канвы, остается на элементе предыдущем.

2. А второй вопрос такой, как мне сделать перемещение элементов дерева вниз-вверх? Т.е. перемещать их по дереву? Я пробывал изпользовать MoveTo, но, к сожалению так и не понял принцип.:(

Заранее благодарен за помощь!:)
Отправлен: 21.12.2006, 10:58
Вопрос задал: TYRARGO (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: Gladiator
Здравствуйте, TYRARGO!
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var Node: TTreeNode;
begin
if Assigned(TreeView1.GetNodeAt(X,Y)) then begin
Node:=TreeView1.GetNodeAt(X,Y);
Node.Selected:=True;
end;
end;
Ответ отправил: Gladiator (статус: 7-ой класс)
Ответ отправлен: 21.12.2006, 13:58

Отвечает: Mexes
Здравствуйте, TYRARGO!
1. Оставляем RightClickSelect=true, пишем обработчик OnMouseUp:

if TreeView1.Selected<>nil then
begin
TreeView_SelectItem(TreeView1.Handle,TreeView1.Selected.ItemId);
end;

2. Перемещение выделенного элемента вверх (в вопросе элементы, надеюсь, адаптируешь):

var Node,NodePrev:TTreeNode;
Expanded:Boolean;
begin
Node:=TreeView1.Selected;
if Node=nil then exit;
NodePrev:=Node.getPrevSibling;
if NodePrev=nil then exit;
TreeView1.Items.BeginUpdate;
Expanded:=Node.Expanded;
Node.MoveTo(NodePrev,naInsert);
Node.Expanded:=Expanded;
Node.MakeVisible;
TreeView1.Items.EndUpdate;
end;

Перемещение вниз:
var Node,NodeNext,NodeNext2:TTreeNode;
Expanded:Boolean;
begin
Node:=TreeView1.Selected;
if Node=nil then exit;
NodeNext:=Node.getNextSibling;
if NodeNext=nil then exit;
TreeView1.Items.BeginUpdate;
NodeNext2:=NodeNext.getNextSibling;
Expanded:=Node.Expanded;
if Assigned(NodeNext2)
then Node.MoveTo(NodeNext2,naInsert)
else Node.MoveTo(NodeNext,naAdd);
Node.Expanded:=Expanded;
Node.MakeVisible;
TreeView1.Items.EndUpdate;

Чтобы видеть выделенный элемент, если фокус не на дереве, удобно поставить HideSelection=false
Ответ отправил: Mexes (статус: 6-ой класс)
Ответ отправлен: 21.12.2006, 14:03


Вопрос № 67.964
Здравствуйте!
Как перехватить процедуру выключения ПК, чтобы подчить ей какую - либо другую процедуру, например удаление файла?
Отправлен: 21.12.2006, 11:15
Вопрос задал: KuchumHan (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: KiberZero
Здравствуйте, KuchumHan!

При закрытии приложения (используя системное меню или вызывая метод закрытия формы), возникают следующие события:

FormCloseQuery - действие по умолчанию, устанавливает переменную CanClose в значение TRUE и продолжает закрытие формы.
FormClose
FormDestroy
Если приложение активно и вы пытаетесь завершить работу Windows (Shut Down), происходят следующие события (с соблюдением последовательности):

FormCloseQuery
FormDestroy
Мы видим, что метод FormClose в этом случае не вызывается.

Что же происходить при попытке завершить работу Windows:

Windows посылает сообщение WM_QUERYENDSESSION всем приложениям и ожидает ответ.
Каждое приложение получает сообщение и возвращает одну из величин: не равную нулю - приложение готово завершить свою работу, 0 - приложение не может завершить свою работу.
Если одно из приложений возвращает 0, Windows не завершает свою работу, а снова рассылает всем окнам сообщение, на этот раз WM_ENDSESSION.
Каждое приложение должно снова подтвердить свою готовность завершить работу, поэтому операционная система ожидает ответа TRUE, резонно предполагая, что оставшиеся приложения с момента предыдущего сообщения закрыли свои сессии и готовы завершить работу. Теперь посмотрим, как на это реагирует Delphi-приложение: приложение возвращает значение TRUE и немедленно вызывает метод FormDestroy, игнорируя при этом метод FormClose. Налицо проблема.
Завершение работы Windows.
Первое решение проблемы: приложение Delphi на сообщение WM_QUERYENDSESSION должно возвратить 0, не дав при этом Windows завершить свою работу. При этом бессмысленно пытаться воспользоваться методом FormCloseQuery, поскольку нет возможности определить виновника завершения работы приложения (это может являться как результатом сообщения WM_QUERYENDSESSION, так и просто действием пользователя при попытке закрыть приложение).

Другое решение состоит в том, чтобы при получении сообщения WM_QUERYENDSESSION самим выполнить необходимые действия, вызвав метод FormClose.
В приложении приведён пример,посмотрите,проверил,работает.

Удачи!

Приложение:

Ответ отправил: KiberZero (статус: 7-ой класс)
Ответ отправлен: 22.12.2006, 01:25
Оценка за ответ: 5
Комментарий оценки:
незнаю как оно будет в деле, но ставлю 5
С наступающим Новым годом!!!


Вопрос № 67.967
Как можно перевести PSD файл в JPG?
Отправлен: 21.12.2006, 11:21
Вопрос задал: Томша Павел (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Gh0stik
Здравствуйте, Томша Павел!

Привожу пример перевода PSD файл в JPG, саму программу отбражения PSD-файла взял с портала delphisources.ru, код был написан многоуважаемым Фленовым Михаилом aka Horrific.

Я же просто добавил процедурку для сохранения в JPG-формат...


user jpeg;
..............

procedure TForm1.Button2Click(Sender: TObject);
var jp:TJPEGImage;
begin
if SaveDialog1.Execute then
begin
jp:=TJPEGImage.Create;
jp.Assign(Image1.Picture.Bitmap);
jp.SaveToFile(SaveDialog1.FileName);
jp.Free;
end;
end;


В приложении смотрите весь код... (прикрепил архив - 18 587 байт).

Good Luck!!!

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Практикант)
Ответ отправлен: 21.12.2006, 12:33
Оценка за ответ: 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.38 от 20.12.2006
Яндекс Rambler's Top100

В избранное