Skip to content

Commit

Permalink
New refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Ilya Tolstenko committed May 30, 2023
1 parent 885049e commit 1be330d
Showing 1 changed file with 133 additions and 74 deletions.
207 changes: 133 additions & 74 deletions main.pas
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
interface

uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Clipbrd,
ExtCtrls, Buttons, IniFiles;
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Interfaces,
Clipbrd, ExtCtrls, Buttons,IniFiles;


type

{ TMainForm }

TMainForm = class(TForm)
Expand All @@ -24,44 +26,42 @@ TMainForm = class(TForm)
procedure Timer1Timer(Sender: TObject);
procedure ToggleBox1Change(Sender: TObject);
private
ClipboardText: string;
PreviousClipboardText: string;
ConfigFileName: string;
FileText: string;
ClipboardFile: TextFile;

procedure WriteSettingsToIni(const AFileName: string; TimerEnabled: Boolean);
procedure LoadSettingsFromIni();
procedure SyncClipboardToText();
procedure SyncTextToClipboard();
procedure UpdateUI();

public

end;

var
MainForm: TMainForm;
ClipboardText: string;
PreviousClipboardText: string;
FileName: string;
FileText: string;
ClipboardFile: TextFile;


implementation

{$R *.lfm}

{ TMainForm }

procedure TMainForm.WriteSettingsToIni(const AFileName: string; TimerEnabled: Boolean);

procedure WriteSettingsToIni(const FileName: string; TimerEnabled: Boolean);
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
try
IniFile.WriteString('Settings', 'FileName', AFileName);
IniFile.WriteString('Settings', 'FileName', FileName);
IniFile.WriteBool('Settings', 'TimerEnabled', TimerEnabled);
finally
IniFile.Free;
end;
end;

procedure TMainForm.LoadSettingsFromIni();

procedure LoadSettingsFromIni();
var
IniFile: TIniFile;
FileName: string;
Expand All @@ -74,89 +74,148 @@ procedure TMainForm.LoadSettingsFromIni();
finally
IniFile.Free;
end;
Label1.Caption := FileName;
ToggleBox1.Checked := TimerEnabled;
MainForm.label1.Caption := FileName;
MainForm.ToggleBox1.Checked := TimerEnabled;
end;

procedure TMainForm.SyncClipboardToText();
procedure TMainForm.Button1Click(Sender: TObject);
begin
if Clipboard.AsText <> '' then
begin
ClipboardText := Clipboard.AsText;
PreviousClipboardText := ClipboardText;
Edit1.Text := ClipboardText;
end;
Savedialog1.Execute;
label1.Caption:=Savedialog1.FileName;
WriteSettingsToIni(label1.Caption, Timer1.Enabled)
end;

procedure TMainForm.SyncTextToClipboard();
procedure TMainForm.FormCreate(Sender: TObject);
begin
if (FileText <> Clipboard.AsText) then
begin
Clipboard.AsText := FileText;
Edit1.Text := FileText;
end;
end;

procedure TMainForm.UpdateUI();
begin
if ToggleBox1.Checked then
ToggleBox1.Caption := 'Sync ENABLED'
else
ToggleBox1.Caption := 'Sync DISABLED';

WriteSettingsToIni(Label1.Caption, Timer1.Enabled);
PreviousClipboardText := Clipboard.AsText;
label1.caption := '';
LoadSettingsFromIni();
ToggleBox1.OnChange(Sender);
if Clipboard.AsText <> '' then
begin
ClipboardText := Clipboard.AsText;
PreviousClipboardText := ClipboardText;
edit1.text := ClipboardText;
end;
end;

procedure TMainForm.Button1Click(Sender: TObject);

function GetFileText(filename:string): string;
var
FileContents: TStringList;
FileText:string;
begin
if SaveDialog1.Execute then
begin
Label1.Caption := SaveDialog1.FileName;
UpdateUI();
end;
FileContents := TStringList.Create;
try
FileContents.LoadFromFile(filename);
FileText := FileContents.Text;
// Костыльно пытаюсь удалить последний символ если это перевод строки
if Length(FileText) > 0 then
begin
if FileText[Length(FileText)] = #10 then
Delete(FileText, Length(FileText), 1);
end;
finally
FileContents.Free;
end;
GetFileText := FileText;
end;

procedure TMainForm.FormCreate(Sender: TObject);

procedure WriteFileText(filename,text2write:string);
var
ClipboardFile: TextFile;
begin
PreviousClipboardText := Clipboard.AsText;
Label1.Caption := '';
LoadSettingsFromIni();
ToggleBox1.OnChange(Sender);
SyncClipboardToText();
AssignFile(ClipboardFile, filename);
Rewrite(ClipboardFile);
Write(ClipboardFile,text2write);
CloseFile(ClipboardFile);
end;

procedure TMainForm.Timer1Timer(Sender: TObject);
var
FileContents: TStringList;
clipcontent,filecontent:string;

begin
SyncClipboardToText();

if Label1.Caption <> '' then
begin
FileContents := TStringList.Create;
try
FileContents.LoadFromFile(Label1.Caption);
FileText := FileContents.Text;

if Length(FileText) > 0 then
begin
if FileText[Length(FileText)] = #10 then
Delete(FileText, Length(FileText), 1);
end;
finally
FileContents.Free;
end;
// REFACTORED
// Получаем значение файла и буфера
clipcontent := Clipboard.AsText;
filecontent := GetFileText(label1.caption);
// Если они оба пустые то ничего не делаем
if (clipcontent <> '') and (filecontent <> '') then
begin
// Проверяем изменился ли буфер обмена
if (clipcontent <> PreviousClipboardText) and (label1.caption <> '') then
begin
try
WriteFileText(label1.caption,clipcontent);
finally
PreviousClipboardText := clipcontent;
end;
end;
// Проверяем файл
if filecontent <> clipcontent then
begin
Clipboard.AsText := filecontent;
clipcontent := filecontent;
PreviousClipboardText := clipcontent;
end;

end;
edit1.text := clipcontent;


// Если в буфере пусто и вайле пусто то не дела

// Мониторинг содержимого буфера обмена
// Если в буфере текст то записываем его в переменную.
//if Clipboard.AsText <> '' then ClipboardText := Clipboard.AsText;
//// Если текст в буфере изменился
//if ClipboardText <> PreviousClipboardText then
// begin
// // Выводим его содержимео в эдит-текст
// edit1.text := ClipboardText;
// // Сохраняем в переменную PreviousClipboardText
// PreviousClipboardText := ClipboardText;
// // Если имя файла не пустое то пробуем записать в этот файл
// //if label1.Caption <> '' then
// //begin
//
// //end;
// end;
//// Мониторинг содержимого файла
////if label1.Caption <> '' then
// //begin
// FileText := GetFileText(label1.caption);
//
// // Если буфер и файл не совпадают записать файл в буфер
// if (FileText <> Clipboard.AsText) then
// begin
// Clipboard.AsText := FileText;
// edit1.text := FileText;
// end;
// //end;

SyncTextToClipboard();
end;
end;

procedure TMainForm.ToggleBox1Change(Sender: TObject);
begin
Timer1.Enabled := ToggleBox1.Checked;
UpdateUI();
if ToggleBox1.Checked then
begin
ToggleBox1.Caption := 'Sync ENABLED';
Timer1.Enabled:= True;

end
else
begin
ToggleBox1.Caption := 'Sync DISABLED';
Timer1.Enabled:= False;
end;
WriteSettingsToIni(label1.Caption, Timer1.Enabled)

end;

end.


0 comments on commit 1be330d

Please sign in to comment.