Showing posts with label Delphi XE3. Show all posts
Showing posts with label Delphi XE3. Show all posts

Friday, March 22, 2013

Anders' Analog Clock app ported to Delphi for iOS

My FireMonkey Clock app has been ported using a beta version of Delphi for iOS.

[caption id="attachment_39423" align="alignnone" width="225" caption=" "]Main tab[/caption]

Above you can see a screen shot of the app as it starts up. By default it uses "normal drive" - the second hand moves once per second and the minute hand moves once per minute.

The app is a Universal app (supports iPhone and iPad). The main clock screen uses a TScaledLayout to ensure proper scaling down to the iPhone (the app was designed for the iPad).

If you hit the Info button it will take you to the setup tab, where you can select "Flame" (or FireMonkey second hand) as well as "Smooth drive" - the second and minute hands move smoothly.

[caption id="attachment_39422" align="alignnone" width="225" caption=" "]Setup tab[/caption]

The setup screen uses a combination of items that scale and items that don't scale. For instance, the toolbar, the back button, and the listbox with its items are not supposed to scale, but still be aligned properly. The clock faces, however, do scale inside of a TScaledLayout.

[caption id="attachment_39425" align="alignnone" width="225" caption=" "]FireMonkey second hand[/caption]

Above you can see what the FireMonkey second hand looks like.

Below is a screen shot of my Structure Pane where you can see how I designed the app:

[caption id="attachment_39424" align="alignnone" width="127" caption=" "]Structure View[/caption]

I also wanted to mention performance. The previous version of the app was created in XE2 where I got about 2-3 frames per second in smooth mode - not very smooth. However, this version created with our upcoming product gets a blazing 60 frames per second on the iPad 3 using iOS 6.1.3 and almost the same fps rate on iPhone 4 (iOS 5.1) and iPad 2 (iOS 6.1) at about 55+ frames per second.

Enjoy!

PS: The screen shots above are actually from the *next* update I will be pushing soon... The current one looks almost the same, except for a few changes in layout.

Friday, March 8, 2013

Thursday, February 21, 2013

Mobile Preview Webinar: Last show at 5pm PST today!

Amazing attendance today! We browned out GotoWebinar! We're sorry if you were among the ones that where turned away when we hit the ceiling.

Fantastic response. Thanks for all of your questions and comments!

We've had 3,000+ folks register for this webinar.

Thanks all for watching!

The last live webinar will be at 5pm today - REGISTER NOW!

If you miss this one, the replays will be up within the next two weeks.

Enjoy!

Wednesday, February 13, 2013

Save the Date: Mobile Preview Webinar on February 21!

Don't miss our Mobile Preview Webinar on February 21! Register now. Space is limited and this webinar is filling up FAST!

Thursday, February 21, 2013
6:00AM PST / 9:00AM EST / 14:00 UTC
11:00AM PST / 2:00PM EST / 19:00 UTC
5:00PM PST / 8:00PM EST /
12:00PM 22-Feb Australia EDT

The new Delphi and RAD Studio development solution for iOS is coming soon. Now is a great time to get started on the path toward multi-device application development across Windows, Mac, iOS and then Android. Join us for this informative webinar to learn why mobile development is becoming increasingly important and the Delphi solution for mobile development.





  • Mobile opportunities for Delphi and RAD Studio developers


  • Developing iOS apps with Delphi from IDE to simulator to device


  • Delphi mobile UI and style tips


  • Data connectivity options with InterBase and SQLite for your mobile apps


Tuesday, February 5, 2013

MVP Nuggets #10

Francois Piette:

Microsoft Word or Excel calls a Delphi application
Internet Explorer Automation Part 1
Internet Explorer Automation Part 2

Adriano Santos:

Adriano has announced a workshop on Developing Mobile Applications Using FireMonkey and HTML5Builder - Portuguese - English

Ricardo Boaro:

Developing Apps for Windows and Mac (Portuguese)
LiveBindings and new edit support (Portuguese)
Working with Packages Using VCL in Delphi XE3 (Portuguese)
Working with Packages Using FireMonkey and VCL in Delphi XE3 (Portuguese)

Zarko Gajic:

The (Open) Case Of Dangling Pointers (Invalid Object References) In Delphi

Felix Colibri:

VCL Styles in Delphi
English
French

Nick Hodges:

Delphi and the Observer Pattern
Enjoy!

Embarcadero Acquires AnyDAC From DA-SOFT

SAN FRANCISCO – Feb. 5, 2013 – Embarcadero Technologies, a leading provider of software solutions for application and database development, today announced it has acquired AnyDAC from DA-SOFT Technologies. AnyDAC is a powerful, yet easy-to-use software development library for Enterprise-class data access. AnyDAC is known for its high performance, rich developer feature-set, and ease of use. Embarcadero plans to incorporate AnyDAC based technology into its multi-device app development tools which include Delphi, C++Builder, and RAD Studio. Embarcadero developer tools roadmap includes single source native deployment to Windows, Mac, iOS, and Android devices in 2013.

