Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2014, 18:38   #71
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

исходный код программы пакуете в архив.
Архив прикрепляете к сообщению ("Расширенный режим" - "Управление вложениями")
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.02.2014, 01:47   #72
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
исходный код программы пакуете в архив.
Архив прикрепляете к сообщению ("Расширенный режим" - "Управление вложениями")
Отправил, правда почта зараза присылала, аж три раза уведомление, о том что не доставлено, если придут, а такое бывает сразу 4 письма, то лишние удаляйте. Отправил с Gmail .
Семён-2014@ вне форума Ответить с цитированием
Старый 04.02.2014, 08:52   #73
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Семён-2014@ Посмотреть сообщение
Отправил, правда почта зараза присылала, аж три раза уведомление, о том что не доставлено, если придут, а такое бывает сразу 4 письма, то лишние удаляйте. Отправил с Gmail .
Вы мне программу на почту отправили?!! А зачем?
Я думал, что Вы спрашиваете, как исходники НА ФОРУМ выложить (сюда, в данную тему, чтобы все, кто Вам помогает, могли их посмотреть и дать нужный совет)!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.02.2014, 14:31   #74
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы мне программу на почту отправили?!! А зачем?
Я думал, что Вы спрашиваете, как исходники НА ФОРУМ выложить (сюда, в данную тему, чтобы все, кто Вам помогает, могли их посмотреть и дать нужный совет)!
Да нет я отправил другому человеку, исходники и прогу.
Вот Выкладываю полный код, только ребята, на адреса не смотрите, я их исказил , чтоб не в открытую. Но принцип весь тот же.
Вот код для людей помогавших :
Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
const cLen = $1FB-$200;
var Stream: TFileStream;
a: array [0..1023] of Byte;
B: array [1..253] of Byte;
 F: File of byte;
Size: Integer;
w1,w2: Word;
i: integer;
D:word;
begin
Label46.Caption:='   '; // очищаем данные
Label42.Caption:='   ';
with OpenDialog1 do
if Execute then
begin
Stream:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
if Stream.Size<>812 then
ShowMessage('Не допустимый размер файла! загрузите файл - 812 байт.')
else
begin
if Stream.Size=812 then
begin
Stream.Position:=$150;
Stream.Read(B,253);
w1:=$0;
for i:=1 to 253 do  w1:=w1+B[i];  //при переполнении левые биты обрежутся
Stream.Position:=$1DE;
Stream.Read(w2,2);
if w2<>w1 then Label46.Caption:=('Не совпадают - файл повреждён !');
Stream.Free;
  //контрольная сумма считается так
if w2=w1 then Label42.Caption:=('Совпадают - файл нормальный !');
AssignFile(F, FileName);
Reset(F); // файл открыт для чтения
Size:=Filesize(F);
CloseFile(F) ; //закрываем файл
Label38.Caption:=IntToStr(Size);
Stream:=TFileStream.Create(OpenDialog1.FileName,fmOpenReadWrite or fmShareDenyNone);
Stream.Position:=$A5;
Stream.Read(a,16);
Label1.Caption:=IntToStr(a[0]); // считываем данные
Label2.Caption:=IntToStr(a[1]);
Label3.Caption:=IntToStr(a[2]);
Label4.Caption:=IntToStr(a[3]);
Label5.Caption:=IntToStr(a[4]);
Label6.Caption:=IntToStr(a[5]);
Label7.Caption:=IntToStr(a[6]);
Label8.Caption:=IntToStr(a[7]);
Label9.Caption:=IntToStr(a[8]);
Label10.Caption:=IntToStr(a[9]);
Label11.Caption:=IntToStr(a[10]);
Label12.Caption:=IntToStr(a[11]);
Label13.Caption:=IntToStr(a[12]);
Label14.Caption:=IntToStr(a[13]);
Stream.Position:=$DE;
Stream.Read(a,1);
Label17.Caption:=IntToHex(a[0],2); // выводим данные
Stream.Position:=$150;
Stream.Read(a,4);
Label18.Caption:=IntToHex(a[0],2)+IntToHex(a[1],2)+IntToHex(a[2],2)+IntToHex(a[3],2);
Stream.Position:=$1FA;
stream.Read(D,2);
begin
case D of
$192C:
begin
Label41.Caption:=' свеча'; // ставим условия
end;
$7125 :
begin
Label41.Caption:='катушкаl';
end;
$8A0B:
begin
Label41.Caption:='!!!';
end;
else
begin
Label41.Caption:='Деталь Неизвестна !';
end;
end;
end;
end;
Stream.Free;
end
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
 var
