Вопрос № 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.
Так вот, когда начинает выполняться запрос, форма уже не реагирует ни на какие действия пользователя. Можно ли это как-то обойти, т.к. мне необходимо сделать отмену запроса? Пробовал несколько потоков, но опять же второй поток включается по нажатию клавиши на форме, а это невозможно во время запроса...
Отвечает: Сарумян
Здравствуйте, Бочаров Кирилл Юрьевич!
Что-то я не совсем понял.
У Вас при запуске запроса "подвисает" приложение??
И поэтому Вы не можете нажать другую кнопку??
Если да то попробуйте так: См.Приложение
Приложение:
--------- Пришел, увидел, развернулся и ушел...
Ответ отправил: Сарумян (статус: 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
Отвечает: Архангельский Андрей Германович
Здравствуйте, Овчинников Николай Владиславович!
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) Написать программу перевода чисел из римской системы счисления и обратно.
Отвечает: 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
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. Удачи!
Приложение:
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Присоединюсь к обсуждения данного вопроса поскольку имею свой собственный алгоритм перевода арабских цифр в римские.
Вот код:
{---------------------------------------------------------------------------
переводим десятичное число (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 и можно сделать очень красиво
--------- Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Следующий код показывает, как добавить картинку в виде объекта 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