Народ, подскажите, как в Delphi 7 создать интерфейс, похожий на 1С Предприятие. Необходимо, чтобы в главном окне приложения открывались другие формы и их можно было бы перемещать только в пределах основной формы, возможно ли это ? подскажите технологию
» Вопросы по Delphi (до версии 2009) - часть 5
pavlo1704
MDI - раз, управление свойством Parent дочерних форм - два.
MDI - раз, управление свойством Parent дочерних форм - два.
Frodo_Torbins
Спасибо большое! Теперь я понял, что к чему
Спасибо большое! Теперь я понял, что к чему
Hi All
А есть компонент-шедулер под делфи . Что бы не воротить кучу гов... в компоненте TTimer .
А есть компонент-шедулер под делфи . Что бы не воротить кучу гов... в компоненте TTimer .
JohnSilver182
Я пользуюсь описанным здесь Таймер, который не подведет
Там есть синхронизированный таймер, в котором моменты срабатывания задаются в формате строки CRON, очень удобно.
Ну и в JCL/JVCL есть навороченный вариант.
Я пользуюсь описанным здесь Таймер, который не подведет
Там есть синхронизированный таймер, в котором моменты срабатывания задаются в формате строки CRON, очень удобно.
Ну и в JCL/JVCL есть навороченный вариант.
data man А вот я когда то юзал его на WinNt 4.0
Когда перенес на WinXp и WIndows Server 2003 , начались глюки вплоть до того что софтину не закрыть .
З.Ы.
А как выцепить Pchar из LPARAM ??????
Цитата:
число то я получаю а Message.LParam ВСЕГДА =0
Цитата:
Когда перенес на WinXp и WIndows Server 2003 , начались глюки вплоть до того что софтину не закрыть .
З.Ы.
А как выцепить Pchar из LPARAM ??????
Цитата:
hTimer4 := tmCreateFixedTimer(TimerNotifyEvent, CronEdit.Text, tmSureSync,
true, dword(pchar(HelloStr)), 666);
число то я получаю а Message.LParam ВСЕГДА =0
Цитата:
procedure TfmDemo.WMAsyncNotify(var Message: TMessage);
begin
//ShowTimer(Message.WParam);
logmemo.Lines.Add(Inttostr(Message.wParam))
end;
JohnSilver182
Цитата:
Возможно, но он уже несколько раз обновлялся.
Цитата:
Скорее всего, проблема из-за того, что функции создания таймеров импортируются из DLL.
Я пользуюсь модифицированной версией без DLL, как автор советовал в статье.
Цитата:
начались глюки
Возможно, но он уже несколько раз обновлялся.
Цитата:
А как выцепить Pchar из LPARAM ??????
Скорее всего, проблема из-за того, что функции создания таймеров импортируются из DLL.
Я пользуюсь модифицированной версией без DLL, как автор советовал в статье.
snike555
Цитата:
Пытался использовать TDBF, но он почему-то OEM кодировку не транслирует - получается кракобяки
Цитата:
TDBF, ADO подойдут?
Пытался использовать TDBF, но он почему-то OEM кодировку не транслирует - получается кракобяки
Цитата:
OEM
vkDBF: _http:\\vlad-karpov.narod.ru
ps: Под себя подпиливал автодетект oem/ansi + кривывые файлы с одинаковыми именами полей...
люди вопрос...
Есть компонент WebBrowser и открыта html страничка с кнопкой типа submit, как мне сделать чтобы прога програмно нажимала на эту кнопку(html)
Есть компонент WebBrowser и открыта html страничка с кнопкой типа submit, как мне сделать чтобы прога програмно нажимала на эту кнопку(html)
MSx213
Если конечная цель - сделать POST-запрос (отправка заполненной формы), то достичь её можно гораздо более правильными и неизвращёнными способами. Гугль в помощь
Если конечная цель - сделать POST-запрос (отправка заполненной формы), то достичь её можно гораздо более правильными и неизвращёнными способами. Гугль в помощь
Доброго времени суток,
подскажите пож, как решить проблему с региональными настройками (вместо точки должна быть запятая).
Есть дата в виде : 40152.9238028009, преобразовываю в норм. дату, время:
ClientDataSet2.FieldByName('ddd').AsDateTime := FloatToDateTime(StrToFloat(ClientDataSet2.FieldByName('datetime').AsString));
Пол. норм. дату: 05.12.2009 22:10:16
И обратно:
ClientDataSet2.FieldByName('datetime').asstring := floattostr(double((ClientDataSet2.FieldByName('ddd').asdatetime)));
Слышал что то про ThousandSeparator, но так и не понял как его реализовать здесь.
Заранее благодарен.
Добавлено:
Вопрос снят.
подскажите пож, как решить проблему с региональными настройками (вместо точки должна быть запятая).
Есть дата в виде : 40152.9238028009, преобразовываю в норм. дату, время:
ClientDataSet2.FieldByName('ddd').AsDateTime := FloatToDateTime(StrToFloat(ClientDataSet2.FieldByName('datetime').AsString));
Пол. норм. дату: 05.12.2009 22:10:16
И обратно:
ClientDataSet2.FieldByName('datetime').asstring := floattostr(double((ClientDataSet2.FieldByName('ddd').asdatetime)));
Слышал что то про ThousandSeparator, но так и не понял как его реализовать здесь.
Заранее благодарен.
Добавлено:
Вопрос снят.
victorman2010
Для установки десятичного разделителя юзай глобальную переменную DecimalSeparator:
Код: DecimalSeparator:= ',';
Для установки десятичного разделителя юзай глобальную переменную DecimalSeparator:
Код: DecimalSeparator:= ',';
andrewtishkin
в общем это и есть пост запрос. Прогу пробую писать для массовой рассылки на torrents.by. Но я находил пакет, в нем было само сообщение, тема и другие данные. Пробовал отправить этот пакет снова, но сообщение не приходило... Кто знает?
PS поэтому и такие замуты)
в общем это и есть пост запрос. Прогу пробую писать для массовой рассылки на torrents.by. Но я находил пакет, в нем было само сообщение, тема и другие данные. Пробовал отправить этот пакет снова, но сообщение не приходило... Кто знает?
PS поэтому и такие замуты)
есть программа под названием asbase(СУБД) изпользутся ФМС у них самописное на паскале ядро ни кто незнает структуры этой базы и чем к ней можно подцепиться?
надо написать приложение, которое будет находится на музыкальном CD\DVD. при запуске на PC показывало список треков. при вставке в CD\DVD плейер диск ввел себя как обычный музыкальный.
подскажите куда копать.
подскажите куда копать.
neznayka3
Вообще-то это WinAmp умеет делать.
Создаете файл Autoran.ini (если не ошибаюсь) и прописываете туда вызов WinAmpa.
Далее сам WinAmp + Autoran.ini + музыка + плейлист (если надо) и на диск.
Aghj форматы CD можно глянуть тут http://www.cd-format.ru/?page=45
Если вопрос был о том как прочитать заголовки треков то познакомится можно здесь http://www.moon-soft.com/program/FORMAT/sound/cda.htm
Вообще-то это WinAmp умеет делать.
Создаете файл Autoran.ini (если не ошибаюсь) и прописываете туда вызов WinAmpa.
Далее сам WinAmp + Autoran.ini + музыка + плейлист (если надо) и на диск.
Aghj форматы CD можно глянуть тут http://www.cd-format.ru/?page=45
Если вопрос был о том как прочитать заголовки треков то познакомится можно здесь http://www.moon-soft.com/program/FORMAT/sound/cda.htm
V1s1ter
WinAmp может, но при запуске на PC кроме списка треков на форме еще будет различная информация: логотип, контактная информация и тд. главная проблема, как прочитать заголовки треков и будет ли диск проигрываться в cd плеерах, если на нем будут файлы exe, Autoran.ini
WinAmp может, но при запуске на PC кроме списка треков на форме еще будет различная информация: логотип, контактная информация и тд. главная проблема, как прочитать заголовки треков и будет ли диск проигрываться в cd плеерах, если на нем будут файлы exe, Autoran.ini
Доброго времени суток.
По нету приходят xml файлы. Моя программа открывает его (вывожу в cxGrid), редактирует и потом обратно записывает в xml. xmlMapper'om созданы два транспорт файла (.xtr). Использую компоненты: xmlTransform, xmlTransformProvider, ClientDataSet, DataSourse, cxGrid. Суть проблемы: одна или более записей в первой колонке в шестнадцатиричной системе счисления. Подскажить пож что можно сделать, чтобы в гриде отобразилась десятичная, отредактировать запись и перевести обратно в шестнад. сис.? Заранее благодарен.
Читаю файл:
ClientDataSet1.Close;
XMLTransform1.SourceXmlFile := 'C:\_zx.xml';
XMLTransform1.TransformationFile := 'OXtrans.xtr';
ClientDataSet1.XMLData := XMLTransform1.data;
ClientDataSet1.Open;
Сохраняю файл:
XMLTransformProvider1.XMLDataFile := 'C:\_zx.xml';
XMLTransformProvider1.TransformRead.TransformationFile := 'OXtrans.xtr';
XMLTransformProvider1.TransformWrite.TransformationFile := 'toxml.xtr';
ClientDataSet1.ApplyUpdates(-1);
По нету приходят xml файлы. Моя программа открывает его (вывожу в cxGrid), редактирует и потом обратно записывает в xml. xmlMapper'om созданы два транспорт файла (.xtr). Использую компоненты: xmlTransform, xmlTransformProvider, ClientDataSet, DataSourse, cxGrid. Суть проблемы: одна или более записей в первой колонке в шестнадцатиричной системе счисления. Подскажить пож что можно сделать, чтобы в гриде отобразилась десятичная, отредактировать запись и перевести обратно в шестнад. сис.? Заранее благодарен.
Читаю файл:
ClientDataSet1.Close;
XMLTransform1.SourceXmlFile := 'C:\_zx.xml';
XMLTransform1.TransformationFile := 'OXtrans.xtr';
ClientDataSet1.XMLData := XMLTransform1.data;
ClientDataSet1.Open;
Сохраняю файл:
XMLTransformProvider1.XMLDataFile := 'C:\_zx.xml';
XMLTransformProvider1.TransformRead.TransformationFile := 'OXtrans.xtr';
XMLTransformProvider1.TransformWrite.TransformationFile := 'toxml.xtr';
ClientDataSet1.ApplyUpdates(-1);
Господа, как в Дельфи 7 сделать в панели свойств возможность редактирования свойства Caption в много строчном режиме?
esvrab
надо написать(найти) и установить редактор свойств для соответствующего типа.
надо написать(найти) и установить редактор свойств для соответствующего типа.
victorman2010
Цитата:
_http://www.delphisources.ru/pages/faq/base/hex_to_int.html
и у cxGridView onCustomDrawCell или только на колонку
cxGrid1TableView1Column1GetDisplayText(Sen der:TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AText: string);
Цитата:
Цитата:
Код: SysUtils.IntToHex
Цитата:
чтобы в гриде отобразилась десятичная
_http://www.delphisources.ru/pages/faq/base/hex_to_int.html
и у cxGridView onCustomDrawCell или только на колонку
cxGrid1TableView1Column1GetDisplayText(Sen der:TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AText: string);
Цитата:
отредактировать записьэто в ClientDataSet
Цитата:
перевести обратно в шестнад. сис.?
Код: SysUtils.IntToHex
neznayka3
Цитата:
Что бы упростить себе жизнь предлагаю не читать треки, а создать заранее файл лист, который и отображать.
Цитата:
Цитата:
главная проблема, как прочитать заголовки треков
Что бы упростить себе жизнь предлагаю не читать треки, а создать заранее файл лист, который и отображать.
Цитата:
будет ли диск проигрываться в cd плеерах, если на нем будут файлы exe, Autoran.iniВ большенстве случаев будут, в ранее выложенной ссылке об этом было написано. Программы пишутся в первый трек, аудио в остальные.
Доброго всем дня. Я новичок в программировании OpenGL, а мне через пару дней сдавать програмку. Никак не могу с ней разобраться. Буду очень благодарен если поможете примером.
Мне необходимо вывести таблицу на экран из трех столбцов, а количество строк задается произвольно, но не больше 6 и не меньше 2. В каждой ячейке находится какойто символ или цифра, которые тоже задаются произвольно и они должны вращаться вокруг своего центра по оси Y
______________________
__F__!__1____!___5____!
__-__!__26___!___10___!
__> _!_23____!___456__!
__R__!_45____!___2____!
С одной вращающейся цифрой я вроде разобрался (в книге Краснова есть пример), а вот как реализовать эту программу через OpenGl в Delphi 7 сколько голову не ломал не понимаю....
Мне необходимо вывести таблицу на экран из трех столбцов, а количество строк задается произвольно, но не больше 6 и не меньше 2. В каждой ячейке находится какойто символ или цифра, которые тоже задаются произвольно и они должны вращаться вокруг своего центра по оси Y
______________________
__F__!__1____!___5____!
__-__!__26___!___10___!
__> _!_23____!___456__!
__R__!_45____!___2____!
С одной вращающейся цифрой я вроде разобрался (в книге Краснова есть пример), а вот как реализовать эту программу через OpenGl в Delphi 7 сколько голову не ломал не понимаю....
Доброго времени суток. Есть функция сжатия xml файла, при сжатии коверкает русский текст. При распаковке, в cxGrid'e выглядит так: Сигареты "Winston Lights" Р Р‘. Подскажите пож как это можно исправить? Или при запаковке (лучше всего) или при отображении в гриде (менял charset не помогло). Заранее благодарен.
Запаковка:
[more]
procedure CompressStream(inpStream, outStream: Tstream);
var
InpBuf, OutBuf: Pointer;
InpBytes, OutBytes: Integer;
begin
InpBuf := nil;
OutBuf := nil;
try
GetMem(InpBuf, inpStream.Size);
inpStream.Position := 0;
InpBytes := inpStream.Read(InpBuf^, inpStream.Size);
CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
outStream.Write(OutBuf^, OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
end;
function CompressFile(fname, sXTR: string): string;
var
strl: TStringList;
ms1, ms2: TMemoryStream;
begin
Result := '';
strl := TStringList.Create();
strl.LoadFromFile(fname);
ms1 := TMemoryStream.Create;
try
ms2 := TmemoryStream.Create;
try
strl.SavetoStream(ms1);
CompressStream(ms1, ms2);
ms2.SavetoFile(sXTR);
Result := strl.Text
finally
ms1.Free;
end;
finally
ms2.Free;
end;
strl.Free;
end;
[/more]
Запаковка:
[more]
procedure CompressStream(inpStream, outStream: Tstream);
var
InpBuf, OutBuf: Pointer;
InpBytes, OutBytes: Integer;
begin
InpBuf := nil;
OutBuf := nil;
try
GetMem(InpBuf, inpStream.Size);
inpStream.Position := 0;
InpBytes := inpStream.Read(InpBuf^, inpStream.Size);
CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
outStream.Write(OutBuf^, OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
end;
function CompressFile(fname, sXTR: string): string;
var
strl: TStringList;
ms1, ms2: TMemoryStream;
begin
Result := '';
strl := TStringList.Create();
strl.LoadFromFile(fname);
ms1 := TMemoryStream.Create;
try
ms2 := TmemoryStream.Create;
try
strl.SavetoStream(ms1);
CompressStream(ms1, ms2);
ms2.SavetoFile(sXTR);
Result := strl.Text
finally
ms1.Free;
end;
finally
ms2.Free;
end;
strl.Free;
end;
[/more]
victorman2010
научитесь правильно задавать вопрос.
посмотрев на ваш код и погуглив
CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
получим zlib
_http://www.delphisources.ru/pages/faq/base/compress_and_uncompress_threads.html
иначе полный код упаковки/распаковки в студию
научитесь правильно задавать вопрос.
посмотрев на ваш код и погуглив
CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
получим zlib
_http://www.delphisources.ru/pages/faq/base/compress_and_uncompress_threads.html
иначе полный код упаковки/распаковки в студию
greenpc
procedure TfrmMain.N3Click(Sender: TObject);
begin
try
XMLTransformProvider1.XMLDataFile := 'C:\_zx.xml';
XMLTransformProvider1.TransformRead.TransformationFile := 'OXtrans.xtr';
XMLTransformProvider1.TransformWrite.TransformationFile := 'toxml.xtr';
ClientDataSet1.ApplyUpdates(-1);
CompressFile('C:\_zx.xml', sXTR);
Application.MessageBox('Сохранение прошло успешно', 'Сохранение', MB_OK);
except
Application.MessageBox('Ошибка при сохранении файла!', 'Ошибка!', MB_OK+MB_ICONSTOP);
exit;
end;
end;
procedure TfrmMain.N3Click(Sender: TObject);
begin
try
XMLTransformProvider1.XMLDataFile := 'C:\_zx.xml';
XMLTransformProvider1.TransformRead.TransformationFile := 'OXtrans.xtr';
XMLTransformProvider1.TransformWrite.TransformationFile := 'toxml.xtr';
ClientDataSet1.ApplyUpdates(-1);
CompressFile('C:\_zx.xml', sXTR);
Application.MessageBox('Сохранение прошло успешно', 'Сохранение', MB_OK);
except
Application.MessageBox('Ошибка при сохранении файла!', 'Ошибка!', MB_OK+MB_ICONSTOP);
exit;
end;
end;
victorman2010
ладно попробую обяснить по другому
Цитата:
надеюсь sXTR присвоили значение?
тогда сделайте DECompressFile(sXTR, 'C:\_zx1.xml');
и сравните файлы. Ошибка точно в zlib?
PS полный код распаковки в студию
ладно попробую обяснить по другому
Цитата:
CompressFile('C:\_zx.xml', sXTR);
надеюсь sXTR присвоили значение?
тогда сделайте DECompressFile(sXTR, 'C:\_zx1.xml');
и сравните файлы. Ошибка точно в zlib?
PS полный код распаковки в студию
greenpc
Открытие файла: [more]
procedure TfrmMain.N2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
try
sXTR := OpenDialog1.Filename;
sXML := ExtractFile(sXTR);
except
Application.MessageBox('Ошибка при разархивировании файла!', 'Ошибка!', MB_OK+MB_ICONSTOP);
exit;
end;
XML := TXMLDocument.Create(nil);
XML.LoadFromXML(sXML);
XML.Active := true;
XML.SaveToFile('C:\_zx.xml');
ClientDataSet1.Close;
XMLTransform1.SourceXmlFile := 'C:\_zx.xml';
XMLTransform1.TransformationFile := 'OXtrans.xtr';
ClientDataSet1.XMLData := XMLTransform1.data;
ClientDataSet1.Open;
ClientDataSet2.Close;
ClientDataSet2.Open;
ClientDataSet2.Last;
cxGrid2DBTableView1Point.EditValue := strtoint(ClientDataSet2.FieldByName('point').asstring);
ClientDataSet2.First;
cxGrid2DBTableView1Point.EditValue := strtoint(ClientDataSet2.FieldByName('point').asstring);
end
else
end;
[/more]
Распаковка: [more]
unit UtilsUnit;
interface
uses SysUtils, CheckLst, Classes, ZLib, math;
function TimeToSQL(Data:TDateTime):String;
function DateToSQL(Data:TDateTime):String;
function DateTimeToSQL(Data:TDateTime):String;
function ExtractFile(fname: string): String;
function CompressFile(fname, sXTR: string): String;
procedure SelectAll(var strlist:TCheckListBox);
procedure UnSelectAll(var strlist:TCheckListBox);
function fRound(Value :Extended): Extended; //АЗС
implementation
uses StdCtrls;
function TimeToSQL(Data:TDateTime):String;
var hh,mm,ss,ms:word;
begin
DecodeTime(Data, hh, mm, ss, ms);
TimeToSQL:=''''+IntToStr(hh)+':'+IntToStr(mm)+':'+IntToStr(ss)+'.'+IntToStr(ms)+'''';
end;
function DateToSQL(Data:TDateTime):String;
var y,m,d:word;
begin
DecodeDate(Data,y,m,d);
if (y<80) then y:=y+2000;
DateToSQL:=''''+IntToStr(y)+'-'+IntToStr(m)+'-'+IntToStr(d)+'''';
end;
function DateTimeToSQL(Data:TDateTime):String;
var y,m,d,hh,mm,ss,ms:word;
begin
DecodeDate(Data,y,m,d);
if (y<80) then y:=y+2000;
DecodeTime(Data, hh, mm, ss, ms);
DateTimeToSQL:=''''+IntToStr(y)+'-'+IntToStr(m)+'-'+IntToStr(d)+' '+IntToStr(hh)+':'+IntToStr(mm)+':'+IntToStr(ss)+'.'+IntToStr(ms)+'''';
end;
procedure DecompressStream(inpStream, outStream: Tstream);
var
InpBuf, OutBuf: Pointer;
OutBytes, sz: Integer;
begin
InpBuf := nil;
OutBuf := nil;
sz := inpStream.Size - inpStream.Position;
if sz > 0 then
try
GetMem(InpBuf, sz);
inpStream.Read(InpBuf^, sz);
DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
outStream.Write(OutBuf^, OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
outStream.Position := 0;
end;
function ExtractFile(fname: string): string;
var
strl: TStringList;
ms1, ms2: TMemoryStream;
// rez: AnsiString;
begin
// rez := '';
Result := '';
strl := TStringList.Create();
ms1 := TMemoryStream.Create;
try
ms2 := TmemoryStream.Create;
try
ms1.LoadFromFile(fname);
DecompressStream(ms1, ms2);
strl.LoadFromStream(ms2);
//debug strl.SaveToFile('c:\3.3');
// rez:=strl.Text;
Result := strl.Text
finally
ms1.Free;
end;
finally
ms2.Free;
end;
strl.Free;
// ExtractFile:=rez;
end;
procedure SelectAll(var strlist:TCheckListBox);
var
i:Integer;
begin
for i:=0 to strlist.Count-1 do
begin
strlist.Checked[i ]:=True;
end;
end;
procedure UnSelectAll(var strlist:TCheckListBox);
var
i:Integer;
begin
for i:=0 to strlist.Count-1 do
begin
strlist.Checked[i ]:=False;
end;
end;
//Верная фукция округляния, которая используется на АЗС
function fRound(Value :Extended): Extended;
begin
if(Value >= 0) then
Result := ROUND(Value+0.000001)
else
Result := ROUND(Value-0.000001);
end;
///////////////////////////////////////////////////////////////////////////
procedure CompressStream(inpStream, outStream: Tstream);
var
InpBuf, OutBuf: Pointer;
InpBytes, OutBytes: Integer;
begin
InpBuf := nil;
OutBuf := nil;
try
GetMem(InpBuf, inpStream.Size);
inpStream.Position := 0;
InpBytes := inpStream.Read(InpBuf^, inpStream.Size);
CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
outStream.Write(OutBuf^, OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
end;
function CompressFile(fname, sXTR: string): string;
var
strl: TStringList;
ms1, ms2: TMemoryStream;
// rez: AnsiString;
begin
// rez := '';
Result := '';
strl := TStringList.Create();
strl.LoadFromFile(fname);
ms1 := TMemoryStream.Create;
try
ms2 := TmemoryStream.Create;
try
strl.SavetoStream(ms1);
CompressStream(ms1, ms2);
//ms2.SavetoFile('D:\OX660912.005');
ms2.SavetoFile(sXTR);
//debug strl.SaveToFile('c:\3.3');
// rez:=strl.Text;
Result := strl.Text
finally
ms1.Free;
end;
finally
ms2.Free;
end;
strl.Free;
// ExtractFile:=rez;
end;
end.
[/more]
Добавлено:
Распаковывает вроде правильно, когда файл первый раз загружаю все отображается нормально, а вот после сохранения коверкает русский текст.
Открытие файла: [more]
procedure TfrmMain.N2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
try
sXTR := OpenDialog1.Filename;
sXML := ExtractFile(sXTR);
except
Application.MessageBox('Ошибка при разархивировании файла!', 'Ошибка!', MB_OK+MB_ICONSTOP);
exit;
end;
XML := TXMLDocument.Create(nil);
XML.LoadFromXML(sXML);
XML.Active := true;
XML.SaveToFile('C:\_zx.xml');
ClientDataSet1.Close;
XMLTransform1.SourceXmlFile := 'C:\_zx.xml';
XMLTransform1.TransformationFile := 'OXtrans.xtr';
ClientDataSet1.XMLData := XMLTransform1.data;
ClientDataSet1.Open;
ClientDataSet2.Close;
ClientDataSet2.Open;
ClientDataSet2.Last;
cxGrid2DBTableView1Point.EditValue := strtoint(ClientDataSet2.FieldByName('point').asstring);
ClientDataSet2.First;
cxGrid2DBTableView1Point.EditValue := strtoint(ClientDataSet2.FieldByName('point').asstring);
end
else
end;
[/more]
Распаковка: [more]
unit UtilsUnit;
interface
uses SysUtils, CheckLst, Classes, ZLib, math;
function TimeToSQL(Data:TDateTime):String;
function DateToSQL(Data:TDateTime):String;
function DateTimeToSQL(Data:TDateTime):String;
function ExtractFile(fname: string): String;
function CompressFile(fname, sXTR: string): String;
procedure SelectAll(var strlist:TCheckListBox);
procedure UnSelectAll(var strlist:TCheckListBox);
function fRound(Value :Extended): Extended; //АЗС
implementation
uses StdCtrls;
function TimeToSQL(Data:TDateTime):String;
var hh,mm,ss,ms:word;
begin
DecodeTime(Data, hh, mm, ss, ms);
TimeToSQL:=''''+IntToStr(hh)+':'+IntToStr(mm)+':'+IntToStr(ss)+'.'+IntToStr(ms)+'''';
end;
function DateToSQL(Data:TDateTime):String;
var y,m,d:word;
begin
DecodeDate(Data,y,m,d);
if (y<80) then y:=y+2000;
DateToSQL:=''''+IntToStr(y)+'-'+IntToStr(m)+'-'+IntToStr(d)+'''';
end;
function DateTimeToSQL(Data:TDateTime):String;
var y,m,d,hh,mm,ss,ms:word;
begin
DecodeDate(Data,y,m,d);
if (y<80) then y:=y+2000;
DecodeTime(Data, hh, mm, ss, ms);
DateTimeToSQL:=''''+IntToStr(y)+'-'+IntToStr(m)+'-'+IntToStr(d)+' '+IntToStr(hh)+':'+IntToStr(mm)+':'+IntToStr(ss)+'.'+IntToStr(ms)+'''';
end;
procedure DecompressStream(inpStream, outStream: Tstream);
var
InpBuf, OutBuf: Pointer;
OutBytes, sz: Integer;
begin
InpBuf := nil;
OutBuf := nil;
sz := inpStream.Size - inpStream.Position;
if sz > 0 then
try
GetMem(InpBuf, sz);
inpStream.Read(InpBuf^, sz);
DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
outStream.Write(OutBuf^, OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
outStream.Position := 0;
end;
function ExtractFile(fname: string): string;
var
strl: TStringList;
ms1, ms2: TMemoryStream;
// rez: AnsiString;
begin
// rez := '';
Result := '';
strl := TStringList.Create();
ms1 := TMemoryStream.Create;
try
ms2 := TmemoryStream.Create;
try
ms1.LoadFromFile(fname);
DecompressStream(ms1, ms2);
strl.LoadFromStream(ms2);
//debug strl.SaveToFile('c:\3.3');
// rez:=strl.Text;
Result := strl.Text
finally
ms1.Free;
end;
finally
ms2.Free;
end;
strl.Free;
// ExtractFile:=rez;
end;
procedure SelectAll(var strlist:TCheckListBox);
var
i:Integer;
begin
for i:=0 to strlist.Count-1 do
begin
strlist.Checked[i ]:=True;
end;
end;
procedure UnSelectAll(var strlist:TCheckListBox);
var
i:Integer;
begin
for i:=0 to strlist.Count-1 do
begin
strlist.Checked[i ]:=False;
end;
end;
//Верная фукция округляния, которая используется на АЗС
function fRound(Value :Extended): Extended;
begin
if(Value >= 0) then
Result := ROUND(Value+0.000001)
else
Result := ROUND(Value-0.000001);
end;
///////////////////////////////////////////////////////////////////////////
procedure CompressStream(inpStream, outStream: Tstream);
var
InpBuf, OutBuf: Pointer;
InpBytes, OutBytes: Integer;
begin
InpBuf := nil;
OutBuf := nil;
try
GetMem(InpBuf, inpStream.Size);
inpStream.Position := 0;
InpBytes := inpStream.Read(InpBuf^, inpStream.Size);
CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
outStream.Write(OutBuf^, OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
end;
function CompressFile(fname, sXTR: string): string;
var
strl: TStringList;
ms1, ms2: TMemoryStream;
// rez: AnsiString;
begin
// rez := '';
Result := '';
strl := TStringList.Create();
strl.LoadFromFile(fname);
ms1 := TMemoryStream.Create;
try
ms2 := TmemoryStream.Create;
try
strl.SavetoStream(ms1);
CompressStream(ms1, ms2);
//ms2.SavetoFile('D:\OX660912.005');
ms2.SavetoFile(sXTR);
//debug strl.SaveToFile('c:\3.3');
// rez:=strl.Text;
Result := strl.Text
finally
ms1.Free;
end;
finally
ms2.Free;
end;
strl.Free;
// ExtractFile:=rez;
end;
end.
[/more]
Добавлено:
Распаковывает вроде правильно, когда файл первый раз загружаю все отображается нормально, а вот после сохранения коверкает русский текст.
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
Предыдущая тема: Clipper 5
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.