Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 4

Автор: MoEChuu
Дата сообщения: 10.05.2008 07:38
JbBaD
Result смотрели? Функция выполнилась без ошибок. И ещё одно, откуда она?
Автор: JbBaD
Дата сообщения: 10.05.2008 07:48
MoEChuu
Result'ы проследил все, ничего странного не уловил.
Подробнее под #
Взгляните может пропустил что-то...

Сэмпл (freeburner.rar) с предыдущей страницы.
Автор: MoEChuu
Дата сообщения: 10.05.2008 08:02
JbBaD
Что-то мне лень лезть в эту штуку. Возможно это именно ваш частный случай.

Тем более это демо разработчиков.
Автор: JbBaD
Дата сообщения: 10.05.2008 09:51
Убрал Optimization в опциях проекта и все работает.
Автор: Pawo
Дата сообщения: 11.05.2008 00:36
2All
Как написать программу, определяющую версию IE в delphi?

Добавлено:
Уже нашел. Вот код, если кому надо:

Код: function GetIEVersion: string;
var
Reg: TRegistry;
begin
Reg:= TRegistry.Create;
try
Reg.RootKey:= HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\Microsoft\Internet Explorer', false);
try
Result:= Reg.ReadString('Version');
except
Result:= '';
end;
Reg.CloseKey;
finally
Reg.Free;
end;
end;
Автор: TohaDub
Дата сообщения: 11.05.2008 12:55
Люди, подскажите плиз.
Есть база, в ней OLE поле с вордовским документом. Как открыть файл на диске я знаю (Documents.Open(filename)), а вот как заставить Дельфю 7 открыть ячейку из базы?
Автор: lerthe61
Дата сообщения: 11.05.2008 13:20
TohaDub
Один из вариантов, это сделать копию на диске (например в виндовой папке Temp или local Settings\Temp) и открыть оттуда.
Автор: TohaDub
Дата сообщения: 11.05.2008 16:43

Цитата:
Один из вариантов, это сделать копию на диске (например в виндовой папке Temp или local Settings\Temp) и открыть оттуда.

Это то понятно. Можно. Вариант не плохой. Только как из базы можно сохранить в файл (использую DAODataSet от WinSoft)?
Но неужели нельзя открыть напрямую?
Порыскал в инете, нашел что можно с помощью DBOleContainer сделать подобное, но как с этим работать - ХЗ.

Попробовал так из примера, в итоге в файле всякая фигня а не текст

Код:
begin
blob := DataModule1.DAODataSetPrint.createblobstream(DataModule1.DAODataSetPrint.fieldbyname('PPrint'), bmread);
try
blob.seek(0, sofrombeginning);

with tfilestream.create('c:\1.doc', fmcreate) do
try
copyfrom(blob, blob.size)
finally
free
end;
finally
blob.free
end;
end;
Автор: GrHnd
Дата сообщения: 13.05.2008 10:19
TohaDub
Если в ячейке базы лежит OLE поле с документом, то надо сначала содержимое ячейки сохранить в file или в stream:

а потом подгрузить сохраненное в OleContainer:

procedure TfmOle.Podgotovka(Sender: TObject);
var
Stream: TStream;
begin
case Create_Mode of
From_File: begin
OleContainer.CreateObjectFromFile(F_Name,False);
end;
From_Stream: begin
Stream := fmDM.ODS_DOC.CreateBlobStream (fmDM.ODS_DOCDOC, bmRead);
OleContainer.LoadFromStream (Stream);
Stream.Free;
end;
else ;
end;
end;

Добавлено:
Это работа с TOleContainer (а не с DBOleContainer).

Но, как показала практика, в БД лучше хранить чистые документы (файла .doc, .tif и др.) чтобы после сохранения их в файле, можно было их открыть с любом установленном приложении. В случае же с OleContainer после сохранения в БД их можно будет открыть только через OleContainer c помощью того приложения, которым оно сохранялась, что не очень хорошо.
Автор: Dimmick
Дата сообщения: 13.05.2008 11:32
Пишу курсовую, простая игрушка морской бой, в делфи толком не шарю, при компиляции делфа ругается на содержимое .dpr файла:

program SeaWar;

uses
Forms,
Unit1 in 'Unit1.pas' {Mainform};

{$R *.RES}

begin
Application.Initialize;
Application.Title := 'Морской бой v.1.0';
Application.CreateForm(TMainform, Mainform);
Application.Run;
end.

