RSS    

   Курсовая работа: Разработка вспомогательной системной программы в системе программирования Delphi с использованием средств WinApi

procedure ToolButton1Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N2Click(Sender: TObject);

private

procedure AppHint(Sender: TObject);

public

HMutex:THandle;

ThreadRec:TThreadReceiver;

HEvent:THandle;

HFileSender:Thandle;

NicName:string;

end;

var

Form1: TForm1;

TxtFile:TextFile;// пременная файла

St:PansiChar;

lincInt:Boolean;

TxtContaningStr:String;

userName:string;

implementation

{$R *.dfm}

//процедура для показа кртких справок

procedure TForm1.AppHint(Sender: TObject);

begin

StatusBar1.SimpleText:=Application.Hint; //для отображения ииформации в панели соостояния

end;

//закрытие всех хендлов в этой копии программы

procedure TForm1.CloseHandles();

begin

CloseHandle(HFileSender);

CloseHandle(HMutex);

CloseHandle(HEvent);

end;

// создание всех необходимых объектов

procedure TForm1.CreateHandles;

begin

// проекция файла

HFileSender:=CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SHARED_MEMORY_SIZE,MMFName);

lincInt:=(GetLastError() <> ERROR_ALREADY_EXISTS);

if HFileSender = 0 then

begin

st:='не удалось создать проекцию файла';

Application.MessageBox(st,'Сообщение...',MB_OK);

exit;

end;

// мьютекс

HMutex:=CreateMutex(nil,false,MutxName);

if HMutex = 0 then

begin

CloseHandle(HFileSender);

st:='не удалось синхронизировать приложение';

Application.MessageBox(st,'Сообщение...',MB_OK);

exit;

end;

// событие

HEvent:=CreateEvent(nil,true,false,EvntName);

if HEvent = 0 then

begin

CloseHandle(HFileSender);

CloseHandle(HMutex);

st:='не удалось осуществить обмен сообщениями';

Application.MessageBox(st,'Сообщение...',MB_OK);

exit;

end;

end;

// отсоединиться

procedure TForm1.Button1Click(Sender: TObject);

begin

ThreadRec.Terminate;

WriteDataInMMF('Пользователь '+NicName+' отключился');

ThreadRec.WaitFor;

ThreadRec.Free;// правильно уничтожаем поток

CloseHandles();

button2.Visible:=true;

button1.Visible:=false;

bitbtn2.Visible:=false;

end;

// загрузить историю переписки

procedure TForm1.N4Click(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

AssignFile(TxtFile,OpenDialog1.FileName);

Reset(TxtFile);

Memo1.Text:=Memo1.Text +'{-----------Загруженная переписка ниже-------------}' + #13#10;

while not eof(TxtFile) do

begin

readln(TxtFile,TxtContaningStr);

Memo1.Text:=Memo1.Text + TxtContaningStr + #13#10;

end;

Memo1.Text:=Memo1.Text +'{-----------Загруженная переписка выше -------------}' + #13#10;

CloseFile(TxtFile);

end;

end;

//процедура записи данных в MMF

procedure TForm1.WriteDataInMMF(s:string);

var

PBaseAdress:Pointer;

begin

WaitForSingleObject(HMutex, INFINITE);

PBaseAdress:=MapViewOfFile(HFileSender,FILE_MAP_WRITE,0,0,Length(s)+4);

if(PBaseAdress = nil) then

begin

CloseHandle(HFileSender);

st:='не удалось передать данные';

Application.MessageBox(st,'Сообщение...',MB_OK);

exit;

end;

begin

integer(PBaseAdress^):=length(s);

CopyMemory(Pointer(Integer(PBaseAdress)+4),PChar(s),length(s));

UnmapViewOfFile(PBaseAdress);

SetEvent(HEvent);

ReleaseMutex(HMutex);

end;

end;

// процедура записи данных в PBaseAdress

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

if Edit1.Text <> '' then

begin

WriteDataInMMF(Nicname+' написал:'+#13#10+string(Edit1.Text));

Edit1.Text:='';

end

else

exit;

end;

// Закрытия формы

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

close;

end;

//создаём хендлы и потоки

procedure TForm1.FormCreate(Sender: TObject);

begin

Memo1.Clear;

// создание потока принимающего данные из файла

ThreadRec:=TThreadReceiver.Create(false);

ThreadRec.Priority:=tpLowest;

CreateHandles();// создаем хендлы

end;

// соединение

procedure TForm1.Button2Click(Sender: TObject);

begin

CreateHandles();

ThreadRec:=TThreadReceiver.Create(false);

button2.Visible:=false;

button1.Visible:=true;

bitbtn2.Visible:=true;

WriteDataInMMF(NicName+' Cоединился!');

end;

// Запрос подтверждения при закрытии формы

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

case messageBox(Handle,'Действительно выйти?','Внимание!', MB_YESNO) of

IDYES:

begin

if Button1.Visible = true then

begin

ThreadRec.Terminate;

WriteDataInMMF('Пользователь '+NicName+' отключился');

ThreadRec.WaitFor;

ThreadRec.Free;

CanClose:=true;

end

else

CanClose:=true;

end;

IDNO: CanClose:=false;

end;

end;

//Сохранить историю переписки

procedure TForm1.N5Click(Sender: TObject);

begin

If SaveDialog1.Execute then

begin

AssignFile(TxtFile,SaveDialog1.FileName);

rewrite(TxtFile);

TxtContaningStr:= Memo1.Text;

Write(TxtFile,TxtContaningStr);

CloseFile(TxtFile);

St:='Файл сохранён';

Application.MessageBox(St,'Сообщение...',MB_OK);

exit;

end

else

begin

St:='файл не сохранён';

Application.MessageBox(St,'Сообщение...',MB_OK);

end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if Form1.Visible = true then

begin

Application.OnHint:=AppHint;

Timer1.Enabled:=false;

Timer1.Destroy;

end;

end;

procedure TForm1.ToolButton3Click(Sender: TObject);

begin

Application.CreateForm(TForm3, Form3);

Application.ShowMainForm:=false;

Form3.Visible:=true;

end;

procedure TForm1.ToolButton1Click(Sender: TObject);

begin

//вызов справки (основная форма программы)

Application.HelpContext(2);

end;

procedure TForm1.N8Click(Sender: TObject);

begin

Application.HelpCommand(HELP_FINDER,0);

end;

procedure TForm1.N2Click(Sender: TObject);

begin

ShowMessage('Программу подготовил студент группы 742:'+#13#10+'Шипилов Д.А.');

end;

end.

3) Текст модуля Unit2 (Модуль формы «Авторизация»):

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls,Unit1, ComCtrls, Buttons;

type

TForm2 = class(TForm)

Button2: TButton;

Edit1: TEdit;

Label1: TLabel;

BitBtn1: TBitBtn;

procedure Button2Click(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

formClose:boolean=false;

implementation

{$R *.dfm}

// закрытие формы

procedure TForm2.Button2Click(Sender: TObject);

begin

close;

end;

// запрос подтверждения при завершении программы из дочерней формы

procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

if formClose = true then

begin

CanClose:=true;

end

else

begin

case messageBox(Handle,'Действительно выйти?','Внимание!', MB_YESNO) of

IDYES:

begin

Application.Terminate;

end;

IDNO: CanClose:=false;

end;

end;

end;

procedure TForm2.BitBtn1Click(Sender: TObject);

var

St:PansiChar;

begin

if Edit1.Text <> '' then

begin

formClose:=true;

Form1.Memo1.Clear;

Form1.NicName:=Edit1.Text;

Form1.WriteDataInMMF('Пользователь '+Form1.NicName+' подключился');

Application.ShowMainForm:=true;

Form1.Visible:=true;

Form2.Close;

end

else

begin

st:='Пожалуйста введите псевдоним для авторизации';

Application.MessageBox(st,'Сообщение...',MB_OK);

exit;

end;

end;

end.


4) Модуль Unit 3 (Модуль формы, осуществляющей работу с носителями информации в системе):

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, FileCtrl, ExtCtrls, Grids, ValEdit,HDDInfo, Buttons,

ComCtrls;

const

IOCTL_DISK_GET_DRIVE_GEOMETRY = $70000;

type

// версия ОС

TWinVersion = (wvUnknown,wv95,wv98,wvME,wvNT3,wvNT4,wvW2K,wvXP,wv2003,wvVista,wv7);

//геометрия

TDiscGeometry = packed record

Cylinders: Int64; // колличество цилиндров

MediaType: DWORD; // тип носителя

TracksPerCylinder: DWORD; // дорожек на цилиндре

SectorsPerTrack: DWORD; // секторов на дорожке

BytesPerSector: DWORD; // байт в секторе

end;

//TForm

TForm3 = class(TForm)

Button1: TButton;

DriveComboBox1: TDriveComboBox;

Panel1: TPanel;

Button2: TButton;

Grid1: TStringGrid;

Button3: TButton;

GroupBox1: TGroupBox;

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.