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

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

Автор: pavlo1704
Дата сообщения: 16.01.2010 15:40
Народ, подскажите, как в Delphi 7 создать интерфейс, похожий на 1С Предприятие. Необходимо, чтобы в главном окне приложения открывались другие формы и их можно было бы перемещать только в пределах основной формы, возможно ли это ? подскажите технологию
Автор: Frodo_Torbins
Дата сообщения: 16.01.2010 15:50
pavlo1704
MDI - раз, управление свойством Parent дочерних форм - два.
Автор: pavlo1704
Дата сообщения: 16.01.2010 16:52
Frodo_Torbins
Спасибо большое! Теперь я понял, что к чему
Автор: JohnSilver182
Дата сообщения: 16.01.2010 21:02
Hi All
А есть компонент-шедулер под делфи . Что бы не воротить кучу гов... в компоненте TTimer .
Автор: data man
Дата сообщения: 16.01.2010 21:17
JohnSilver182

Я пользуюсь описанным здесь Таймер, который не подведет
Там есть синхронизированный таймер, в котором моменты срабатывания задаются в формате строки CRON, очень удобно.

Ну и в JCL/JVCL есть навороченный вариант.
Автор: JohnSilver182
Дата сообщения: 16.01.2010 21:44
data man А вот я когда то юзал его на WinNt 4.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;
Автор: data man
Дата сообщения: 16.01.2010 21:50
JohnSilver182
Цитата:
начались глюки

Возможно, но он уже несколько раз обновлялся.


Цитата:
А как выцепить Pchar из LPARAM ??????

Скорее всего, проблема из-за того, что функции создания таймеров импортируются из DLL.
Я пользуюсь модифицированной версией без DLL, как автор советовал в статье.
Автор: EugeneBoss3
Дата сообщения: 16.01.2010 23:30
snike555

Цитата:
TDBF, ADO подойдут?

Пытался использовать TDBF, но он почему-то OEM кодировку не транслирует - получается кракобяки
Автор: VadimLou
Дата сообщения: 17.01.2010 02:13

Цитата:
OEM

vkDBF: _http:\\vlad-karpov.narod.ru
ps: Под себя подпиливал автодетект oem/ansi + кривывые файлы с одинаковыми именами полей...
Автор: MSx213
Дата сообщения: 17.01.2010 18:28
люди вопрос...
Есть компонент WebBrowser и открыта html страничка с кнопкой типа submit, как мне сделать чтобы прога програмно нажимала на эту кнопку(html)
Автор: andrewtishkin
Дата сообщения: 17.01.2010 23:19
MSx213
Если конечная цель - сделать POST-запрос (отправка заполненной формы), то достичь её можно гораздо более правильными и неизвращёнными способами. Гугль в помощь
Автор: victorman2010
Дата сообщения: 18.01.2010 09:00
Доброго времени суток,
подскажите пож, как решить проблему с региональными настройками (вместо точки должна быть запятая).
Есть дата в виде : 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, но так и не понял как его реализовать здесь.
Заранее благодарен.

Добавлено:
Вопрос снят.
Автор: psa1974
Дата сообщения: 18.01.2010 09:50
victorman2010
Для установки десятичного разделителя юзай глобальную переменную DecimalSeparator:

Код: DecimalSeparator:= ',';
Автор: MSx213
Дата сообщения: 18.01.2010 10:15
andrewtishkin
в общем это и есть пост запрос. Прогу пробую писать для массовой рассылки на torrents.by. Но я находил пакет, в нем было само сообщение, тема и другие данные. Пробовал отправить этот пакет снова, но сообщение не приходило... Кто знает?

