Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пожалуйста закомментируйте программу, Пожалуйста закомментируйте программу 
:(
    Опции темы
OverloaD
Дата 14.5.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



Народ, помогите плз, надо написать курсовую по этой программе, а без комментариев я фиг в ней сам разберусь, программа делает следующее: выбраный wav фаил разбивает на блоки по 256 байт, каждый блок разбивается пополам на байте соответствующем номеру текущего символа ключа в ASCII, эти подблоки меняются местами, то-есть грубо говоря шифрует данный wav фаил, при декодеровке выполняется та же самая процедура. Заранее огромное спасибо! 
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, {Variants, }Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MMSystem, MPlayer, Buttons, ExtCtrls, Spin;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    SourceFileEdit: TEdit;
    EncodedFileEdit: TEdit;
    DecodedFileEdit: TEdit;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    Button2: TButton;
    Button3: TButton;
    Label2: TLabel;
    KeyEdit: TEdit;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    procedure EnCodeFile(OrigFile, DestFile: string);
    procedure DeCodeFile(OrigFile, DestFile: string);
  public
    { Public declarations }
  end;

const
  WavHeader: integer = 44;
  
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);


function CreateNewWave(NewFileName: string): Boolean;
var
  DeviceID: Word;
  Return: LongInt;
  MciOpen: TMCI_Open_Parms;
  MciRecord: TMCI_Record_Parms;
  MciPlay: TMCI_Play_Parms;
  MciSave: TMCI_SaveParms;
  MCIResult: LongInt;
  Flags: Word;
  TempFileName: array[0..255] of char;
begin
  StrPCopy(TempFileName, NewFileName);
  MciOpen.lpstrDeviceType := 'waveaudio';
  MciOpen.lpstrElementName := '';
  Flags := Mci_Open_Element or Mci_Open_Type;
  MCIResult := MciSendCommand(0, MCI_OPEN, Flags, LongInt(@MciOpen));
  DeviceID := MciOpen.wDeviceId;
  MciRecord.dwTo := 1;
  Flags := Mci_To or Mci_Wait;
  MCIResult := MciSendCommand(DeviceID, Mci_Record, Flags, LongInt(@MciRecord));
  mciPlay.dwFrom := 0;
  Flags := Mci_From or Mci_Wait;
  MciSendCommand(DeviceId, Mci_Play, Flags, LongInt(@MciPlay));
  mciSave.lpfileName := TempFilename;
  Flags := MCI_Save_File or Mci_Wait;
  MCIResult := MciSendCommand(DeviceID, MCI_Save, Flags, LongInt(@MciSave));
  Result := MciSendCommand(DeviceID, Mci_Close, 0, LongInt(nil)) = 0;
end;

var
FirstFile, ShifrFile, SecondFile: file;
size, parts, i, e: integer;
Buffer, ShifrBuffer: array of byte;