a: array [0..1023] of Byte;
chosenDirectory: string;
Stream: TMemoryStream;
 begin
 Label1.Caption:='  ';
Label2.Caption:='   ';  // очищаем данные
Label3.Caption:='  ';
Label4.Caption:='  ';
Label5.Caption:='  ';
Label6.Caption:='  ';
Label7.Caption:='  ';
Label8.Caption:='  ';
Label9.Caption:='  ';
Label10.Caption:='  ';
Label11.Caption:='  ';
Label12.Caption:='  ';
Label13.Caption:='  ';
Label14.Caption:='  ';
Label17.Caption:='  ';
if openDialog1.FileName ='' then
showmessage(' исходный файл незагружен !')
else if savedialog1.execute then
begin
Stream := TMemoryStream.Create;
Stream.LoadFromFile(openDialog1.FileName);
if Stream.Size <> 812 then
ShowMessage('Недопустимый размер файла!')// ставим условия
else
begin
if Stream.Size=812 then
 ShowMessage('сохранить очищенный файл ? ');
begin
Stream.Position:=$D0;
Stream.Write(a,16);
Label1.Caption:=IntToStr(a[0]); // обнуляем данные
Label2.Caption:=IntToStr(a[1]);
Label3.Caption:=IntToStr(a[2]);
Label4.Caption:=IntToStr(a[3]);
Label5.Caption:=IntToStr(a[4]);
Label6.Caption:=IntToStr(a[5]);
Label7.Caption:=IntToStr(a[6]);
Label8.Caption:=IntToStr(a[7]);
Label9.Caption:=IntToStr(a[8]);
Label10.Caption:=IntToStr(a[9]);
Label11.Caption:=IntToStr(a[10]);
Label12.Caption:=IntToStr(a[11]);
Label13.Caption:=IntToStr(a[12]);
Label14.Caption:=IntToStr(a[13]);
Stream.Position:=$BE;
Stream.Write(a,1);
if SelectDirectory('c:\, D:\,F:\,E:\,G:\,B:\',
extractfilepath(saveDialog1.FileName), chosenDirectory) then
Stream.SaveToFile(chosenDirectory + PathDelim + extractfilename
(openDialog1.FileName));
Label17.Caption:=IntToHex(a[0],2); // выводим данные
end;
end;
Stream.Free;
end
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
Form2.Show;  // подключаем вторую форму
end;
end.

Последний раз редактировалось Семён-2014@; 04.02.2014 в 15:41. Причина: дополнить
Семён-2014@ вне форума Ответить с цитированием
Старый 04.02.2014, 14:51   #75
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
на адреса не смотрите, я их исказил , чтоб не в открытую
А че такая секретность, если не секрет. У-у, тавтология получилась, чуть ли не экономика должна быть экономной
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2014, 15:24   #76
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от Аватар Посмотреть сообщение
А че такая секретность, если не секрет. У-у, тавтология получилась, чуть ли не экономика должна быть экономной

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

Ещё раз перечитал тему и нашёл только сейчас, подсказку от Евгения и пременил её. Была проблема, если файл не был загружен, а нажать на кнопку сохранить, то вылетало окно системы.... только что сделал обработку кнопки и вставил в код, теперь ок! при нажатии на кнопку сохранить, а файл если не загружен, то вылетает, теперь моё окно, о том что файл не загружен.
В код дополнил выкладываю здесь что сделал только что.

[CODEif openDialog1.FileName ='' then
showmessage('исходный файл незагружен!')
else if savedialog1.execute then
begin][/CODE]
думаю BDA при тесте уже увидел этот дефект, но я нашёл уже сам и устранил. А дальше что скажет он после тестов. Вроде всё устранил пока. Хотя он как профи всё ровно лучше знает. Но пока вот финал!
Аватар если пожелаете Вам вышлю.


