Здравствуйте, уважаемые участники Хабрахабра.
Наверняка среди вас есть люди, которые пользуются таким замечательным сервисом как Google Keep. Это развивающийся аналог Evernote, но только от Google. На данный момент есть версия для Android, веб-приложение а ля Gmail и расширение для Chrome. Всё вроде бы хорошо, но нет десктопного приложения.
Лично я привык на рабочем столе в Windows 7 (на втором мониторе) иметь что-то типа постоянно открытого блокнота, в котором можно делать себе напоминания, которые всегда доступны и мозолят глаза (чтобы не забыть). Это стандартный гаджет Windows 7. Как бы было хорошо синхронизировать содержимого такого блокнота с веб-сервисом, в данном случае, Google Keep.
Ну и зачем ждать разработчиков Google? К тому же, не факт, что они разродятся таким приложением.
Открываем Delphi 7. Делаем по вкусу размеры формы, перетаскиваем компонент TWebBrowser и пишем примерно следующее:
Координаты окна:
Я указал исходя из работы в своем окружении (2 монитора) и желаемого положения окна на 2-ом мониторе.
Вы можете указать любые свои координаты. При желании программу можно снабдить INI-шником с нужными настройками.
В свойствах формы указал тип невидимой рамки.
Процедура TForm1.MsgHandle необходима для корректной обработки нажатия клавиши Enter во время редактирования текста в окне Google Keep.
Еще одно замечание. Для упрощения работы желательно, чтобы в браузере была активная сессия с тем же GMail.
Тогда Google Keep в новом окне автоматически подхватит куки сессии.
Ярлык EXE-шника помещаем в автозагрузку и всё готово.
ps: Я не являюсь профессиональным программистом. Просто любитель.
pps: Расширение для Chrome лично мне не подошло, разместить его как гаджет Windows 7 на отдельном рабочем столе с независимой работой от браузера не получилось…
Наверняка среди вас есть люди, которые пользуются таким замечательным сервисом как Google Keep. Это развивающийся аналог Evernote, но только от Google. На данный момент есть версия для Android, веб-приложение а ля Gmail и расширение для Chrome. Всё вроде бы хорошо, но нет десктопного приложения.
Лично я привык на рабочем столе в Windows 7 (на втором мониторе) иметь что-то типа постоянно открытого блокнота, в котором можно делать себе напоминания, которые всегда доступны и мозолят глаза (чтобы не забыть). Это стандартный гаджет Windows 7. Как бы было хорошо синхронизировать содержимого такого блокнота с веб-сервисом, в данном случае, Google Keep.
Ну и зачем ждать разработчиков Google? К тому же, не факт, что они разродятся таким приложением.
Открываем Delphi 7. Делаем по вкусу размеры формы, перетаскиваем компонент TWebBrowser и пишем примерно следующее:
unit google_keep_app;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, ActiveX, StdCtrls;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FOleInPlaceActiveObject: IOleInPlaceActiveObject;
procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
OleInitialize(nil);
Application.OnMessage := MsgHandler;
Form1.Left:=1920;
Form1.Top:=590;
Form1.Height:=460;
WebBrowser1.Navigate('https://drive.google.com/keep');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
OleUninitialize;
FOleInPlaceActiveObject := nil;
end;
procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
var
iOIPAO: IOleInPlaceActiveObject;
Dispatch: IDispatch;
begin
if not Assigned(WebBrowser1) then
begin
Handled := False;
Exit;
end;
Handled := (IsDialogMessage(WebBrowser1.Handle, Msg) = True);
if (Handled) and (not WebBrowser1.Busy) then
begin
if FOleInPlaceActiveObject = nil then
begin
Dispatch := WebBrowser1.Application;
if Dispatch <> nil then
begin
Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
if iOIPAO <> nil then
FOleInPlaceActiveObject := iOIPAO;
end;
end;
if FOleInPlaceActiveObject <> nil then
if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
((Msg.wParam = VK_BACK) or (Msg.wParam = VK_LEFT) or (Msg.wParam = VK_RIGHT)
or (Msg.wParam = VK_UP) or (Msg.wParam = VK_DOWN)) then begin
exit;
end;
FOleInPlaceActiveObject.TranslateAccelerator(Msg);
end;
end;
end.
Координаты окна:
Form1.Left:=1920;
Form1.Top:=590;
Form1.Height:=460;
Я указал исходя из работы в своем окружении (2 монитора) и желаемого положения окна на 2-ом мониторе.
Вы можете указать любые свои координаты. При желании программу можно снабдить INI-шником с нужными настройками.
В свойствах формы указал тип невидимой рамки.
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
— для скрытия значка приложения из панели задач.Процедура TForm1.MsgHandle необходима для корректной обработки нажатия клавиши Enter во время редактирования текста в окне Google Keep.
Еще одно замечание. Для упрощения работы желательно, чтобы в браузере была активная сессия с тем же GMail.
Тогда Google Keep в новом окне автоматически подхватит куки сессии.
Ярлык EXE-шника помещаем в автозагрузку и всё готово.
ps: Я не являюсь профессиональным программистом. Просто любитель.
pps: Расширение для Chrome лично мне не подошло, разместить его как гаджет Windows 7 на отдельном рабочем столе с независимой работой от браузера не получилось…