begin
  OpenDialog1.Execute;
  CreateNewWave(ExtractFileDir(OpenDialog1.FileName)+'Shifr.wav');
  AssignFile(FirstFile, OpenDialog1.FileName);
  Reset(FirstFile);
  AssignFile(ShifrFile, ExtractFileDir(OpenDialog1.FileName)+'Shifr.wav');
  rewrite(ShifrFile);
  Size:=StrToInt(Edit1.Text);
  Parts:=FileSize(FirstFile) div Size;
  e:=2*parts;
  BlockRead(FirstFile, Buffer, Parts);
  BlockWrite(ShifrFile, Buffer, Parts);
  For i:=2 to parts+1 do
  begin
    if i mod 2 = 0 then
      BlockRead(FirstFile, Buffer, Parts*i-Parts)
    else
      begin
        ShifrBuffer:=Buffer;
        BlockRead(FirstFile, Buffer, Parts*i-Parts);
        BlockWrite(ShifrFile, ShifrBuffer, Parts*i-Parts);
        BlockWrite(ShifrFile, Buffer, Parts*i-Parts);
    end
  end;
  CloseFile(ShifrFile);
  CloseFile(Firstfile);
  {sndPlaySound(ExtractFileDir(OpenDialog1.FileName)+'shifr.wav'), SND_ASYNC);
  sndPlaySound(nil, SND_ASYNC);}
  CreateNewWave(ExtractFileDir(OpenDialog1.FileName)+'Second.wav');
  AssignFile(ShifrFile, ExtractFileDir(OpenDialog1.FileName)+'Shifr.wav');
  Reset(FirstFile);
  AssignFile(SecondFile, ExtractFileDir(OpenDialog1.FileName)+'second.wav');
  Size:=StrToInt(Edit1.Text);
  Parts:=FileSize(ShifrFile) div Size;
  e:=2*parts;
  BlockRead(ShifrFile, Buffer, Parts);
  BlockWrite(SecondFile, Buffer, Parts);
  For i:=2 to parts+1 do
  begin
    if i mod 2 = 0 then
      BlockRead(ShifrFile, Buffer, Parts*i-Parts)
    else
      begin
        ShifrBuffer:=Buffer;
        BlockRead(ShifrFile, Buffer, Parts*i-Parts);
        BlockWrite(SecondFile, Buffer, Parts*i-Parts);
        BlockWrite(SecondFile, ShifrBuffer, Parts*i-Parts);
    end
  end;
  CloseFile(ShifrFile);
  CloseFile(SecondFile);
  {sndPlaySound(ExtractFileDir(OpenDialog1.FileName)+'Second.wav'), SND_ASYNC);
  sndPlaySound(nil, SND_ASYNC);}
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin

  With OpenDialog1 do
  If Execute
  then SourceFileEdit.Text := FileName;

end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin

  With SaveDialog1 do
  If Execute
  then EncodedFileEdit.Text := FileName;

end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin

  With SaveDialog1 do
  If Execute
  then DecodedFileEdit.Text := FileName;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

  If Not FileExists(SourceFileEdit.Text)
  then begin
         MessageDlg('Исходный файл не существует или его имя указано с ошибкой', mtError, [mbOK], 0);
         Exit;
       end;

  If FileExists(EncodedFileEdit.Text)
  then begin

         If MessageDlg('Файл ' + EncodedFileEdit.Text + ' уже существует. Хотите перезаписать его?', mtConfirmation, [mbOK, mbNo], 0) = mrNo
         then Exit;

       end;

  EnCodeFile(SourceFileEdit.Text, EncodedFileEdit.Text);

  MessageDlg('Файл зашифрован!', mtInformation, [mbOk], 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  EncodedFileEdit.Text := ExtractFilePath(Application.ExeName) + 'Encoded.wav';
  DecodedFileEdit.Text := ExtractFilePath(Application.ExeName) + 'Decoded.wav';
  OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
  OpenDialog1.Filter := 'Файлы Windows Media|*.Wav';
  SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName);
  SaveDialog1.Filter := 'Файлы Windows Media|*.Wav';
end;

procedure TForm1.EnCodeFile(OrigFile, DestFile: string);
var
  CutPos: integer;
  Readed: integer;
  SFile, EnFile: file;
  Block1, Block2: array of byte;
  KeyString: string;
begin
  AssignFile(SFile, OrigFile);
  Reset(SFile, 1);

  AssignFile(EnFile, DestFile);
  Rewrite(EnFile, 1);

  SetLength(Block1, WavHeader);                      //выделяем место под данные Wav файла (Wav - Header)

  BlockRead(SFile, Block1[0], Length(Block1), Readed);
  BlockWrite(EnFile, Block1[0], Length(Block1));                 //переписываем без изменений

  SetLength(Block1, 255);
  SetLength(Block2, 255);

  KeyString := KeyEdit.Text;

  While Not EOf(SFile) do
  begin
    BlockRead(SFile, Block1[0], Length(Block1), Readed);

    If Readed = Length(Block1)
    then begin
           CutPos := ord(KeyString[1]);                          //выбираем точку разрезания блока
           KeyString := Copy(KeyString, 2, Length(KeyString) - 1) + KeyString[1]; //бесконечный перебор символов ключа

           Move(Block1[CutPos], Block2[0], Length(Block1) - CutPos);                   //перемешиваем
           Move(Block1[0], Block2[Length(Block1) - CutPos], CutPos);
         end
    else begin //достигнут конец файла

           If Readed > 0
           then begin
                  SetLength(Block2, Readed);
                  Move(Block1[0], Block2[0], Readed);
                  BlockWrite(EnFile, Block2[0], Length(Block2));      //записываем в результирующий файл последний блок
                  Break;
                end;

         end;

    BlockWrite(EnFile, Block2[0], Length(Block2));                    //записываем в результирующий файл
  end;

  CloseFile(SFile);
  CloseFile(EnFile);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

  If FileExists(DecodedFileEdit.Text)
  then begin

         If MessageDlg('Файл ' + DecodedFileEdit.Text + ' уже существует. Хотите перезаписать его?', mtConfirmation, [mbOK, mbNo], 0) = mrNo
         then Exit;

       end;

  DeCodeFile(EncodedFileEdit.Text, DecodedFileEdit.Text);

  MessageDlg('Файл дешифрован!', mtInformation, [mbOk], 0);