и ссылается ещё на system.pas, чего не так понять никак не могу
ЗЫ: стоит 7 делфи.
Автор: RedPromo
Дата сообщения: 13.05.2008 13:03
Dimmick
А можно полностью весь текст ошибки.
Автор: GrHnd
Дата сообщения: 13.05.2008 13:40
Dimmick
Непонятно - как ругается (что при этом говорит).
По поводу system.pas - может не прописан путь к system.dcu - посмотри Tools/Environment Options далее в закладке Library: Library path должна содержать в себе $(DELPHI)\Lib
Автор: TohaDub
Дата сообщения: 13.05.2008 14:47

Цитата:
Но, как показала практика, в БД лучше хранить чистые документы (файла .doc, .tif и др.) чтобы после сохранения их в файле, можно было их открыть с любом установленном приложении.

Мне как раз и надо хранить не пустые доки а шаблоны документов в которых через "закладки " вставляются данные, распечатываются, и сохраняются в базе и должны лежать в базе.


Цитата:
В случае же с OleContainer после сохранения в БД их можно будет открыть только через OleContainer c помощью того приложения, которым оно сохранялась, что не очень хорошо.

Это в смысле только моя программа откроет их, а просто в аксцес зайти и шмякнуть два раза не получится? Если да то в моем случае это хорошо.

Мне надо что бы открылся ворд и в нем был текст из моей ячейки базы. Это невозможно без сохранения в файл? И Вы пишите что
Цитата:
Если в ячейке базы лежит OLE поле с документом, то надо сначала содержимое ячейки сохранить в file
так я и туплю как ее треклятую в файл запинать.
Автор: GrHnd
Дата сообщения: 13.05.2008 15:58

Цитата:
так я и туплю как ее треклятую в файл запинать

пример (для доступа к БД используется Direct Oracle Access от Allroundautomations)
procedure TForm1.Button1Click(Sender: TObject);
begin
with OracleDataSet1 do begin
Open;
if not EOF then begin
if not OracleDataSet1DOC.IsNull then begin
try OracleDataSet1DOC.SaveToFile (F_Name); // сохранение в файле
with OleContainer1 do
begin
OleContainer1.LoadFromFile(F_Name); // загрузка в OLE
DoVerb(PrimaryVerb); // чтобы можно было редактировать
end;
except on E: Exception do
begin
Application.MessageBox(PChar('Ошибка загрузки документа. Попробуйте еще раз!'
),PChar(E.Message),mb_IconExclamation);
end
end;
end;
end;
end;
end;
а в OracleDataSet1 сидит SQL запрос 'select doc from table1
where ...'


Цитата:
Мне как раз и надо хранить не пустые доки а шаблоны документов в которых через "закладки " вставляются данные, распечатываются, и сохраняются в базе и должны лежать в базе.

А зачем нужен OleContainer - это-же лишний геморой.
Храни в ячейках БД шаблоны, затем, сохраняя их в файле загружай его с помощью программы в Word, программно вставляй данные, распечатывай и сохраняй полученный документ в ячейках другой таблицы.
Автор: TohaDub
Дата сообщения: 13.05.2008 18:46

Цитата:
if not OracleDataSet1DOC.IsNull then begin
try OracleDataSet1DOC.SaveToFile (F_Name); // сохранение в файле

GrHnd, судя по этой конструкции, сохраняется весь датасэт, и в файле получается нечитаемый формат.
Непонятен момент откуда взялся OracleDataSet1DOC? Вначале идет открытие просто OracleDataSet1, а приставка DOC откуда берется? Или это имеется ввиду имя столбца в базе, но Дельфя не видит его, и не может определить его. Хмммм.
Я пробую через ADO сделать.

Нашел способ сохранения одной строчкой:
(ADODataSet1.FieldByName('PPrint') as TBlobField).savetofile('c:\1.doc');

но в любом из случаев сохранения - сохраняется, а при открытии вордом выдается:


а в far-е, выдает что "Неожиданный конец архива!" и далее:


В базу сохранены (непосредственно через access) BLOB поля в формате MS Word 97-2003. Перепробовал разные форматы, результат один - крякозяблики. Ниче не понимаю.

Автор: Erazer
Дата сообщения: 13.05.2008 23:39
подскажите хороший апдейтер... пытаю http://www.ionworx.com/goupdater.html, но чет мне не нравится каждый раз создавать апдейт паки, и кажись оно обновляет не только изменившиеся или добавившиеся файлы, а все скопом хоцца чтобы обновлялись только изменившие-ся файлы, и так чтобы выложил на фтп, а оно с него по необходимости обновляло... без ручного создания апдейтов...
Автор: Jokerjar79
Дата сообщения: 14.05.2008 02:01
Как получить список элементов панели управления (имя, иконка, имя для запуска)? Пока единственное что мне пришло в голову - искать все *.cpl файлы в system32 и вытаскивать информацию через экспортируемую функцию. Может есть более простое решение? Да и не все элементы организованы через *.cpl (display, ptinters, ...)
Автор: GrHnd
Дата сообщения: 14.05.2008 08:42
TohaDub