При компановке одно предупреждение , я думаю из за этой функции : ExtCtrls,
И чего это компилятору не нравиться она?

Последний раз редактировалось Семён-2014@; 04.02.2014 в 15:42.
Семён-2014@ вне форума Ответить с цитированием
Старый 04.02.2014, 15:46   #77
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,316
По умолчанию

Так, продублирую сюда.
Код причесал чуток:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, XPMan, FileCtrl;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label34: TLabel;
    Label35: TLabel;
    Label36: TLabel;
    Label37: TLabel;
    Label33: TLabel;
    Label38: TLabel;
    Label40: TLabel;
    Label41: TLabel;
    Label42: TLabel;
    Label46: TLabel;
    Image1: TImage;
    Panel1: TPanel;
    OpenDialog1: TOpenDialog;
    openbutton: TSpeedButton;
    savebutton: TSpeedButton;
    helpbutton: TSpeedButton;
    XPManifest1: TXPManifest;

    procedure openbuttonClick(Sender: TObject);
    procedure savebuttonClick(Sender: TObject);
    procedure helpbuttonClick(Sender: TObject);
    procedure setlabel(t: boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a: array [0 .. 13] of Byte;

implementation

uses Unit2;
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  setlabel(false);
end;

procedure TForm1.setlabel(t: boolean);
var
  s: string;
  i: integer;
begin
  s := '';
  if t then
    for i := 0 to 13 do
      s := s + inttohex($xx + i, 2) + ' ... ' + IntToStr(a[i]) + #13#10
    else
      for i := 0 to 13 do
        s := s + inttohex($xx + i, 2) + ' ... '#13#10;
  Label1.caption := s;
end;

procedure TForm1.openbuttonClick(Sender: TObject);
const
  cLen = $xxx - $xxx;
var
  Stream: TFileStream;
  B: array [1 .. cLen] of Byte;
  w1, w2, d: Word;
  i: integer;
begin
  setlabel(false);
  Label17.caption := '';
  Label18.caption := '';
  Label38.caption := '';
  Label41.caption := '';
  Label42.caption := '';
  Label46.caption := '';
  if OpenDialog1.Execute then
  begin
    Stream := TFileStream.Create(OpenDialog1.FileName,
      fmOpenReadWrite or fmShareDenyNone);
    savebutton.Enabled := (Stream.Size = 512);
    if Stream.Size <> 512 then
      ShowMessage('Не допустимый размер файла! Загрузите 512 байт.')
    else
    begin
      Stream.Position := $xxx;
      Stream.Read(B, cLen);
      w1 := 0;
      for i := 1 to cLen do
        w1 := w1 + B[i]; // при переполнении левые биты обрежутся
      Stream.Position := $xxx;
      Stream.Read(w2, 2);
      if w2 <> w1 then
        Label46.caption := ('Не совпадают - Повреждена!')
      else
        Label42.caption := ('Совпадают - Исправна!');
      Label38.caption := extractfilename(OpenDialog1.FileName);
      Stream.Position := $xx;
      Stream.Read(a, 14);
      setlabel(true);
      Stream.Position := $xx;
      Stream.Read(a, 1);
      Label17.caption := inttohex(a[0], 2); // выводим данные
      Stream.Position := $xxx;
      Stream.Read(a, 4);
      Label18.caption := inttohex(a[0], 2) + inttohex(a[1], 2) + inttohex(a[2],
        2) + inttohex(a[3], 2);
      Stream.Position := $xxx;
      Stream.Read(d, 2);
      case d of
        $xxxx:
          Label41.caption := '1';
        $xxxx:
          Label41.caption := '2;
        $xxxx:
          Label41.caption := '3';
      else
        Label41.caption := '?';
      end;
    end;
    Stream.Free;
  end
end;

procedure TForm1.savebuttonClick(Sender: TObject);
var
  chosenDirectory: string;
  Stream: TMemoryStream;
  p: ^Byte;
  i: integer;
begin
  Stream := TMemoryStream.Create;
  Stream.LoadFromFile(OpenDialog1.FileName);
  p := Stream.Memory;
  inc(p, $xx);
  for i := 0 to 13 do
  begin
    p^ := 0;
    inc(p);
  end;
  p := Stream.Memory;
  inc(p, $xx);
  p^ := 0;
  if SelectDirectory('Выберите каталог', '', chosenDirectory) then
    Stream.SaveToFile(chosenDirectory + PathDelim + extractfilename
        (OpenDialog1.FileName));
  Stream.Free;
end;

procedure TForm1.helpbuttonClick(Sender: TObject);
begin
  Form2.Show; // показываем вторую форму
end;

end.
1) Знаю, что глобальные переменные - плохо, но тут получилось быстренько на этом сократить код.
2) Что еще можете посоветовать?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 04.02.2014, 15:50   #78
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Аватар если пожелаете Вам вышлю
Не надо. Код и здесь вижу, а константы конкретные мне сто лет не нужны.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.02.2014, 02:27   #79
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию ответ

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не надо. Код и здесь вижу, а константы конкретные мне сто лет не нужны.