PS поэтому и такие замуты)
Автор: SIgor33
Дата сообщения: 18.01.2010 16:14
есть программа под названием asbase(СУБД) изпользутся ФМС у них самописное на паскале ядро ни кто незнает структуры этой базы и чем к ней можно подцепиться?
Автор: neznayka3
Дата сообщения: 18.01.2010 23:28
надо написать приложение, которое будет находится на музыкальном CD\DVD. при запуске на PC показывало список треков. при вставке в CD\DVD плейер диск ввел себя как обычный музыкальный.
подскажите куда копать.
Автор: V1s1ter
Дата сообщения: 19.01.2010 01:15
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
Автор: neznayka3
Дата сообщения: 19.01.2010 06:58
V1s1ter
WinAmp может, но при запуске на PC кроме списка треков на форме еще будет различная информация: логотип, контактная информация и тд. главная проблема, как прочитать заголовки треков и будет ли диск проигрываться в cd плеерах, если на нем будут файлы exe, Autoran.ini
Автор: victorman2010
Дата сообщения: 19.01.2010 08:25
Доброго времени суток.
По нету приходят 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);
Автор: esvrab
Дата сообщения: 19.01.2010 10:13
Господа, как в Дельфи 7 сделать в панели свойств возможность редактирования свойства Caption в много строчном режиме?
Автор: Frodo_Torbins
Дата сообщения: 19.01.2010 11:40
esvrab
http://www.delphikingdom.com/asp/itemq.asp?mode=1&itemid=160
Автор: jonikDk
Дата сообщения: 19.01.2010 12:38
esvrab
надо написать(найти) и установить редактор свойств для соответствующего типа.
Автор: greenpc
Дата сообщения: 19.01.2010 13:40
victorman2010

Цитата:
чтобы в гриде отобразилась десятичная

_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
Автор: V1s1ter
Дата сообщения: 19.01.2010 15:46
neznayka3

Цитата:
главная проблема, как прочитать заголовки треков

Что бы упростить себе жизнь предлагаю не читать треки, а создать заранее файл лист, который и отображать.

Цитата:
будет ли диск проигрываться в cd плеерах, если на нем будут файлы exe, Autoran.ini
В большенстве случаев будут, в ранее выложенной ссылке об этом было написано. Программы пишутся в первый трек, аудио в остальные.
Автор: crazypiggy
Дата сообщения: 20.01.2010 09:07
Доброго всем дня. Я новичок в программировании OpenGL, а мне через пару дней сдавать програмку. Никак не могу с ней разобраться. Буду очень благодарен если поможете примером.
Мне необходимо вывести таблицу на экран из трех столбцов, а количество строк задается произвольно, но не больше 6 и не меньше 2. В каждой ячейке находится какойто символ или цифра, которые тоже задаются произвольно и они должны вращаться вокруг своего центра по оси Y
______________________
__F__!__1____!___5____!
__-__!__26___!___10___!
__> _!_23____!___456__!
__R__!_45____!___2____!
С одной вращающейся цифрой я вроде разобрался (в книге Краснова есть пример), а вот как реализовать эту программу через OpenGl в Delphi 7 сколько голову не ломал не понимаю....
Автор: victorman2010
Дата сообщения: 20.01.2010 09:52
Доброго времени суток. Есть функция сжатия 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]
Автор: greenpc
Дата сообщения: 20.01.2010 10:13
victorman2010
научитесь правильно задавать вопрос.
посмотрев на ваш код и погуглив
CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
получим zlib
_http://www.delphisources.ru/pages/faq/base/compress_and_uncompress_threads.html
иначе полный код упаковки/распаковки в студию
Автор: victorman2010
Дата сообщения: 20.01.2010 10:29
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;
Автор: greenpc
Дата сообщения: 20.01.2010 10:44
victorman2010
ладно попробую обяснить по другому

Цитата:
CompressFile('C:\_zx.xml', sXTR);

надеюсь sXTR присвоили значение?
тогда сделайте DECompressFile(sXTR, 'C:\_zx1.xml');
и сравните файлы. Ошибка точно в zlib?
PS полный код распаковки в студию
Автор: victorman2010
Дата сообщения: 20.01.2010 11:00
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]




Добавлено:
Распаковывает вроде правильно, когда файл первый раз загружаю все отображается нормально, а вот после сохранения коверкает русский текст.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Clipper 5


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