Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2021, 18:29   #111
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
procedure TForm1.BeforeConvert(Sender: TObject; barMax: Integer);
begin
Bin2Hex.Enabled := False;
Bin2Srec.Enabled := False;
ConvBar.Max := barMax;
end;
Как вызывается эта процедура ? ( щёлкнуть по кнопки, по форме?).
Код у нас по Hex, а зачем тогда
Bin2Srec.Enabled := False; ?
Не понял как вызывается процедура, да и за чем ? разве в общем коде нельзя прописать ?

Цитата:
Сообщение от BDA Посмотреть сообщение
procedure TForm1.AfterConvert(Sender: TObject);
begin
Bin2Hex.Enabled := True;
Bin2Srec.Enabled := True;
ConvBar.Position := 0;
end;
Тоже не понятна процедура вызова и разве в общем коде не проще прописать ?

Цитата:
Сообщение от BDA Посмотреть сообщение
procedure TForm1.getOffset(var offset: Int64);
begin
if Edit1.Text = '' then
begin
offset := 0;
Exit;
end;
offset := StrToInt64Def('$' + Edit1.text, -1);
if offset = -1 then
raise Exception.Create('Введен некорректный адрес, с которого производить запись в файл!');
if offset > Limit32 then
raise Exception.Create('Слишком большой адрес!');
end;
Тоже не понятна как вызывается процедура и за чем ? можно же в коде общем?.

Три процедуры не понятны совсем и как вызываются и за чем , если эти моменты в общем коде можно прописать.

Последний раз редактировалось BDA; 30.03.2021 в 00:27.
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 18:36   #112
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 6,005
По умолчанию

Цитата:
Сообщение от sergey.serg-72
Как вызывается эта процедура ?
BeforeConvert и AfterConvert вызываются в Bin2HexClick.
Цитата:
Сообщение от sergey.serg-72
зачем тогда Bin2Srec.Enabled := False; ?
Потому что добавил на форму уже кнопку для srec.
Цитата:
Сообщение от sergey.serg-72
разве в общем коде нельзя прописать ?
Можно и в общем прописать. Просто код постепенно изменяется, чтобы поддерживать в одной программе преобразование в hex и в srec. Общая часть с отключением и включением кнопок была вынесена в BeforeConvert и AfterConvert.
Цитата:
Сообщение от sergey.serg-72
Тоже не понятна как вызывается процедура и за чем
Аналогично. Получение смещения одинаково для hex и srec. Чтобы не писать два раза один и тот же код, он был вынесен в отдельную процедуру.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 28.03.2021, 19:21   #113
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
BeforeConvert и AfterConvert вызываются в Bin2HexClick.
Это как ? ведь процедура Bin2HexClick. Это клик по кнопке SpeedButton просто кнопка переименована на Bin2HexClick. И вторая процедура BeforeConvert и AfterConver не прописываются, компилятор в ошибку уходит (ошибка идентификации), у меня не получаются эти процедуры.

Сделал так :

Код:
 procedure TForm1.Bin2HexClick(Sender: TObject);
const
BYTES_IN_LINE = 16;
var
fbin, ftxt: TFileStream;
s, data_s: string;
b: TBytes;
offset: Int64;
i, count, high_addr, cur_high_addr: integer;
sum: byte;
low_addr: word;
start_conv, end_conv: TDateTime;
begin
if Edit1.Text = '' then
offset := 0
else
begin
offset := StrToInt64Def('$' + Edit1.text, -1);
if offset = -1 then
begin
Application.MessageBox(
'Введен некорректный адрес, с которого производить запись в файл!',
'Converter',
MB_Ok + MB_ICONERROR);
exit;
end
else if offset > High(LongWord) then
begin
Application.MessageBox('Слишком большой адрес!', 'Converter', MB_Ok + MB_ICONERROR);
exit;
end;
end;
 dlgOpen1.Filter := ' (*.bin)|*.bin';
if not dlgOpen1.Execute then
exit;
fbin := TFileStream.Create(dlgOpen1.FileName, fmOpenRead or fmShareDenyWrite);
if fbin.Size > Limit32 then
raise Exception.Create('Слишком большой файл!');
if fbin.Size + offset > Limit32 then
raise Exception.Create('Слишком большой адрес конца файла!');
dlgSave1.Filter := 'Intel HEX File (*.hex)|*.hex';dlgSave1.FileName := ChangeFileExt(dlgOpen1.FileName, '.hex');
if not dlgSave1.Execute then
exit;
ftxt := TFileStream.Create(dlgSave1.FileName, fmCreate or fmShareDenyWrite);
start_conv := Now;
if fbin.Size + offset > High(LongWord) then
begin
Application.MessageBox('Слишком большой адрес!', 'Converter', MB_Ok + MB_ICONERROR);
fbin.Free;
ftxt.Free;
exit;
end;
Bin2Hex.Enabled := False;
ConvBar.Max := fbin.Size div BYTES_IN_LINE;
SetLength(b, BYTES_IN_LINE);
high_addr := -1;
while fbin.Position < fbin.Size do
begin
ConvBar.Visible:=true;
ConvBar.Position := ConvBar.Position + 1;
Application.ProcessMessages;
low_addr := fbin.Position + offset;
cur_high_addr := (fbin.Position + offset) div $10000;
if cur_high_addr <> high_addr then
begin
high_addr := cur_high_addr;
 sum := 6 + high_addr mod $100 + high_addr div $100;
 sum := -sum;
  s := Format(':02000004%.4x%.2x%s', [high_addr, sum, sLineBreak]);
 ftxt.Write(s[1], Length(s));
 end;
 count := fbin.Read(b[0], BYTES_IN_LINE);
 sum := count + low_addr mod $100 + low_addr div $100;
 data_s := '';
 for i := 0 to count - 1 do
  begin
 data_s := data_s + IntToHex(b[i], 2);
