TFrameStand component and PasCon conference
During the last few months, I’ve been working on a new component for FireMonkey: TFrameStand.
The purpose of this component is to use TFrame(s) in FireMonkey applications (mobile or not) adding the developer an opportunity to reuse some parts of the UI (including effects and transitions) while showing the frame content to the user.
You can think as the frame will be given a stand (thus the TFrameStand name) that can be applied to any frame.
The frame itself can vary a lot, from a simple button (think at the floating buttons of Android’s Material Design) to a full frame with data or UI controls on it (a view of a mobile app), but the behavior involved in showing it might be shared (think about a LightBox effect or some sliding transitions that can be consistent through all the application).
The component (and some demos) are available at this GitHub repository. There will be an article on next issue of Blaise Pascal Magazine about TFrameStand and I will be showcasing it at the PasCon conference (on September, 15th in Leiden) in the afternoon (english) session “Build stunning FMX app with TFrameStand: Effectively use frames in your FMX mobile app with TFrameStand”.
Some developers already tested TFrameStand a bit and feedback is good!
Comments or questions will be appreciated! More news and example will come in the next weeks 😉
Andrea
Hello,
Thank you for this nice component !. I have a small feature request, is it meaningful to extend function Show this way ? :
function Show(const ABackgroundTask: TProc<TFrameInfo> = nil;
const AOnTaskComplete: TProc<TFrameInfo> = nil;
const AOnTaskCompleteSynchronized: Boolean = True): ITask;
to
function Show(const ABackgroundTask: TProc<TFrameInfo> = nil;
const AOnTaskBegin: TProc<TFrameInfo> = nil;
const AOnTaskBeginSynchronized: Boolean = True;
const AOnTaskComplete: TProc<TFrameInfo> = nil;
const AOnTaskCompleteSynchronized: Boolean = True): ITask;
begin
Result := nil;
FireCustomBeforeShowMethods;
if Assigned(FrameStand) and Assigned(FrameStand.OnBeforeShow) then
FrameStand.OnBeforeShow(FrameStand, TFrameInfo(Self));
if not FireCustomShowMethods then
DefaultShow;
FireShowAnimations;
if Assigned(ABackgroundTask) then
begin
Result := TTask.Create(
procedure
begin
if Assigned(AOnTaskBegin) then
begin
if AOnTaskBeginSynchronized then
TThread.Synchronize(nil,
procedure
begin
AOnTaskBegin(Self);
end
)
else
AOnTaskBegin(Self);
end;
ABackgroundTask(Self);
if Assigned(AOnTaskComplete) then
begin
if AOnTaskCompleteSynchronized then
TThread.Synchronize(nil,
procedure
begin
AOnTaskComplete(Self);
end
)
else
AOnTaskComplete(Self);
end;
end
).Start;
end;
end;