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

Программирование. Форум !!!

За 2006-02-08

Re: Вывод окна приложения на передний план.

Здравствуйте, Шистеров.

Tuesday, February 7, 2006, 11:24:59 AM, you wrote:

ШП> Здравствуйте!
ШП> Проблема собственнов следующем:
ШП> Прога1 и Прога2 связаны внешним СОМ-сервером. В какой-то момент
ШП> работы в проге1 нужно безболезненно перейти в прогу2.
ШП> Используется следующий механизм: вызывается метод СОМ-сервере,
ШП> Старт_прога2. Который проверяет наличие такой проги среди загруженных
ШП> и если есть, то окно проги выводит на передний план
ШП> (SetForegroundWindow).
ШП> Один раз срабатывает, а потом уже не хотит. Может быть дело в том,
ШП> что СОМ-сервер используется обоими прогами и при выводе второй на
ШП> передний план система не может его вывести, т.к. используется что-то
ШП> общее?
ШП> Посоветуйте как сделать.

Не совсем понял сценарий. Значит, прога1 вызывает прогу2 через
СОМ-сервер, и эта прога2 становится "передней". То есть, ловится хэндл
главного окна проги2 и он передается в SetForegroundWindow. А что
потом происходит? В следствии чего окно проги2 перестает быть
передним?

Я два варианта вижу: 1) Какое-либо другое окно преобретает стиль
StayOnTop и 2) У вас хэндл окна проги2 вычисляется задолго до вызова
SetForegroundWindow. Ведь возможна такая модель:

Запустили прогу2
Нашли ее хэндл (h2)
Вывели окно проги2
.........................................
. какой-то вычислительный процесс, ..
.. во время которого прога2 вообще ..
.. могла закрыть и открыть вновь ..
.. свое окно ..
.........................................
Point1:
Пытаемся опять по хэндлу h2 вывести окно проги2 вперед.

Ну так в точке Point1 этой модели h2 корректно по значению, но окна с
таким хэндлом (читайте, номером) нет, если оно успело закрыться и
открыться.

   Вадим Шешунов 2006-02-08 15:15:54 (#512413)

Re[4]: Вставка нумерации листов в Word-документе

Здравствуйте, Шистеров.

ШП> А подробности можно? Хотелось-бы иметь в багажнике!!

Тогда с самого начала: Имеется список имен tif-картинок (их нужно
распечатать в порядке их перечисления в списке). Вообще-то, есть
программа Image2PDF для создания PDF-документа, но хотелось бы
пронумеровать страницы, растянуть картинки по листу..., а удовольствие
попрограммировать?-))))) Вот я решил загнать в Ворд, как более гибкую
для этого систему, тем более, что опыт взаимодействия с Офисом
кое-какой имеется. А среду выбрал Делфи. Вот и вышло такое:

// Создаем сам объект - переменную для доступа к коллекциям,
// методам, свойствам и событиям Ворда
WD := CreateOLEObject('Word.Application');
// Добавляем новый документ в коллекцию документов
WD.Application.Documents.Add('NORMAL.DOT', FALSE, wdNewBlankDocument, TRUE);

// Выставляем ориентацию листов
if frmOpt.rbBook.Checked then
WD.Application.Selection.PageSetup.Orientation := wdOrientPortrait
else
WD.Application.Selection.PageSetup.Orientation := wdOrientLandscape;

// Вычисляем размеры "печатной" области листа
Height := WD.Application.Selection.PageSetup.PageHeight-
WD.Application.Selection.PageSetup.BottomMargin-
WD.Application.Selection.PageSetup.TopMargin; // в точках
Width := WD.Application.Selection.PageSetup.PageWidth -
WD.Application.Selection.PageSetup.RightMargin-
WD.Application.Selection.PageSetup.LeftMargin; // в точках

// Берем имена файлов картинок, и сами картинки растягиваем по
// печатной облсти
for i := 0 to lbx.Items.Count-1 do
begin
lbx.ItemIndex := i;
// Вставляем картинку как графический объект с получением
// доступа к его свойствам
s := WD.Application.Selection.InlineShapes.AddPicture(dlbx.Directory+'\'+lbx.Items[i],
False, True);
// Теперь в полях s - свойства
// Выключаем пропорциональную растяжку
s.LockAspectRatio := False;
// Установим размеры картинки
s.Height := Height-20;
s.Width := Width-5;

// Если еще будут картинки, вставить разрывы страниц
if i < lbx.Items.Count-1 then
WD.Application.Selection.InsertBreak(wdPageBreak);
end;

if frmOpt.chbNumOn.Checked then
begin
// Вставляем в колонтитулы номер листа
if frmOpt.cmb.ItemIndex <= 1 then
// ... либо в верхний колонтитул
s := WD.Application.Selection.Sections.Item(1).Headers.
Item(1).PageNumbers.Add(wdAlignPageNumberLeft, frmOpt.chbFirstPg.Checked)
else
// ... либо в нижний
s := WD.Application.Selection.Sections.Item(1).Footers.
Item(1).PageNumbers.Add(wdAlignPageNumberLeft, frmOpt.chbFirstPg.Checked);