Inc(sum, b[i]);
end;
sum := -sum;
s := Format(':%.2x%.4x00%s%.2x%s', [count, low_addr, data_s, sum, sLineBreak]);
ftxt.Write(s[1], Length(s));
end;
s := ':00000001FF' + sLineBreak;
ftxt.Write(s[1], Length(s));

fbin.Free;
ftxt.Free;
Bin2Hex.Enabled := True;
ConvBar.Position := 0;
end_conv := Now;
ConvBar.Visible:=False;
s := Format('Файл успешно преобразован и записан за %d секунд(ы).', [SecondsBetween(start_conv, end_conv)]);
Application.MessageBox(PAnsiChar(s), 'Converter', MB_Ok + MB_ICONINFORMATION);
end;
По скорости не заметил что быстрей в двое , на несколько секунд быстрей.
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 19:30   #114
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Потому что добавил на форму уже кнопку для srec.
Так это получится в одной программе и hex и srec ?
Мне всё ровно hex убирать придётся , моя та тема будет по srec , это значит форма и одна кнопка для srec. Я же не могу сразу и то и это сдать, Джонса Кондратий схватит тут же.....
Это палево сразу...

Последний раз редактировалось sergey.serg-72; 28.03.2021 в 19:37.
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 19:45   #115
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 6,005
По умолчанию

Цитата:
Сообщение от sergey.serg-72
у меня не получаются эти процедуры.
Нужно еще в класс формы (в самом начале юнита) вписать:
Код:
    procedure BeforeConvert(Sender: TObject; barMax: Integer);
    procedure AfterConvert(Sender: TObject);
    procedure getOffset(var offset: Int64);
Цитата:
Сообщение от sergey.serg-72
По скорости не заметил что быстрей в двое
Например, bin файл в 7.7МБ с использованием Memory преобразовывался у меня 14 секунд, а с использованием File - 7 секунд.
Цитата:
Сообщение от sergey.serg-72
Мне всё ровно hex убирать придётся
Это да. Но мне лень хранить кучу версий, поэтому актуальной будет только версия с 2 кнопками (хотя, возможно, кнопка в итоге будет одна).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 28.03.2021, 21:50   #116
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Нужно еще в класс формы (в самом начале юнита) вписать:
Вы имели ввиду где процедуры прописываются, после события ?
type
TForm1 = class(TForm)
dlgOpen1: TOpenDialog;
dlgSave1: TSaveDialog;
Bin2Hex: TSpeedButton;
Edit1: TEdit;
procedure Bin2HexClick(Sender: TObject);
procedure BeforeConvert(Sender: TObject; barMax: Integer);
procedure AfterConvert(Sender: TObject);
procedure getOffset(var offset: Int64);

Блин так я всё правильно делал изначально прописывал.
Сейчас с третьего раза получилось, Дельфи явно тупит что то....
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 21:54   #117
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Например, bin файл в 7.7МБ с использованием Memory преобразовывался у меня 14 секунд, а с использованием File - 7 секунд.
Сейчас провёл эксперимент , файл bin (склеен в редакторе для тестов) размер : 5305411 байт, так вот что с TMemoryStream; 34 секунды, что с TFileStream; 34 секунды трижды тестил, всё одинаково, разницы нет совсем.
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 21:55   #118
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Это да. Но мне лень хранить кучу версий, поэтому актуальной будет только версия с 2 кнопками (хотя, возможно, кнопка в итоге будет одна).
Лучше с двумя кнопками конечно, но как Вам удобней.
sergey.serg-72 вне форума Ответить с цитированием
Старый 29.03.2021, 00:19   #119
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

[QUOTE=sergey.serg-72;1830615]Сейчас провёл эксперимент , файл bin (склеен в редакторе для тестов) размер : 5305411 байт, так вот что с TMemoryStream; 34 секунды, что с TFileStream; 34 секунды трижды тестил, всё одинаково, разницы нет совсем, пару секунд может.
но зато да, с TFileStream загрузил файл с 3,5 Гб и загрузился ведь , хотя потом прервал я процесс, долго очень ждать. А вот с TMemoryStream загрузится система не дала, типа большой файл и фигушки.
sergey.serg-72 вне форума Ответить с цитированием
Старый 31.03.2021, 15:36   #120
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 114
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Это да. Но мне лень хранить кучу версий, поэтому актуальной будет только версия с 2 кнопками (хотя, возможно, кнопка в итоге будет одна).
Цитата:
Сообщение от BDA Посмотреть сообщение
Потому что добавил на форму уже кнопку для srec.
Что то со srec не так ? Мне всё же кажется что srec всё же трудней .
sergey.serg-72 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно создать "батник", вырезать из "2.txt" первых n строк и вставить их в "1.txt" temphard Помощь студентам 2 03.09.2013 15:03
Удаление первых n-строк из txt-файла Neksion Помощь студентам 2 10.07.2013 17:12
Создать чтение из файла и запись в файл txt на С++ skifre Фриланс 0 01.06.2012 15:16
поиск и выципление строк из txt файла D_e_n_n Помощь студентам 7 04.02.2011 05:39
C# Представление txt файла как массива строк asheb Помощь студентам 7 20.04.2010 11:51


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS