Метка: delphi

Рисование на канве в Rad Studio Delphi

Рисование на канве в Rad Studio Delphi

Продолжение поста «Двойная буфферизация для Delphi 7»

Небольшой движок для рисования и пример вывода графики на канву в Rad Studio. Работает при создании:

multi-device application, при создании чисто Windows-приложений, жалуется на ошибочные функции DrawBitmap

var
Form1: TForm1;

Sprites : array of TBitmap;
Sprite_name: array of String;
proc:single;

implementation

{$R *.fmx}

function Sprite_Add(const FileName, SpriteName : string): TBitmap;
var
s:string;
i:integer;
begin
s:=spritename+’ ‘+filename;
try
SetLength(Sprites, Length(Sprites) + 1);
SetLength(Sprite_name, Length(Sprites) + 1);
Result := TBitmap.Create;
Result.LoadFromFile(FileName);
Sprites[Length(Sprites) — 1] := Result;
Sprite_name[Length(Sprites) — 1]:=SpriteName;
except
end;
end;

procedure Init;
var
i:integer;
begin

try
Sprites := nil;
Sprite_Add(‘art\start.bmp’,’background’);
except
end;
end;

procedure Sprite_Draw2(x, y, z, z2: single; s:string); //x, y, — процент где все находится z — размер
var
i, idx:integer;
R, R2: TRectF;
x2, y2:single;
popravka:integer;

begin
try
idx:=0;
for i:=0 to (Length(Sprites) — 1) do
if Sprite_name[i]=s then
begin
idx:=i;
Break;
end;

popravka:=0;

if (form1.ClientHeight/proc)>50 then popravka:=round((((form1.ClientHeight/proc)-50)/2)*proc);

x2:=(proc*x);
y2:=(proc*y/2);

R.Create(0,0,sprites[idx].Width,sprites[idx].Height);
R2.Create(x2,y2+popravka,x2+proc*z, y2+proc/2*z2+popravka);
form1.Canvas.DrawBitmap(Sprites[idx], R, R2, 100 );
except

end;
end;

// Вывод текста, х-у координаты (в процентах),
function textout(x, y, z, z2: single; text:string):TRectF;
var
i, idx:integer;
R, R2: TRectF;
x1, y1, x2, y2:single;
popravka:integer;

begin
popravka:=0;
proc:=form1.ClientWidth/100;
if (form1.ClientHeight/proc)>50 then popravka:=round((((form1.ClientHeight/proc)-50)/2)*proc);

x1:=form1.Width/100;
y1:=form1.Width/200;

x2:=(x1*x);
y2:=(y1*y);

result.Create(x2,y2+popravka,x2+x1*z, y2+y1*z2+popravka);
form1.Canvas. FillText(result,text ,true, 1,[], TTextAlign.Center, TTextAlign.Center);
end;

procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
const ARect: TRectF);
begin
try
if Canvas.BeginScene then
try

canvas.Stroke.Kind := TBrushKind.Solid;
canvas.Stroke.Color := TAlphaColorRec.Yellow;
canvas.Fill.Color:= TAlphaColors.Yellow;
canvas.Font.Size:=20;
canvas.Stroke.Thickness:=3;
canvas.Font.Family:=’Impact’;
Sprite_Draw2(0, 0, 100, 100, ‘background’);
textout(33, 5, 10, 100, ‘CONTINUE’);
finally
Canvas.EndScene;
end;
except

end;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
proc:=form1.Width/ 100;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
init;
end;

Задача про встречу роботов

Задача про встречу роботов

Задача:

Двух роботов сбрасывают на парашутах на бесконечную планету-линию. Роботы могут идти по линии только влево или вправо. Изначально неясно какое между роботами расстояние и кто находится слева и справа. Нужно написать программу для встречи роботов.

UPD Роботы после приземления оставляют после себя парашуты — которые можно использовать за точки отсчета.

Найдите лучший алгортим для встречи роботов.

Обновления для Rad Studio 10.3.3

Обновления для Rad Studio 10.3.3

Обновление для Delphi Rad Studio 10.3.3 Rio можно скачать здесь:
https://rutracker.org/forum/viewtopic.php?t=5850023

Сам Delphi 10.3.3 можно взять здесь:
https://rutracker.org/forum/viewtopic.php?t=5807293

Но я предпочитаю Lite-сборку:
https://rutracker.org/forum/viewtopic.php?t=5808516

Это всё пиратские сборки, впрочем можно получить бесплатную лицензию:
http://moskovchenko.com/2018/07/20/delphi-community-edition-besplatno/

Для входа на заблокированные ресурсы я использовал VPN-расширение для Chrome, но теперь просто пользуюсь отдельным браузером, анонимным Tor.

Как я свои приложения на Android 64 переводил

Как я свои приложения на Android 64 переводил

В 2019 года, компания Google решила перевести все свои приложения на 64-битную платформу и предупредила об этом разработчиков. Все кто пишут приложения на Delphi Rad Studio столкнулись с тем, что компиляции под 64-битный режим не было.

И вот, наконец выходит Rad Studio 10.3.3, скачивается с торрентов, выбирается компиляция под Android 64 и приложение (созданное ранее) зависает на заставке. Ново-созданное приложение выдает такое:

Покопавшись, обнаружил что процессор моего Doogee Shoot хоть и поддерживает 64 операционную систему, но все доступные прошивки на него 32 битные. Засада.

Пришлось брать телефон жены (Samsung A30) и собирать проекты уже на нём.

Но как оказалось, просто так взять и добавить скомпилированное приложение не получиться, по хорошему нужно собирать так называемый Бандл который содержит 32 и 64 битные приложения. Делается он просто, нужно всего лишь поставить галку:

Однако Google не хочет принимать такой бандл, сетуя на установку каких-то дополнительных ключей-подписей:

Выбираем нужный пункт, скачиваем нужный jar-файл:

Запускаем консоль, лучше сразу в администраторском режиме:

И пишем подобный код:

java -jar PATH_TO_PEPK —keystore=PATH_TO_KEYSTORE —alias=ALIAS_YOU_USE_TO_SIGN_APK —output=PATH_TO_OUTPUT_FILE —encryptionkey=GOOGLE_ENCRYPTION_KEY

Описание:

PATH_TO_PEPK = Путь до скаченного вам файлаC:\pepk.jar
PATH_TO_KEYSTORE = Путь до вашего файла-ключей приложения C:\keystore.keystore
ALIAS_YOU_USE_TO_SIGN_APK = Пишем ALIAS:

PATH_TO_OUTPUT_FILE = путь выходного файла C:\private_key.pem
GOOGLE_ENCRYPTION_KEY = ваш ключ шифрования: eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a1

Пример, так как я скачивал всё в корневой каталог, то у меня выглядит всё вот так:

java -jar «C:\pepk.jar» —keystore=»C:\mykeystore» —alias=storm —output=»C:\private_key.pem» —encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13

Два раза нужно будет ввести пароль для вашего существуюего ключа и на выходе получим искомый файл, который скармливаем Google:

Ура!

Теперь собираем сдвоенные бандлы (32+64) и публикуем их как раньше.

Двойная буферизация на Delphi

Двойная буферизация на Delphi

Очень давно пользуюсь данным кодом, что бы выводить двухмерную графику на канву. Используется двойная буфферизация.

[Код удалил]

Проект кода для Delphi 7 —  canvas_delphi_7

Theme: Overlay by Kaira Все права защищены 2003-2026
Love Delphi and Rad studio