// s открывает доступ к св-м номера страницы
// Позиционируем номер на странце
if Byte(frmOpt.cmb.ItemIndex) in [0,2] then
s.Alignment := wdAlignPageNumberLeft
else
s.Alignment := wdAlignPageNumberRight;
end;

// Сохраняем док
WD.Application.ActiveDocument.SaveAs(dlbx.Directory+'\'+edtFName.Text);

// Показываем его, если юзер захотел
WD.Application.Visible := frmOpt.chbOpen.Checked;
// Иначе закрываем без сохранения
if not frmOpt.chbOpen.Checked then
WD.Quit(wdDoNotSaveChanges, wdWordDocument, True);
// При желании отпечатаем
if frmOpt.chbPrint.Checked then
WD.ActiveDocument.PrintOut(EmptyParam);
// И высвободим связь с Вордом
WD := Unassigned;

Несколько замечаний:
1. По Ворду "плавать" можно много и долго. Потому нужно иметь под
рукой файл VBAWRD?.CHM (? - это номер в зависимости от версии Офиса).
Там описано все, что интересно в Ворде с точки зрения его
возможностей, как СОМ.
2. Можно писать просто WD, а не WD.Application, это, как я понял, в
нашем контексте одно и то же. Но для полноты картины я писал
WD.Application.
3. Тот случай, что я описываю, является каплей в Ваш багажник. Вы в
этом убедитесь, взглянув на тот самый VBAWRD?.CHM.

   Вадим Шешунов 2006-02-08 15:15:36 (#512412)

Re: SQL в BDE

> Где можно почитать о диалекте SQL, используемом в BDE?

В комплект поставки Delphi 5 входит LocalSQL Guide. Почему его нет в
Delphi 7, понятия не имею. Хорошая справка. Правда, в HLP.

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

Это зависит не от самой BDE, а от возможностей драйвера. BDE просто
предоставляет интерфейс доступа к нему. Сами операции обслуживаются
драйвером. Как-то PARADOX, DBASE, MSSQL итп Есть стандартные, которые
поставляются с самим BDE, можно доставить/дописать собственные.
Теоретически.

> Особенно недостает функций, не работают даже банальные
> POS/SUBSTR, MONTH, LEFT/RIGHT... Пишет, что, мол, "Capability not
> supported".

Имеются: строковые - ||, LOWER, UPPER, SUBSTRING, TRIM; агрегатные -
AVG, COUNT, MAX, MIN, SUM; фиг знает, как категорию назвать - CAST, EXTRACT.

Это то, что типа гарантируется. Этот список (не уверен, правда) может быть
расширен драйвером, но даже функциональность гарантированных всё равно
зависит от драйвера. То, что ты пытаешься использовать, как я понял,
относится к MS FoxPro specific, которые по причине отсутствия их в стандарте

SQL не обязаны быть поддержаны любым драйвером.

> Если в BDE этого нет, то посоветуйте пожалуйста:
> 1. Компоненты для работы с SQL (типа TQuery), обязательно с поддержкой
> формата
> DBF, желательно бесплатные.

ADO. Соответственно TADOQuery, TADOTable (нежелательно), TADOCommand.
Если найдёшь (могу выслать, но лучше сам скачай с MSного сайта) драйвер к
Microsoft Visual FoxPro OLEDB Provider, то получишь почти то, что хочешь -
он понимает (за очень малым исключением) все фичи Fox-а, включая индексные
теги с выражениями, использующие пользовательские функции, и фразы INTO
TABLE в SELECT-ах. Но он в ряде мест медленнее (что очень странно - в
основном он наоборот быстрее) BDE Local SQL, да и завязываться на specific
фичи ADO провайдера плохо - фиг потом перейдёшь на что-нибудь другое.

> 2. Или какие-нибудь более-менее готовые инструменты для импорта имеющейся
> БД в формате DBase в нормальный SQL-сервер (Firebird/Interbase, MySQL,
> PostgreSQL). БД в формате DBF используется другими программам, импорт
> нужен
> только для удобства работы с полноценным SQL. Соответственно, такой импорт
> надо выполнять регулярно. Конечно, можно и самому написать, но ведь лень
> :)

А чё там писать-то?

INSERT INTO sqlTable (fieldList) SELECT fieldList FROM dbfTable

или даже

INSERT INTO sqlTable SELECT * FROM dbfTable

если структура sqlTable та же самая, что и dbfTable. Самому такого делать не

приходилось, но какие могут быть проблемы? Разве что типы данных чуть-чуть
подправить.

--
С уважением, boroda

Номер выпуска : 5173
Возраст листа : 871 (дней)
Количество подписчиков : 547
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/512194
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   Шматко А.А. 2006-02-08 00:16:06 (#512194)