Цитата:
судя по этой конструкции, сохраняется весь датасэт,

Никак нет. OracleDataSet1 для удобства работы позволяет в себе создавать поля соответствующие столбцам БД. OracleDataSet1DOC соответствует ячейке DOC. f not OracleDataSet1DOC.IsNull проверяет не пуста ли она. OracleDataSet1DOC.SaveToFile (F_Name) сохраняет ее содержимое на диск, что аналогично (ADODataSet1.FieldByName('PPrint') as TBlobField).savetofile('c:\1.doc');


Цитата:
Непонятен момент откуда взялся OracleDataSet1DOC?

Для его получения надо в контекстном меню выбрать "Fields Editor", и в нем "Add all fields", после чего добавится элемент OracleDataSet1DOC, описывающий поле DOC из SQL запроса.

Можно попробовать загрузить сохраненный файл в OLEConteiner(конечно если есть уверенность, что это OLE поле с вордовским документом):

OleContainer1.LoadFromFile(F_Name); // загрузка в OLE
DoVerb(PrimaryVerb); // чтобы можно было редактировать
Посмотри мой пред пост, я его обновил.
Автор: Dimmick
Дата сообщения: 14.05.2008 09:24
GrHnd, RedPromo всё оказалось проще чем хотелось, оказывается русификатор для делфи кривой был, переставил всё норм
Автор: RedPromo
Дата сообщения: 14.05.2008 13:51
Dimmick
Вобще видел вроде для 7 русик, но никогда даже не думал пользоватся. Наоборот как-то непривычно даже если по русски будет меню.
Автор: TohaDub
Дата сообщения: 14.05.2008 14:13
GrHnd
Ну а как быть с тем что он сохраняется с крокозябликами?
Автор: GrHnd
Дата сообщения: 14.05.2008 14:41
TohaDub
Пришли мне этот файлик на #, попробую его загрузить в OleConteiner.
Автор: Jokerjar79
Дата сообщения: 17.05.2008 10:26
Как получить иконки Моего компьютера, Моих документов, Корзины и т.д.? С учетом того, что пользователь может указать свои
Автор: YFred
Дата сообщения: 17.05.2008 10:39
Народ скажите возможно ли в тексте программы в зависимости от условия менять имя объекта к которому обращаемся. Например как то так:
(label+a).caption = "название";
где в переменной а хранится номер надписи 1 или 2
т.е. надо чтоб в зависимости от значения "a" получалось label1.caption = "название" либо label2.caption = "название";

Очень надо.
Автор: Jokerjar79
Дата сообщения: 17.05.2008 11:15
YFred, можно:

Код: var
a: string;
begin
a := '1';
(FindComponent('Label' + a) as TLabel).Caption := 'Hello world';
end;
Автор: YFred
Дата сообщения: 17.05.2008 11:45
Jokerjar79
А как сделать тоже самое только не TLabel, а с записью (record)?
Автор: Jokerjar79
Дата сообщения: 17.05.2008 12:03
YFred, думаю лучший вариант - использовать массив записей
Автор: YFred
Дата сообщения: 17.05.2008 12:09
Jokerjar79
Для моей задачи это не подходит. Еще есть варианты?
Вот код который мне нужно переписать по другому:

Код:
Case hod of
1: begin
n1:=pers1.B+pers1.c3-generator(10);
n2:=pers2.b3+pers2.C-generator(10);
end;
2: begin
n1:=pers2.B+pers2.c3-generator(10);
n2:=pers1.b3+pers1.C-generator(10);
end;
end;
Автор: akaGM
Дата сообщения: 17.05.2008 16:43
YFred
для начала можно сократить хотя бы так:

Код: gen10 := -generator(10);
n1 := gen10;
n2 := gen10;
Case hod of
1: begin
inc(n1, pers1.B+pers1.c3);
inc(n2, pers2.b3+pers2.C);
end;
2: begin
inc(n1, pers2.B+pers2.c3);
inc(n2, pers1.b3+pers1.C);
end;
end;
Автор: Jokerjar79
Дата сообщения: 17.05.2008 18:01
Я тоже думаю, что извращаться не стоит.

З.Ы. Если вариантов hod только два, можно и без case

Добавлено:
Я тоже думаю, что извращаться не стоит.

З.Ы. Если вариантов hod только два, можно и без case

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.