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

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


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

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

Выпуск № 781
от 15.04.2007, 17:05

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


Вопрос № 81787: Здравствуйте. Меня интересует, как сделать, чтобы из приложения Delphi открывались документы Word и Excel, если на компьютере стоит любая версия Office (от 97 до 2003). Я использую не ComObj, а компоненты с вкладки Servers. Я знаю, что, например, для...
Вопрос № 81826: Приветстую всех! Эксперты будьте добры накидайте грамотных, толковых ссылок на мануалы, статьи, либо сорцы по программированию компанентов на вкладочках Internet и indyServer. Рылся думал тема актуальная, но путевого нечего ненашел....
Вопрос № 81856: закрываю приложение: postmessage(t, WM_Close,0,0); - окно закрывается (не спрашивая о сохранении), но в 8 случаях из 10 появляется ошибка - "Обнаружена ошибка, приносим извинения за неудобства" и что-то там про отправку отчёта Microsoft...
Вопрос № 81859: Здравствуйте, уважаемые эксперты! Проблема такая: В программе есть код: Query1.active:=false; Query1.SQL.add('SELECT * FROM [TableName];'); Query1.active:=true; Запрос из большой таблицы, все выводится в DBGrid. Так вот,...
Вопрос № 81896: Здраствуйте эксперты. Возник у меня вопрос. как открыть базу данных без BDE (т.е. чтобы к exe файлу не переписывать dll для работы). И чтобы данные отобразить в DBgrid. Компонент Tdbf - не работает с DBGRID...
Вопрос № 81909: Уважаемые эксперты. Я недавно начала изучать Delphi и через 3 дня у нас защита некоторых программ. Две из них никак не могу написать, пожалуйсто - помогите. Программы не сложные, и, думаю, не займут много времени. 1) Заданно целое число а&g...
Вопрос № 81942: Здравствуйте!!! Не поделитесь исходником очень красивого меню (стандартное не устраивает). Спасибо!...

Вопрос № 81.787
Здравствуйте. Меня интересует, как сделать, чтобы из приложения Delphi открывались документы Word и Excel, если на компьютере стоит любая версия Office (от 97 до 2003). Я использую не ComObj, а компоненты с вкладки Servers. Я знаю, что, например, для TWordApplication существуют разные методы открытия документов: Open, Open2000 и OpenOld. Как сделать, чтобы документы открывались в любой версии Office?

С уважением,
Михаил.
Отправлен: 09.04.2007, 20:04
Вопрос задал: Михаил73 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gh0stik
Здравствуйте, Михаил73!

Для того чтобы узнать текущую версию Word - достаточно использовать свойство Version. Это свойство содержит в себе строку в виде числа, которое соответствует версии.
То есть:
8.0 - Word97
9.0 - Word2000
10.0 - Word2002/XP
11.0 - Word2003.


В программе нужно просто в зависимости от значения применять, тот или иной метод.

Для того чтобы программа была универсальной также необходимо прописать модули для всех версий: uses Word97,Word2000,WordXP;

В приложении пример который позволяет создать новый документ в соответсвии с установленным Word-ом (WordApp=WordApplication1).

Для Excel все выше описанные подходы также применимы.

Good Luck!!!

Приложение:

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 09.04.2007, 21:10
Оценка за ответ: 5
Комментарий оценки:
Замечательно!


