Member
Статус: Не в сети Регистрация: 06.02.2006 Откуда: Одесса
Xupyp1 писал(а):
Почему-то кажется, что какую-то глупость сморозил
ничего глупого нет.....
можете поковырять разные fileopen и тп. Если б текст был не ртф а бычный было бы проще.... самый сложный путь читать обычными функциями и самому производить формирование документа... т.е. в плане делфи - изобретать велосипед. А вообще гляньте на библиотеку JVCL - там множество полезных классов в т.ч. и для чтения файлов разного типа.
Member
Статус: Не в сети Регистрация: 15.02.2005 Откуда: Минск
Народ, подскажите плиз алгоритм решения уравнения 5го порядка (АХ**5 + ВХ**4 + СХ**3 + DX**2 + EX + F = 0) в делфе. Необходимо найти положительные корни.
Качнул чуть больше 10Мб распаковалось на 180Мб Смотрел, смотрел классы и бросил Лучше, имхо, нечто типо архиватора использовать. Тобиш хранить все ресурсы в защищенном архиве. При необходимости можно дополнительно подключить шифрующие модули. Получится сейф в сейфе
Сейчас нахожусь в состоянии эйфории т.к. такую прогу сделал... Одно обстоятельство лишь беспокоит. Практически пустой файл данных занимает не меньше полуметра дискового пространства Получилось это изза того, что я пишу в файл структуру:
Код:
TAnswers = record Data : array[0..50] of String[255]; isGood : array[0..50] of byte; Count : byte; end;
TQuastion = record Text : string[255]; QType : byte; TimeSec : integer; Answers : TAnswers; end;
TQuastions = record Data : array[0..50] of TQuastion; Count : byte; Used : array[0..50] of byte; UCount : byte; end;
TTest = record Quastions : TQuastions; Name : string[255]; end;
TResultInfo = record UserName : string[255]; RCount : byte; R : array[0..50] of byte; end;
Пишется в файл методом Write :
Код:
var sd : TSaveDialog; begin sd := TSaveDialog.Create(frmMain); try sd.Filter:='Файлы Тестов (*.btst)|*.btst|Все файлы (*.*)|*.*'; sd.DefaultExt:='btst'; sd.FilterIndex:=0; if sd.Execute then begin AssignFile(f, sd.FileName); Rewrite(f); //f file of TTest; if Test.Name='Безымянный тест' then Test.Name:=ExtractFileName(sd.FileName); Test.Quastions:=Quastions; Write(f, Test); CloseFile(f); end; finally TestFileName:=sd.FileName; sd.Free; end;
Member
Статус: Не в сети Регистрация: 06.02.2006 Откуда: Одесса
Xupyp1 писал(а):
Сейчас нахожусь в состоянии эйфории т.к. такую прогу сделал... Одно обстоятельство лишь беспокоит.Практически пустой файл данных занимает не меньше полуметра дискового пространства
в JVCL есть компоненты для архивировани\разархивирования файлов в зип формат - сам их юзаю
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
Народ, ни у кого случаем не завалялась где-нибудь функция, преобразующая двоичное число в десятичное? А то вот откапал такую:
Код:
function BinToInt(Value: String): Integer; var i,Size: Integer; begin Result:=0; Size:=Length(Value); for i:=Size downto 0 do begin if Copy(Value,i,1)='1' then begin Result:=Result+(1 shl i); end; end; end;
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
Xupyp1 Спасибо. Но у меня эта функция как-то интересно работает - только с шестнадцатиричными числами, представленными буквенными символами (типа AFDC, AEFF и т. п.). Но мне надо бы перевести из двоичной системы в десятичную... В общем подумал немного и решил сам написать такую функцию. А потом в нете случайно нашёл как раз то что нужно. Вот, может кому-нибудь пригодится:
Код:
function BinToInt(BinStr : string) : Int64; var i : byte; RetVar : Int64; begin BinStr := UpperCase(BinStr); if BinStr[length(BinStr)] = 'B' then Delete(BinStr,length(BinStr),1); RetVar := 0; for i := 1 to length(BinStr) do begin if not (BinStr[i] in ['0','1']) then begin RetVar := 0; Break; end; RetVar := (RetVar shl 1) + (byte(BinStr[i]) and 1) ; end;
Result := RetVar; end;
Для обратного перевода (из десятичной СИ в двоичную) юзаю это:
Код:
function IntToBin(Value: Integer;Size: Integer): String; var i: Integer; begin Result:=''; for i:=Size downto 0 do begin if Value and (1 shl i)<>0 then begin Result:=Result+'1'; end else begin Result:=Result+'0'; end; end; end;
Народ, а как прочитать параметр запуска приложения?
В моем случае передается путь к файлу.
Разумеется он содержит немало пробелов Как вы понимаете этот самый путь делится на куски и записывается в массив ParamStr
Я этот самый параметр читаю таким образом:
Код:
CMDLine:=''; For i:=1 to ParamCount do CMDLine:=CMDLine+ParamStr(i)+' '; ShowMessage(CMDLine);
Имхо, это криво до невозможности Есть какой-то другой способ?
TBookFolder = record FolderName : string; Items : array of TBookItem; end;
TBook = record BookName : string; AuthorName : string; RootFolders: array of TBookFolder; RootItems: array of TBookItem; end;
Везде String'и и динамические массивы В результате получился геморрой....
Код:
procedure SaveBook(filename: string); var tmpstr:array[0..255] of AnsiChar; fileh: System.Cardinal; i,j,k,dwWritten:dword; begin strpcopy(tmpstr, filename); fileh:=CreateFile(tmpstr, GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0); if fileh<>INVALID_HANDLE_VALUE then begin strpcopy(tmpstr, Book.BookName); i:=length(Book.BookName); WriteFile(fileh, &i, sizeof(i), &dwWritten, nil); WriteFile(fileh, tmpstr, i, &dwWritten, nil); i:=length(Book.AuthorName); strpcopy(tmpstr, Book.AuthorName); WriteFile(fileh, &i, sizeof(i), &dwWritten, nil); WriteFile(fileh, tmpstr, i, &dwWritten, nil); i:=length(Book.RootItems); WriteFile(fileh, &i, sizeof(i), &dwWritten, nil); if i > 0 then begin for i := 0 to length(Book.RootItems) - 1 do begin j:=length(Book.RootItems[i].ItemName); strpcopy(tmpstr, Book.RootItems[i].ItemName); WriteFile(fileh, &j, sizeof(j), &dwWritten, nil); WriteFile(fileh, tmpstr, j, &dwWritten, nil);
j:=length(Book.RootItems[i].TstFileName); strpcopy(tmpstr, Book.RootItems[i].TstFileName); WriteFile(fileh, &j, sizeof(j), &dwWritten, nil); WriteFile(fileh, tmpstr, j, &dwWritten, nil); end; end; i:=length(Book.RootFolders); WriteFile(fileh, &i, sizeof(i), &dwWritten, nil); if i > 0 then begin for i := 0 to length(Book.RootFolders) - 1 do begin j:=length(Book.RootFolders[i].FolderName); strpcopy(tmpstr, Book.RootFolders[i].FolderName); WriteFile(fileh, &j, sizeof(j), &dwWritten, nil); WriteFile(fileh, tmpstr, j, &dwWritten, nil); j:=length(Book.RootFolders[i].Items); WriteFile(fileh, &j, sizeof(j), &dwWritten, nil); if j > 0 then begin for k := 0 to length(Book.RootFolders[i].Items) - 1 do begin j:=length(Book.RootFolders[i].Items[k].ItemName); strpcopy(tmpstr, Book.RootFolders[i].Items[k].ItemName); WriteFile(fileh, &j, sizeof(j), &dwWritten, nil); WriteFile(fileh, tmpstr, j, &dwWritten, nil);
Я к чему это пишу - хочу сделать запись непосредственно самих файлов данных (*.rtf, *.txt, *.btst), а не путей. Писать хочу в сам исполняемый файл приложения (просмотрощика) Пока получился такой код:
Код:
procedure SaveToExe(filename:string); var tmpstr:array[0..255] of AnsiChar; fileh: System.Cardinal; i,j,k,dwWritten,sz:dword; appendfileDLL: HMODULE; appendFile: TAppendFile; begin appendfileDLL:=LoadLibrary('fileappend.dll');
Member
Статус: Не в сети Регистрация: 23.12.2004 Откуда: Беларусь, Минск
Как определить наведение мыши на контрол?
Сначала поумал - OnMouseOver - но это не из той оперы:), затем ничего интересного не нашёл и пока просто отслеживаю координаты мышки по таймеру
_________________ ASUS A4M88T-M, Athlon II X3 425, 2GB NCP, video - internal ATI 4250, 200GB Samsung HDD, Win7 x64
Member
Статус: Не в сети Регистрация: 20.05.2006 Откуда: Мин-Воды
Подскажите подалуйста, как распечатать базу данных, используя RAVE report.не могу разобрать с компонетами Band и data band в самом рэйв репорте, объясните плз как пользоваца ими
Member
Статус: Не в сети Регистрация: 16.04.2006 Откуда: d3d9.dll Фото: 7
Даже не надеюсь что кто-то ответит на столь специфический вопрос... но всё же, вдруг кто-нибудь уже работал в этой области и даст хоть какой-то совет. В общем есть Edit, в котором записано число в двоичной системе (напр. 11001000). Нужно передать это число ввиде одного байта в буфер СОМ-порта. В нете нашёл множество примеров как передавать в СОМ-порт символы (но тогда будет передано 8 байт, а не 8 бит, т. е. каждый бит байта передаётся как символ). А как можно передать двоичное число не ввиде символа?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения