Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 8

Получаем HEX-код

15.05.2016, 13:12. Показов 3355. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наткнулся на один пример в сети, Получаем HEX-код, он работает все как надо.
В примере открывает файл и получает HEX-код , а мне надо сделать чтобы из полученного HEX-кода фала преобразовать его обратно в исходный файл и сохранял его.
И будет ли Работать файл после перекодировки через этот пример?

Вот пример который открывает.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
procedure TForm1.Button1Click(Sender: TObject);
var
  F : File;
  Arr : array of Byte;
  S, STmp : String;
  i, j, Size, H, Len : Integer;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then Od.InitialDir := ExtractFilePath( Application.ExeName ); // Если начальный каталог не задан, то он равен дирректории файла проекта
  if not Od.Execute then Exit; // если диалог открытия не вызван, то закрытие
  if not FileExists(Od.FileName) then begin // если файл не найден, то выводится сообщение:
    MessageBox(
      0
      ,'Файл с заданным именем не найден. Действие отменено.'
      ,'Файл не найден'
      ,MB_OK + MB_ICONWARNING + MB_APPLMODAL    //Кнопка OK, тип сообщения - WARNING
    );
    Exit;  // Выход из приложения
  end;
 
  AssignFile(F, Od.FileName); //Привязываем переменную "F" к файлу открытому через диалог открытия
  Reset(F, 1);    //Открываем файл в режиме чтение/запись с минимальным блоком доступа в 1 байт.
  Size:= FileSize(F); //В переменную SIZE ложится размер файла
  SetLength(Arr, Size);   // Изменяем размер массива ARR на число Size
  BlockRead(F, Arr[0], Size);    //Считываем всё содержимое файла в массив Arr.
  CloseFile(F);  //Закрываем файл
 
  //Формируем текст для RichEdit1.
  //Будем формировать текст таким образом, чтобы в каждой строке располагались
  //сведения о 16-ти байтах:
 
  Len := Size * 3 + (Size div 16);
  if Size mod 16 > 0 then Dec(Len);
  SetLength(S, Len);
  H := High(Arr);
  j := 1;
  for i := 0 to H do begin
    STmp := IntToHex(Arr[i], 2);
    S[j] := STmp[1];
    S[j + 1] := STmp[2];
    Inc(j, 2);
    if i = H then Continue;
    if i mod 16 = 15 then begin
      S[j] := #13;
      S[j + 1] := #10;
      Inc(j, 2);
    end else begin
      S[j] := #9;
      Inc(j);
    end;
  end;
 
  RichEdit1.Text := S;
end;
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.05.2016, 13:12
Ответы с готовыми решениями:

Перевести код на Delphi | Получаем угол между точками и дистанцию
Всем Доброго Времени Суток. Нужна помощь светил этого форума. Помогите перевести код на Delphi. double p_x = 80; double p_y =...

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