end;

procedure TForm1.DeCodeFile(OrigFile, DestFile: string);
var
  CutPos: integer;
  Readed: integer;
  SFile, EnFile: file;
  Block1, Block2: array of byte;
  KeyString: string;
begin
  AssignFile(SFile, OrigFile);
  Reset(SFile, 1);

  AssignFile(EnFile, DestFile);
  Rewrite(EnFile, 1);

  SetLength(Block1, WavHeader);                      //выделяем место под данные Wav файла (Wav - Header)

  BlockRead(SFile, Block1[0], Length(Block1), Readed);
  BlockWrite(EnFile, Block1[0], Length(Block1));                 //переписываем без изменений

  SetLength(Block1, 255);
  SetLength(Block2, 255);

  KeyString := KeyEdit.Text;

  While Not EOf(SFile) do
  begin
    BlockRead(SFile, Block1[0], Length(Block1), Readed);

    If Readed = Length(Block1)
    then begin
           CutPos := ord(KeyString[1]);                          //выбираем точку разрезания блока
           KeyString := Copy(KeyString, 2, Length(KeyString) - 1) + KeyString[1]; //бесконечный перебор символов ключа

           Move(Block1[Length(Block1) - CutPos], Block2[0], CutPos);                   //перемешиваем
           Move(Block1[0], Block2[CutPos], Length(Block1) - CutPos);
         end
    else begin //достигнут конец файла

           If Readed > 0
           then begin
                  SetLength(Block2, Readed);
                  Move(Block1[0], Block2[0], Readed);
                  BlockWrite(EnFile, Block2[0], Length(Block2));      //записываем в результирующий файл последний блок
                  Break;
                end;

         end;

    BlockWrite(EnFile, Block2[0], Length(Block2));                    //записываем в результирующий файл
  end;

  CloseFile(SFile);
  CloseFile(EnFile);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Close;
end;

end.
 
PM MAIL   Вверх
Sunr1se
Дата 14.5.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 1.5.2006

Репутация: 6
Всего: 13



Пожалуйста, укажи, какие именно моменты в этом коде тебе не понятны, тогда я их объясню. А на добавление комментариев к каждой строке может уйти куча времени smile
А если ты не знаешь какой-то команды, то воспользуйся справкой - там все очень хорошо описано. 
--------------------
IRC-канал Винграда 
PM MAIL ICQ   Вверх
OverloaD
Дата 14.5.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



ты имеешь ввиду стандартную справку delphi?
а моменты которые не понятны, вот строчка (таких там много)) к примеру значение которой мне не понятно
MCIResult := MciSendCommand(DeviceID, MCI_Save, Flags, LongInt(@MciSave));
 если это всё можно посмотреть в каком-нибудь хелпе напиши плз в каком 
 
PM MAIL   Вверх
DonPager
Дата 14.5.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



Ответ на этот вопрос находится мсдн 


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
Sunr1se
Дата 14.5.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 1.5.2006

Репутация: 6
Всего: 13



Пожалуйста:
http://msdn.microsoft.com/library/default....sendcommand.asp
Там же (т.е. на msdn.microsoft.com) находится описание других WinAPI-шных команд. 
--------------------
IRC-канал Винграда 
PM MAIL ICQ   Вверх
OverloaD
Дата 15.5.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



2Sunr1se спасиб!  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0835 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.