Вопрос № 81.826
Приветстую всех! Эксперты будьте добры накидайте грамотных, толковых ссылок на мануалы, статьи, либо сорцы по программированию компанентов на вкладочках Internet и indyServer. Рылся думал тема актуальная, но путевого нечего ненашел.
Отправлен: 10.04.2007, 00:08
Вопрос задал: 12rus (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Iksmensp
Здравствуйте, 12rus!

Насчет этого много на следующих сайтах:
http://www.codenet.ru/
http://www.delphiworld.narod.ru/_all_articles_.html
http://www.delphirus.com.ru/
http://biblioteka.net.ru/
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 10.04.2007, 13:42


Вопрос № 81.856
закрываю приложение:
postmessage(t, WM_Close,0,0); - окно закрывается (не спрашивая о сохранении), но в 8 случаях из 10 появляется ошибка - "Обнаружена ошибка, приносим извинения за неудобства" и что-то там про отправку отчёта Microsoftu. Подскажите - способ обойти эту ошибку. (WM_Quit тож самое)
Отправлен: 10.04.2007, 08:26
Вопрос задал: Kolyan (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 15)

Отвечает: Iksmensp
Здравствуйте, Kolyan!
{ответ явно не в тему}
Самым простым решением в этой ситуации будет отключение сообщений об ошибках
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 10.04.2007, 13:39
Оценка за ответ: 1
Комментарий оценки:
Гениально!

Отвечает: PGM
Здравствуйте, Kolyan!

Можно попробовать вариант с PostMessage(H, WM_COMMAND, SC_CLOSE, 0) - может от него не будет вызываться ошибки - это более правильный способ закрытия сторонних окон.
Ответ отправил: PGM (статус: 4-ый класс)
Ответ отправлен: 10.04.2007, 22:19
Оценка за ответ: 5
Комментарий оценки:
СПАСИБО!! Ваша команда закрывает рабочее окно, главное окно закрывается с помощью postmessage(t, WM_Close,0,0);
Изменённый код:
PostMessage(t, WM_COMMAND, SC_CLOSE, 0);
postmessage(t, WM_Close,0,0); // и всё работает, никаких ошибок


Вопрос № 81.859
Здравствуйте, уважаемые эксперты!
Проблема такая:
В программе есть код:
Query1.active:=false;
Query1.SQL.add('SELECT * FROM [TableName];');
Query1.active:=true;
Запрос из большой таблицы, все выводится в DBGrid.
Так вот, когда начинает выполняться запрос, форма уже не реагирует ни на какие действия пользователя. Можно ли это как-то обойти, т.к. мне необходимо сделать отмену запроса? Пробовал несколько потоков, но опять же второй поток включается по нажатию клавиши на форме, а это невозможно во время запроса...
Отправлен: 10.04.2007, 08:46
Вопрос задал: Бочаров Кирилл Юрьевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Сарумян
Здравствуйте, Бочаров Кирилл Юрьевич!
Что-то я не совсем понял.
У Вас при запуске запроса "подвисает" приложение??
И поэтому Вы не можете нажать другую кнопку??
Если да то попробуйте так: См.Приложение

Приложение:

---------
Пришел, увидел, развернулся и ушел...

Ответ отправил: Сарумян (статус: 3-ий класс)
Ответ отправлен: 10.04.2007, 08:53

Отвечает: Pavel Maltsev
Здравствуйте, Бочаров Кирилл Юрьевич!

Почему с потоками не получилось? Код в студию!
В потоке должен выполняться сам запрос, вся работа с пользовательским интерфейсом - только в основном...
Метод TThread.Terminated лишь устанавливает флаг TThread.Terminated при этом не завершая сам процесс.

Приложение:

Ответ отправил: Pavel Maltsev (статус: 3-ий класс)
Ответ отправлен: 10.04.2007, 09:59


Вопрос № 81.896
Здраствуйте эксперты. Возник у меня вопрос. как открыть базу данных без BDE (т.е. чтобы к exe файлу не переписывать dll для работы). И чтобы данные отобразить в DBgrid. Компонент Tdbf - не работает с DBGRID
Отправлен: 10.04.2007, 12:21
Вопрос задал: Овчинников Николай Владиславович (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

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

BDE - это набор драйвером доступа к различным БД
Для того чтобы получить доступ к конкретной БД без BDE нужно использовать компоненты прямого доступа, который для каждой БД свои.
Например, для Interbase/Firebird есть штатные компоненты IBX (вкладка Interbase)

---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 10.04.2007, 12:28
Оценка за ответ: 4
Комментарий оценки:
Это ясно! Если можно по подробнее. У меня dbf dbase-VI, нужно открыть и отобразить в DBgrid, но чтобы с программой не копировать необходимые библиотеки!
Заранее благодарен.

Отвечает: Dragon
Здравствуйте, Овчинников Николай Владиславович!
Если нужно работать с уже готовой базой Paradox(*.db), dBase(*.dbf), то в любом случае нужен BDE. Если нужно создать базу без BDE, без компонента TDbf, то могу посоветовать компонент TClientDataSet. В "Библии Дельфи" Фленова есть достаточно подробное описание работы с этим компонентом. Для работы с ним библиотека BDE не требуется. Достаточно расположить на другую машину (куда программа будет переносится) там где будет лежать исполняемый exe файл библиотеку midas.dll
Ответ отправил: Dragon (статус: 1-ый класс)
Ответ отправлен: 10.04.2007, 12:42
Оценка за ответ: 1
Комментарий оценки:
В вопросе: (т.е. чтобы к exe файлу не переписывать dll для работы)

Отвечает: Iksmensp
Здравствуйте, Овчинников Николай Владиславович!

На мой взгляд, проще всего использовать компонент TADOtable с закладки dbGo, чтобы не использовать Bde.
В кратце о использовании этого компонента.
Добавляем его на форму, а также TDataSourse c Data Access + TDBGrid c Data Controls.
Настраиваем TADOtable: для начало надо составить ConnectionString. Выбираем это свойство и щелкаем по 3 точкам.
Выбрать провайдер(например для Microsoft Access надо "Microsoft Jet 4.0 OLE DB Provider") . Выбрать имя базы.
В TDataSourse надо настроить свойство DataSet=ADOTable1. В TDBGrid поставить DataSourse=DataSourse1;
Вот и все ! Просто и работает надежно. Если есть вопросы, то пиши - отвечу;
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 10.04.2007, 13:35
Оценка за ответ: 5
Комментарий оценки:
Ясно


Вопрос № 81.909
Уважаемые эксперты. Я недавно начала изучать Delphi и через 3 дня у нас защита некоторых программ. Две из них никак не могу написать, пожалуйсто - помогите. Программы не сложные, и, думаю, не займут много времени.

1) Заданно целое число а>100. Поменять местами i-ую и j-ую цифру этого числа.

2) Написать программу перевода чисел из римской системы счисления и обратно.
Отправлен: 10.04.2007, 13:16
Вопрос задал: Speedmeister (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Iksmensp
Здравствуйте, Speedmeister!
i:=a mod 10;// последняя цифра числа
j:=a div 100;// первая в трехзначном j:=a div 1000 в четырех и т.д;
k:=(a mod 100) div 10;// средняя в трехзначном;
После этого меняем их местами, но не забывай присваивать значения обмен. переменных другим переменным, чтобы не было потери значений
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 10.04.2007, 14:02

Отвечает: Сарумян
Здравствуйте, Speedmeister!
Я извиняюсь...я наверное один из самых ...эээ скажем неряшливых экспертов поэтому и код такой длинный...
Этот код (приложение) только для 1 задачи...
Для 2 я не помню римские обозначения (Ну Х - это понятно 10, а вот М кажется 50 или 1000 вот это не помню. Пишите в личку если есть точные сведения помогу с задачей).

Код создавался чтоб работать с числами любой длинный.
Разумеется кроме чисел <10. Работает в плоть до чисел с длинной в 255 символов :)