Перевод Hex в ASCII десятичный код
Добрый день!! Помогите решить задачу. Необходимо перевести из шестьнадцатиричного (8CCCF0B6) в десятичные коды ASCII: (56 67 67 67 70...

6
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
15.05.2016, 19:16
Цитата Сообщение от dinya-zhulik Посмотреть сообщение
чтобы из полученного HEX-кода фала преобразовать его обратно в исходный файл и сохранял его. И будет ли Работать файл после перекодировки через этот пример?
HEX, как и Bin, как и Dec, как и любая иная система исчисления - это всего лишь формат отображения и он никак не меняет содержимое
есть ли разница: булка хлеба стоит 20 денюжек, 0х14 денюжек или b10100 денюжек?

приведенный код (теги Delphi очень бы не помешали) отображает значение каждого байта, сохраненного в файле, в 16-ричной СС
1
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
19.05.2016, 15:58
Цитата Сообщение от dinya-zhulik Посмотреть сообщение
Наткнулся на один пример в сети, Получаем HEX-код, он работает все как надо.
Это здесь обсуждалось. Взято отсюда:
Не могу получить hex код программы
или отсюда:
BIN ->HEX HEX->BIN
Цитата Сообщение от dinya-zhulik Посмотреть сообщение
В примере открывает файл и получает HEX-код , а мне надо сделать чтобы из полученного HEX-кода фала преобразовать его обратно в исходный файл и сохранял его.
Пример со скоростной обработкой.
На форму надо положить:
Delphi
1
2
3
4
5
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
Для кнопок Button1 и Button2 создать обработчики события OnClick: TForm1.Button1Click() и TForm1.Button2Click(). Код оформить, как показано ниже.
По кнопке Button1 запускается диалог открытия файла. Затем, бинарное содержимое этого файла показывается в Memo1 в виде HEX-кодов.
По кнопке Button2 запускается диалог сохранения файла. Затем, последовательность HEX-кодов из Memo1 преобразуется в последовательность байт и это бинарное содержимое записывается в файл.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
type
  TArr = array of Byte;
 
//Представление последовательности байт в виде соответствующих HEX-кодов,
//выстроенных построчно, в каждой строке по aLenRow HEX-кодов.
function BinArrToHexStr(const aArr : array of Byte; const aLenRow : Integer) : String;
var
  i, LenB, LenS : Integer;
  S : String;
  PB : PByte;
  PCh : PChar;
begin
  //Длина текста с HEX-кодами.
  //- Каждый байт представлен двузначным HEX-кодом + одна позиция для разделителя
  //  за ним. Итого, исключая разделитель после последнего HEX-кода: Fs.Size * 3 - 1.
  //- Строки разделяются двухсимвольными разделителями. Одна позиция такого разделителя
  //  уже учтена ранее. Учитываем вторую позицию межстрочного разделителя и считаем,
  //  что в конце имеется неполная строка: Fs.Size div aLenRow.
  LenB := Length(aArr);
  LenS := LenB * 3 - 1 + LenB div aLenRow;
  if LenB mod aLenRow = 0 then //Если неполной строки в конце нет.
    Dec(LenS);
  SetLength(S, LenS);
 
  //Запись HEX-кодов в строку.
  PB := @aArr[0];  //Указатель на первый элемент массива.
  PCh := PChar(S); //Указатель на первый символ результирующей строки.
  for i := 0 to High(aArr) do
  begin
    //Если это не первый HEX-код, то перед ним следует расположить разделители.
    if i > 0 then
      if i mod aLenRow = 0 then //Если HEX-код является первым в строке.
      begin
        PCh^ := #13;
        Inc(PCh);
        PCh^ := #10;
        Inc(PCh);
      end
      else                      //Если HEX-код не является первым в строке.
      begin
        PCh^ := #9;
        Inc(PCh);
      end;
    //Запись HEX-кода в результирующую строку.
    BinToHex(PChar(PB), PCh, 1);
    Inc(PCh, 2); //Указатель на символ результирующей строки, расположенный непосредственно за вставленным HEX-кодом.
    Inc(PB);     //Указатель на следующий элемент массива.
  end;
  Result := S;
end;
 
//Формирование последовательности байт по строке с HEX-кодами. HEX-коды
function HexStrToBinArr(const aStr : String) : TArr;
var
  Arr : TArr;
  i, LenB : Integer;
  PB : PByte;
  PCh, PChEnd : PChar;
begin
  //Определяем количество HEX-кодов во входной строке и задаём соответствующую длину выходного массива.
  LenB := 0;
  PCh := PChar(aStr);
  for i := 1 to Length(aStr) do
  begin
    //Скоростной вариант: if ((PCh^ >= '0') and (PCh^ <= '9')) or ((PCh^ >= 'A') and (PCh^ <= 'F')) or ((PCh^ >= 'a') and (PCh^ <= 'f')) then
    if PCh^ in ['0'..'9', 'A'..'F', 'a'..'f'] then
      Inc(LenB);
    Inc(PCh);
  end;
  LenB := LenB div 2;
  SetLength(Arr, LenB);
 
  //Выделение HEX-кодов и запись соответствующих байтов в выходной массив.
  PB := @Arr[0];
  PCh := PChar(aStr);
  PChEnd := PCh + Length(aStr);
  Inc(PCh);
  while PCh < PChEnd do
    //Скоростной вариант: if ((PCh^ >= '0') and (PCh^ <= '9')) or ((PCh^ >= 'A') and (PCh^ <= 'F')) or ((PCh^ >= 'a') and (PCh^ <= 'f')) then
    if PCh^ in ['0'..'9', 'A'..'F', 'a'..'f'] then
    begin
      HexToBin(PCh, PChar(PB), 1);
      Inc(PB);
      Inc(PCh, 2);
    end
    else
      Inc(PCh);
  Result := Arr;
end;
 
//Кнопка: Показать бинарное содержимое файла в виде HEX-кодов.
procedure TForm1.Button1Click(Sender: TObject);
var
  Arr : TArr;
  Fs : TFileStream;
  Od : TOpenDialog;
begin
  //Диалог выбора файла.
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath(ParamStr(0));
  if not Od.Execute then
    Exit;
  if not FileExists(Od.FileName) then
  begin
    MessageBox(Handle, 'Файл с заданным именем не найден! Действие отменено.',
      'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
 
  //Загружаем содержимое файла в динамический массив байтов.
  Fs := TFileStream.Create(Od.FileName, fmOpenRead + fmShareDenyWrite);
  try
    SetLength(Arr, Fs.Size);
    Fs.Read(Arr[0], Fs.Size);
  finally
    FreeAndNil(Fs);
  end;
 
  //Записываем данные в Memo в виде HEX-кодов.
  Memo1.Text := BinArrToHexStr(Arr, 16);
end;
 
//Кнопка: По HEX-кодам получить последовательность байт и записать их в файл.
procedure TForm1.Button2Click(Sender: TObject);
var
  Arr : TArr;
  Fs : TFileStream;
  Sd : TSaveDialog;
  Id : Integer;
begin
  //Диалог выбора файла.
  Sd := SaveDialog1;
  if Sd.InitialDir = '' then
    Sd.InitialDir := OpenDialog1.InitialDir;
  if Sd.InitialDir = '' then
    Sd.InitialDir := ExtractFilePath(ParamStr(0));
  if not Sd.Execute then
    Exit;
  if FileExists(Sd.FileName) then
  begin
    Id := MessageBox(Handle, 'Файл с заданным именем уже существует. Перезаписать?',
      'Внимание!', MB_YESNO + MB_ICONWARNING + MB_APPLMODAL);
    if Id <> IDYES then
      Exit;
  end;
 
  //По заданным HEX-кодам получаем последовательность байт.
  Arr := HexStrToBinArr(Memo1.Text);
 
  //Запись последовательности байт в файл.
  Fs := TFileStream.Create(Sd.FileName, fmCreate);
  try
    if Arr <> nil then
      Fs.Write(Arr[0], Length(Arr) * SizeOf(Arr[0]));
  finally
    FreeAndNil(Fs);
  end;
end;
Можно переделать на потоки данных (TStream).
Вложения
Тип файла: 7z BinToHex-HexToBin-01.7z (160.0 Кб, 19 просмотров)
0
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 8
24.05.2016, 17:10  [ТС]
Mawrat,
Спасибо за ответ и пример.
Есть один момент в нем когда сохраняешь файл он в начало файла вставляет пробел и затирает первый символ и сохранный файл не пашет.
Сравнивал исходный файл и сохраненный через Notepad++ и у видел этот пробел, его вручную убираешь и все пашет.
Как исправить этот момент что бы сохраненный файл работал без вмешательства .
0
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
25.05.2016, 07:58
Лучший ответ Сообщение было отмечено dinya-zhulik как решение

Решение

Цитата Сообщение от dinya-zhulik Посмотреть сообщение
Есть один момент в нем когда сохраняешь файл он в начало файла вставляет пробел и затирает первый символ и сохранный файл не пашет.
Сейчас посмотрел - да, есть там одна помарка. В коде функции HexStrToBinArr() надо убрать вызов Inc(PCh) перед циклом while.
Исправленный код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
type
  TArr = array of Byte;
 
//Представление последовательности байт в виде соответствующих HEX-кодов,
//выстроенных построчно, в каждой строке по aLenRow HEX-кодов.
function BinArrToHexStr(const aArr : array of Byte; const aLenRow : Integer) : String;
var
  i, LenB, LenS : Integer;
  S : String;
  PB : PByte;
  PCh : PChar;
begin
  //Длина текста с HEX-кодами.
  //- Каждый байт представлен двузначным HEX-кодом + одна позиция для разделителя
  //  за ним. Итого, исключая разделитель после последнего HEX-кода: Fs.Size * 3 - 1.
  //- Строки разделяются двухсимвольными разделителями. Одна позиция такого разделителя
  //  уже учтена ранее. Учитываем вторую позицию межстрочного разделителя и считаем,
  //  что в конце имеется неполная строка: Fs.Size div aLenRow.
  LenB := Length(aArr);
  LenS := LenB * 3 - 1 + LenB div aLenRow;
  if LenB mod aLenRow = 0 then //Если неполной строки в конце нет.
    Dec(LenS);
  SetLength(S, LenS);
 
  //Запись HEX-кодов в строку.
  PB := @aArr[0];  //Указатель на первый элемент массива.
  PCh := PChar(S); //Указатель на первый символ результирующей строки.
  for i := 0 to High(aArr) do
  begin
    //Если это не первый HEX-код, то перед ним следует расположить разделители.
    if i > 0 then
      if i mod aLenRow = 0 then //Если HEX-код является первым в строке.
      begin
        PCh^ := #13;
        Inc(PCh);
        PCh^ := #10;
        Inc(PCh);
      end
      else                      //Если HEX-код не является первым в строке.
      begin
        PCh^ := #9;
        Inc(PCh);
      end;
    //Запись HEX-кода в результирующую строку.
    BinToHex(PChar(PB), PCh, 1);
    Inc(PCh, 2); //Указатель на символ результирующей строки, расположенный непосредственно за вставленным HEX-кодом.
    Inc(PB);     //Указатель на следующий элемент массива.
  end;
  Result := S;
end;
 
//Формирование последовательности байт по строке с HEX-кодами. HEX-коды
function HexStrToBinArr(const aStr : String) : TArr;
var
  Arr : TArr;
  i, LenB : Integer;
  PB : PByte;
  PCh, PChEnd : PChar;
begin
  //Определяем количество HEX-кодов во входной строке и задаём соответствующую длину выходного массива.
  LenB := 0;
  PCh := PChar(aStr);
  for i := 1 to Length(aStr) do
  begin
    //Скоростной вариант: if ((PCh^ >= '0') and (PCh^ <= '9')) or ((PCh^ >= 'A') and (PCh^ <= 'F')) or ((PCh^ >= 'a') and (PCh^ <= 'f')) then
    if PCh^ in ['0'..'9', 'A'..'F', 'a'..'f'] then
      Inc(LenB);
    Inc(PCh);
  end;
  LenB := LenB div 2;
  SetLength(Arr, LenB);
 
  //Выделение HEX-кодов и запись соответствующих байтов в выходной массив.
  PB := @Arr[0];
  PCh := PChar(aStr);
  PChEnd := PCh + Length(aStr);
  while PCh < PChEnd do
    //Скоростной вариант: if ((PCh^ >= '0') and (PCh^ <= '9')) or ((PCh^ >= 'A') and (PCh^ <= 'F')) or ((PCh^ >= 'a') and (PCh^ <= 'f')) then
    if PCh^ in ['0'..'9', 'A'..'F', 'a'..'f'] then
    begin
      HexToBin(PCh, PChar(PB), 1);
      Inc(PB);
      Inc(PCh, 2);
    end
    else
      Inc(PCh);
  Result := Arr;
end;
 
//Кнопка: Показать бинарное содержимое файла в виде HEX-кодов.
procedure TForm1.Button1Click(Sender: TObject);
var
  Arr : TArr;
  Fs : TFileStream;
  Od : TOpenDialog;
begin
  //Диалог выбора файла.
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath(ParamStr(0));
  if not Od.Execute then
    Exit;
  if not FileExists(Od.FileName) then
  begin
    MessageBox(Handle, 'Файл с заданным именем не найден! Действие отменено.',
      'Внимание!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
 
  //Загружаем содержимое файла в динамический массив байтов.
  Fs := TFileStream.Create(Od.FileName, fmOpenRead + fmShareDenyWrite);
  try
    SetLength(Arr, Fs.Size);
    Fs.Read(Arr[0], Fs.Size);
  finally
    FreeAndNil(Fs);
  end;
 
  //Записываем данные в Memo в виде HEX-кодов.
  Memo1.Text := BinArrToHexStr(Arr, 16);
end;
 
//Кнопка: По HEX-кодам получить последовательность байт и записать их в файл.
procedure TForm1.Button2Click(Sender: TObject);
var
  Arr : TArr;
  Fs : TFileStream;
  Sd : TSaveDialog;
  Id : Integer;
begin
  //Диалог выбора файла.
  Sd := SaveDialog1;
  if Sd.InitialDir = '' then
    Sd.InitialDir := OpenDialog1.InitialDir;
  if Sd.InitialDir = '' then
    Sd.InitialDir := ExtractFilePath(ParamStr(0));
  if not Sd.Execute then
    Exit;
  if FileExists(Sd.FileName) then
  begin
    Id := MessageBox(Handle, 'Файл с заданным именем уже существует. Перезаписать?',
      'Внимание!', MB_YESNO + MB_ICONWARNING + MB_APPLMODAL);
    if Id <> IDYES then
      Exit;
  end;
 
  //По заданным HEX-кодам получаем последовательность байт.
  Arr := HexStrToBinArr(Memo1.Text);
 
  //Запись последовательности байт в файл.
  Fs := TFileStream.Create(Sd.FileName, fmCreate);
  try
    if Arr <> nil then
      Fs.Write(Arr[0], Length(Arr) * SizeOf(Arr[0]));
  finally
    FreeAndNil(Fs);
  end;
end;
Вложения
Тип файла: 7z BinToHex-HexToBin-02.7z (160.0 Кб, 24 просмотров)
1
0 / 0 / 0
Регистрация: 01.02.2015
Сообщений: 8
25.05.2016, 20:25  [ТС]
Mawrat,
Все работает путем. Спасибо Огромное
У меня есть еще один вопрос?
Прога открывает для просмотра тока файлы не больше 100mb потом виснет и пишет что у меня оперативы мало (2 гб стоит это не много но всеже), можно сделать как нибудь что хотябы прога фалы размером 500мб-700мб грузила и сохраняла без висиков с моим объемом ОЗУ.
0
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
30.05.2016, 08:35
Цитата Сообщение от dinya-zhulik Посмотреть сообщение
Прога открывает для просмотра тока файлы не больше 100mb потом виснет и пишет что у меня оперативы мало (2 гб стоит это не много но всеже), можно сделать как нибудь что хотябы прога фалы размером 500мб-700мб грузила и сохраняла без висиков с моим объемом ОЗУ.
Здесь дело вот в чём. Программа загружает всё содержимое файла в ОЗУ, затем выполняется преобразование в текст. Текст занимает примерно в 3 раза больший объём. Причём, для исходного содержимого и для текста требуется выделить непрерывные области в памяти. Это накладывает дополнительные ограничения. Может например, оказаться так, что из 2 гигабайт ОЗУ, выделенных программе, свободное пространство имеет размер в 1.7 гигабайт, но наибольший непрерывный участок не превышает 500 мегабайт. При таком раскладе, можно загрузить файл, размер которого не больше 100 - 150 мегабайт (с учётом того, что на текст потребуется около 350 - 450 мегабайт).

Чтобы решить эту проблему, нужно загружать не весь файл сразу, а только нужную его часть - ту часть, где будет происходить редактирование. По мере надобности можно какие-то области догружать, а какие-то - выгружать.

Я сегодня попытаюсь набросать вариант такого решения. Только вместо TMemo буду использовать TStringGrid. В экземпляре TStringGrid удобно показывать содержимое и смещения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.05.2016, 08:35
Помогаю со студенческими работами здесь

Не могу получить hex код программы
Собственно хочу в memo получить hex код в программу, использую код: procedure TForm1.Button1Click(Sender: TObject); var i:byte; ...

Преобразовать код цвета в RGB или HEX
Подскажите как преобразовать обратно в RGB код цвета VB . Например этот &quot;0&amp;H54E49B&amp;&quot;

Получаем html код который отработан javascript
Надо достать html код, пример есть сайт с таким участком &lt;script language=&quot;JavaScript&quot; charset=&quot;UTF-8&quot;...

Запустив код, получаем j = -8. А почему именно восемь и как я мог бы это сам посчитать?
Здравствуйте, могли бы объяснить одну деталь по поводу кода. Этот код из книги но деталей его описания там не было. Сам код: ...

код клавиши в hex
всем привет ) написал в эту ветку потому что здесь те кто хорошо знают 16ричные коды ) у меня такая задача - мне нужно вписать в hex...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru