unit unMain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,StdCtrls,lcltype,windows, Forms, Controls;
type
{ TfmMain }
TfmMain = class(TForm)
Memo1: TMemo;
private
FTotCmdWin: HWND; // handle of TotalCommander window
FParentWin: HWND; // handle of Lister window
FQuickView: Boolean; // Ctrl+Q panel
protected
procedure CreateParams(var Params: TCreateParams); override;
public
constructor CreateParented(AParentWindow: HWND);
public
class function PluginShow(ListerWin: HWND; FileToLoad: string): HWND;
class function PluginShowNext(PluginWin: HWND; FileToLoad: string): Integer;
class function PluginHide(PluginWin: HWND): HWND;
end;
implementation
{$R *.lfm}
class function TfmMain.PluginShow(ListerWin: HWND; FileToLoad: string): HWND;
var
fmMain: TfmMain;
begin
fmMain := nil;
try
fmMain := TfmMain.CreateParented(ListerWin);
fmMain.memo1.Lines.LoadFromFile(FileToLoad);
fmMain.Show;
SetWindowLongPTR(fmMain.Handle, GWL_USERDATA, PtrInt(fmMain));
// set focus to our window
if not fmMain.FQuickView then
begin
PostMessage(fmMain.Handle, WM_SETFOCUS, 0, 0);
fmMain.SetFocus;
end;
Result := fmMain.Handle;
except
if Assigned(fmMain) then
fmMain.Free;
Result := 0;
end;
end;
class function TfmMain.PluginShowNext(PluginWin: HWND; FileToLoad: string): Integer;
var
fmMain: TfmMain;
begin
fmMain := TfmMain(GetWindowLongPTR(PluginWin, GWL_USERDATA));
try
fmMain.Show;
fmMain.memo1.Lines.LoadFromFile(FileToLoad);
Result := 0;
except
Result := 1;
end;
end;
class function TfmMain.PluginHide(PluginWin: HWND): HWND;
var
fmMain: TfmMain;
begin
Result := 0;
fmMain := TfmMain(GetWindowLongPTR(PluginWin, GWL_USERDATA));
try
fmMain.Free;
except
end;
end;
procedure TfmMain.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := (WS_CHILD or WS_MAXIMIZE) and not WS_CAPTION and not WS_BORDER;
Params.WindowClass.cbWndExtra := SizeOf(PtrInt); // ~4/8 bytes for form
end;
constructor TfmMain.CreateParented(AParentWindow: HWND);
begin
inherited CreateParented(AParentWindow);
FTotCmdWin := FindWindow('TTOTAL_CMD', nil);
FParentWin := AParentWindow;
FQuickView := Windows.GetParent(FParentWin) <> 0;
end;
end. |