Приложение:

---------
Пришел, увидел, развернулся и ушел...

Ответ отправил: Сарумян (статус: 3-ий класс)
Ответ отправлен: 10.04.2007, 14:35

Отвечает: Dragon
Здравствуйте, Speedmeister!
const
R: array[1..13] of string[2] =
('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
A: array[1..13] of Integer =
(1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);

..............

function ArabicToRoman(N: Integer): string; //Арабские в римские
var
i: Integer;
begin
Result := '';
i := 13;
while N > 0 do
begin
while A[i] > N do
Dec(i);
Result := Result + R[i];
Dec(N, A[i]);
end;
end;

function RomanToArabic(S: string): Integer; //Римские в арабские
var
i, p: Integer;
begin
Result := 0;
i := 13;
p := 1;
while p <= Length(S) do
begin
while Copy(S, p, Length(R[i])) <> R[i] do
begin
Dec(i);
if i = 0 then
Exit;
end;
Result := Result + A[i];
p := p + Length(R[i]);
end;
end;
Ответ отправил: Dragon (статус: 1-ый класс)
Ответ отправлен: 10.04.2007, 14:35

Отвечает: Ерёмин Андрей
Здравствуйте, Speedmeister!
Посмотрел ответы других экспертов на первый вопрос и решил ответить... Есть способ куда проще, чем вычислять разряды числа последовательным делением. Можно просто преобразовать число в строку и поменять местами i-ый и j-ый символ. Код в приложении. Если число изначально имеем в числовом типе, например Integer, то предварительно конвертируем его в строку функцией IntToStr(). В коде: Edit1 - для ввода числа, Edit2 - ввод i, Edit3 - ввод j. Удачи!

Приложение:

---------
Нет правила без исключений. Правило без исключений - исключение из правил.

Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 10.04.2007, 15:36

Отвечает: Gh0stik
Здравствуйте, Speedmeister!

Присоединюсь к обсуждения данного вопроса поскольку имею свой собственный алгоритм перевода арабских цифр в римские.

Вот код:
{---------------------------------------------------------------------------
переводим десятичное число (1..3999)
в его римский эквивалент
---------------------------------------------------------------------------}

program rimmm;
const rim:array [0..6] of char=('I','V','X','L','C','D','M');
var k,t,r:word;
ch:string;
begin
ch:='';r:=0;t:=0;
write('Input chislo ');readln(k);
repeat
t:=k mod 10; k:=k div 10;
case r of
0..2: case t of
1: ch:=rim[2*r]+ch;
2: ch:=rim[2*r]+rim[2*r]+ch;
3: ch:=rim[2*r]+rim[2*r]+rim[2*r]+ch;
4: ch:=rim[2*r]+rim[2*r+1]+ch;
5: ch:=rim[2*r+1]+ch;
6: ch:=rim[2*r+1]+rim[2*r]+ch;
7: ch:=rim[2*r+1]+rim[2*r]+rim[2*r]+ch;
8: ch:=rim[2*r+1]+rim[2*r]+rim[2*r]+rim[2*r]+ch;
9: ch:=rim[2*r]+rim[2*r+2]+ch;
else ch:=ch;
end;
3: case t of
1: ch:=rim[2*r]+ch;
2: ch:=rim[2*r]+rim[2*r]+ch;
3: ch:=rim[2*r]+rim[2*r]+rim[2*r]+ch;
else write('Error');
end;
end;
inc(r);
until k<=0;
writeln(ch);
readln;
end.

Хотелось бы отметить одно большое отличие от приведенного выше алгоритма!!! Данный алгоритм выполняет ровно столько операций сколько цифр в числе!!! А это не мало важно, поскольку если мы захотим расширить множество определенных цифр, то с их ростом и возрастет количество проходов в алгоритме уважаемого Dragon, а мой алгоритм еще и просто перенесет возможное расширение поскольку достаточно будет просто добавить недостающие "цифры".

Good Luck!!!

Приложение:

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 11.04.2007, 00:52

Отвечает: Georg
Здравствуйте, Speedmeister!
var S:string; A:integer; Ch:Char;
Преобразуем число в строку
S:=IntToStr(A);
Со строкой можно работать как массивом
Ch:=S[I];
S[I]:=S[J];
S[J]:=Ch;
Преобразуем строку в число
A:=StrToInt(S);
Все.Удачи!
Ответ отправил: Georg (статус: 1-ый класс)
Ответ отправлен: 11.04.2007, 12:00


Вопрос № 81.942
Здравствуйте!!!
Не поделитесь исходником очень красивого меню (стандартное не устраивает).
Спасибо!
Отправлен: 10.04.2007, 16:57
Вопрос задал: Piit (статус: 2-ой класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 2)

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

А положите на форму MenuControl из Raize Components 4.0 и можно сделать очень красиво
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 10.04.2007, 17:04

Отвечает: Iksmensp
Здравствуйте, Piit!

Следующий код показывает, как добавить картинку в виде объекта TImage в объект TMenuItem:

Приложение:

Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 10.04.2007, 19:11

Отвечает: Menand
Здравствуйте, Piit!

А вы меню каким компонентом делаете? попробуйте вместо стандартного - ТАктионЛист
Ответ отправил: Menand (статус: 5-ый класс)
Ответ отправлен: 10.04.2007, 19:16

Отвечает: Bingo
Здравствуйте, Piit!
www.alphaskins.com - сайт, с которого Вы можете скачать множетво необычных, нестандартный и очень красивых компонентов. Посетите этот сайт, и я уверен, что Вы не пожалеете!
---------
C темным пивом в светлое будущее!
Ответ отправил: Bingo (статус: 3-ий класс)
Ответ отправлен: 10.04.2007, 21:24
Оценка за ответ: 1

Отвечает: Coupler
Здравствуйте, Piit!
Посмотрите вот этот набор компонентов (free): BarMenu Components v.2.3.9. Довольно симпатичное меню с множеством настроек.
Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 11.04.2007, 05:02
Оценка за ответ: 5


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.50 (beta) от 15.04.2007
Яндекс Rambler's Top100

В избранное