Что хочу добавить, только что обнаружил то что я применил у себя, на кнопку сохранить, то что у меня в коде, после того как выложил на форум, дальше стал дорабатывать всё то оно хорошо, окошко вылетает, что файл не загружен, а дальше автоматом открывается сохранить, без файла причём и предлагает директорию, при чём не правильную, хорошо что углядел, дотошно тестирую всё. Ошибочка вышла, причём не хорошая. Хорошо BDA в своей сделал всё как надо. Этот маневр , мне очень понравился с кнопкой, давно для себя думал, как делать, а тут и решение, очень понравилось!!!

SpeedButton2.Enabled := (Stream.Size = 512); условие и кнопочку на False и сказка на тебе. Теперь файла нет, кнопка не активна, или пытаешься не тот загрузить, опять не активна, нормальный загрузил, всё опять активно стало. Вот это решение!!! плюс подсказал, уменьшил размер проги, многим понравилось. В общем получилась задумка почти полностью.

Последний раз редактировалось Семён-2014@; 05.02.2014 в 02:32.
Семён-2014@ вне форума Ответить с цитированием
Старый 05.02.2014, 23:39   #80
Семён-2014@
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 37
По умолчанию продолжение темы

Добрый вечер уважаемые Гуру !!! тема продолжается, в связи с чем нужна Ваша помощь.

Есть проблема, зона данных забита значениями :FFFFFFFFF, В этом случае эти FFFFF равны 00000, понятно что с точки зрения математике, это не одно и тоже. 0000 и в Африке 0000, а FFFFF=255, но это в математике.
На самом деле в некоторых микросхемах чтоб забить свободную зону памяти, её забивают либо 00000(так раньше было и так правильно), либо FFFFF что встречается очень часто. Так вот при считывании данных либо:
Label1.Caption:=IntToHex(a[0],2) при таком раскладе считывается как 255, а это не правильно в корне, так как должно быть 00000, то-есть вводит в заблуждение, либо если вот так :Label16.Caption:=IntToStr(a[15]), то выводятся данные как FF,AD,EA,3B.... что очень не удобно.
В связи с чем вопрос как поставить условие чтоб при считывании значения FF игнорировались и выводились в Label как 00. Именно для такого значения, если значение будет : 1F,F1,FA,FB,FC,FD,FE,F1,F2,F3,F4,F5 ,F6,F7,F8,F9 то эти значения должны обрабатываться и переводится из Hex в Dec. А все значения по конкретному только адресу FF выводились как 00?.
Семён-2014@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
file->HEX HEX->BIN kakawkin Общие вопросы Delphi 1 25.04.2012 01:02
перевод чисел из hex в bin. ASM. crashmanx Помощь студентам 0 25.12.2011 21:35
Нужно реализовать программу на Дельфи Aizada Помощь студентам 1 16.05.2011 21:45
Перевод BIN -> HEX Piar Помощь студентам 2 20.05.2009 15:44