Full Press Release

Friday, January 25, 2013

Friday, December 7, 2012

MVP Nuggets #2

Primoz Gabrijelcic led a workshop on Visual LiveBindings last week

Danny Wind wrotes an article "Why I Like FireMonkey"

Salvador Jover wrote a recap of the XE3 Tour that Danysoft hosted - Spanish - English (Google Translate)

I'd like to celebrate Salvador Jover in particular - he re-blogs and re-tweets just about anything that is Delphi related in the blogosphere! Thank you so much Salvador!

Zarko Gajic wrote about "Understanding Owner Drawing in Delphi"

He also wrote about "Understanding and Processing Keyboard events in Delphi"

He also wrote about "Understanding and Using Windows Callback Functions in Delphi"

Enjoy!

Wednesday, December 5, 2012

Components vs Children in FireMonkey

You have probably iterated through the Components array many many times as a Delphi developer.

Consider this simple application:



It's probably no surprise that listing the Components of the form like this...


procedure TForm2.Button1Click(Sender: TObject);
var
i: Integer;
begin
Memo2.Lines.Clear;
for i := 0 to ComponentCount-1 do
Memo1.Lines.Add(Components[i].ClassName+' (Name = "'+Components[i].Name+'")')
end;


...gives you the following output, which is very similar to the Structure View in the IDE, except that it doesn't show the relationships between the components.



Listing the children, and the children of all children (recursively) is simply done by using this procedure:


procedure TForm2.ListChildren(Obj : TFMXObject; Level : Integer);
var
i: Integer;
begin
for i := 0 to Obj.ChildrenCount-1 do begin
Memo2.Lines.Add(StringOfChar(' ',2*Level)+
Obj.Children[i].ClassName+
' (Name = "'+
Obj.Children[i].Name+
'")');
ListChildren(Obj.Children[i],Level+1);
end;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
Memo2.Lines.Clear;
ListChildren(Self,0);
end;


The above code will give us a tree output with indentation to show us the children, grandchildren, etc, like this:



The list of children is much longer than you would possibly except at first. We see for instance that in FireMonkey a TButton consists of a TLayout, a TSubImage and a TText. The TSubImage and the TText in turn have 4 animations each to handle hover-in/hover-out and pressing/releasing. Likewise the TMemo holds scrollbars, a popup context menu, and much more.

The entire output from ListChildren follows below:
TSubImage (Name = "")
TButton (Name = "Button1")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TText (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TMemo (Name = "Memo1")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TLayout (Name = "")
TSmallScrollBar (Name = "")
TSmallScrollBar (Name = "")
TScrollBar (Name = "")
TScrollBar (Name = "")
TBrushObject (Name = "")
TBrushObject (Name = "")
TFontObject (Name = "")
TScrollContent (Name = "")
TPopupMenu (Name = "")
TPopupMenuContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TEdit (Name = "Edit2")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TLayout (Name = "")
TLayout (Name = "")
TBrushObject (Name = "")
TBrushObject (Name = "")
TFontObject (Name = "")
TPopupMenu (Name = "")
TPopupMenuContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TMenuItem (Name = "")
TMenuItemContent (Name = "")
TContentEdit (Name = "")
TClearEditButton (Name = "ClearEditButton1")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TButton (Name = "Button2")
TLayout (Name = "")
TSubImage (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TRectAnimation (Name = "")
TText (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TColorAnimation (Name = "")
TViewport3D (Name = "Viewport3D1")
TDummy (Name = "")
TDummy (Name = "")
TCamera (Name = "")
TSphere (Name = "Sphere1")
TCube (Name = "Cube1")
TTextureMaterialSource (Name = "TextureMaterialSource1")

Enjoy!

Friday, November 30, 2012

MVP Nuggets #1

In "MVP Nuggets" I will be highlighting things that some of our MVPs have done in the last week or so.

Luciano Pimento wrote a tips and tricks article about improving performance and maintenance of your client/server applications.

Marcos Antonio Moreira did a Delphi multi-platform lecture at a university. He also did a University TV interview ahead of his talk. He blogs about it here.

Pedro Bento published an article "Introduction to Generics in Delphi" in Active Delphi (print magazine). His blog post.

Zarko Gajic wrote an article on "Creating, Parsing and Manipulating XML Documents with Delphi"

Juan Antonio Castillo wrote an article "Creating stylish applications in Delphi"

Alexander Bozhko celebrates the 3 year anniversary of DelphiFeeds.RU

Vladislav Bajenov writes about how to work with email attachements in Delphi

Nick Hodges writes about "Why You Should Choose Delphi"

Thanks to all active MVPs, and I look forward to highlighting more next time!