Автор: Максим Сысоев
Репозиторий: Github
Связь со мной: Telegram
Telega π - Библиотека для работы с Telegram Bot API в Delphi
Библиотека для работы с Telegram Bot API
Зависимости
RAD Studio CE
CloudAPI
Примеры
Получение Username бота
program Project5;
{$APPTYPE CONSOLE}
{$R *.res}
uses
TelegaPi.Bot,
TelegaPi.Types,
System.SysUtils;
var
Telegram: TTelegramBot;
begin
Telegram := TTelegramBot.Create({$I TokenTelegramBot.inc});
try
{ TODO -oUser -cConsole Main : Insert code here }
Writeln(Telegram.getMe.Username);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
Telegram.Free;
end.
Пример автоответчика
Напишите ему "привет"
Код: https://gist.github.com/ms301/c7281f443f481115b7643116535e697d
Всем спасибо) Решение нашел сам.
Прочитав http://yaroslavbrovin.ru/new-approach-of-development-of-firemonkey-control-control-model-presentation-part-1-ru/ и другие материалы с этой странички (к слову: жутко полезная информация) перекрыл в своем компоненте функцию
function DefinePresentationName: string; override;
function TScrBox.DefinePresentationName: string;
begin
Result:='PresentedScrollBox-style';
end;
Дело оказалось в том, что не загружалась презентация для моего компонента (а модель создавалась), точнее пыталась загрузиться презентация 'ScrBox-style', прокси для которой не зарегистрирован. Ведь имя презентации формировалось как 'Имя класса' + '-style'
Но этого оказалось недостаточно. Еще понадобилось задать свойство StyleLookup:='scrollboxstyle'; т.к. скроллбары и прочие контролы берутся из стиля TStyledCustomScrollBox'а, который описан в FMX.ScrollBox.Style.
Надеюсь кому-то поможет, и этот кто-то не будет как я тратить на решение этой задачи три дня жизни.
Test.7z
У меня большая просьба: вместо кучи маленьких сообщений, которые вы пишете буквально одно за другим, составьте одно, в которое напишите всё то, что хотели сказать.
Это не чат, где "кто в онлайне - прочитали, остальным пофиг". Это форум. И искать зерна истины в этой портянке из мимолетных мыслей как минимум неудобно.
В общем рабочее время подходит к концу - поэтому держи:
Function SampleSendFile(Const Url, FileName: String): Boolean;
var
lHttp: THTTPClient;
lSendData: TMultipartFormData;
lResponse: IHTTPResponse;
Begin
lHttp := THTTPClient.Create;
lSendData := TMultipartFormData.Create;
try
lSendData.AddFile('FileField', FileName);
lResponse := lHttp.Post(Url, lSendData);
Result := lResponse.StatusCode = 200;
finally
lSendData.Free;
lHttp.Free;
end;
End;
Вот пример того, как писать и читать BLOB
procedure SaveToFireDACBlob;
var
MemStream: TMemoryStream;
begin
FireDAC.Connected := True;
MemStream := TMemoryStream.Create;
try
Image1.Bitmap.SaveToStream(MemStream);
MemStream.Seek(0,0);
FDQueryInsert.ParamByName('Media').LoadFromStream(MemStream,ftBlob);
FDQueryInsert.ParamByName('MType').AsString := '0';
FDQueryInsert.ExecSQL();
except
on e: Exception do begin
ShowMessage(e.Message);
end;
end;
MemStream.Free;
FireDAC.Connected := False;
end;
procedure LoadFromFireDACBlob;
var
BlobStream: TStream;
begin
FireDAC.Connected := True;
try
FDQuerySelect.Open;
FDQuerySelect.First;
while(not FDQuerySelect.EOF)do begin
// access a stream from a blob like this
BlobStream := FDQuerySelect.CreateBlobStream(FDQuerySelect.FieldByName('Media'),TBlobStreamMode.bmRead);
// access a string from a field like this
if (FDQuerySelect.FieldByName('MType').AsString='0') then begin
// load your blob stream data into a control
ImageViewer.Bitmap.LoadFromStream(BlobStream);
end;
BlobStream.Free;
FDQuerySelect.Next;
end;
except
on e: Exception do begin
//ShowMessage(e.Message);
end;
end;
FireDAC.Connected := False;
end;
{источник http://www.fmxexpress.com/read-and-write-a-blob-field-using-firedac-with-firemonkey-on-android-and-ios/}
Касательно работы с изменением качества/размера, считаю что необходимо использовать TBitmapSurface (unit FMX.Surfaces)