For forums, blogs and more please visit our
Developer Tools Community.
By: Christine Ellis
Abstract: Frames Live Chat Transcript from Nov 4th, 1999
This is a question asked by a chat participant
This is an answer or message posted by a speaker
This is another question asked by a chat participant
This is another answer or message posted by a speaker
This is an editorial comment
Please note: Some of the text for this chat has been edited for clarity.
Welcome to today's moderated chat on Frames!
Your moderator for today's event is Charlie Calvert of Developer Relations.
The speaker(s) present at today's Delphi chat are:
Chuck Jazdzewski - Chief Architect
John Kaster - Developer Relation
Danny Thorpe - Senior Engineer
David Intersimone - VP of Dev. Relations
Before we start with the chat, our lawyers ask us to post the following message: "Forward-looking statements, if any, made during this online discussion, including, but not limited to those concerning Inprise's future financial performance, product availability dates, and the potential features of or benefits to be derived from the company's products, will involve a number of uncertainties and risks, and actual events or results may differ materially. "Factors that could cause actual events or results to differ materially include, among others, the following: difficulties in integrating the operations and technology of Visigenic Software or other companies or technologies which the company may acquire, possible disruptive effects of organizational or personnel changes, shifts in customer demand, market acceptance of the companys new or enhanced products, delays in scheduled product availability dates, actions or announcements by competitors, software errors, general business conditions, and market growth rates in the client/server and Internet software markets, and other factors described in the companys S.E.C. reports on forms 10-K, 10-Q, 8-K, and the Inprise. . ."
This auditorium is currently quiet. Chat has been disabled to keep the noise down. You will not be able to see other users also logged into this auditorium. To ask a question, use /ask and type in your question.
How do you lock the contents of a frame to make it easier to move it around in a container?
We don't support locking the contents of a frame in this version. We will consider it for a future release.
Suggestion: How about an unmoderated chat with DavidI, Chuck Z, Charlie C, etc. sometime?
We have found that unmoderated chats don't work well. And that it becomes a free-for-all asking questions. Thanks for the suggestion though. We may try to schedule some to see how they work.
is there a way to cause all user imputs into controls that are on a frame to be synched with all of the frames in an app?
I am not sure what you mean by this question. Could briefly describe what you are trying to accomplish?
Will frames be supported in Kylix? ;-)
If you define a property on a frame that is published, is there a way to make it show up in the object inspector?
Only if you register the frame as a component, but then it is no longer modifiable at design time.
Today's chat is on "Frames". We will not be answering questions on other product areas. Thank you.
When creating frames dynamically at runtime when can a component safely call GetParentForm and get the correct result (instead of nil) during its creation cycle? Most components do this in the Loaded method and it is not set yet there.
Calling GetParentForm will not return a form until the frame is hosted into a form. If you create it dynamically it will not be hosted into a form until the parent property is set. This differs from when you it is loaded inside a form.
I have not looked at frames, could you explain what might be some uses for frames
Frames are useful to organize groups of controls that are used in multiple places in your application. If you used templates, most of the time, frames are a better approach. For example, if you have a bitmap that is used in multiple forms, you can put it in a frame and only one copy of that bitmap is included in the resources of your application. You could also describe a set of edit fields that are intended to edit a table with a frame and use that whenever you want to enter data into the table.
Is it possible to use Frames as components in packages? Right now, when I register a frame as a component, it works only, if I compile it without packages.
Yes, you can definitely use frames in packages. It sounds like you might be missing something from the packages. You should drill down on this problem in the vcl.components.using newsgroup.
Given that frames do not enforce encapsulation at all or have a design-time interface, do you intend to provide another way to design compound components visually without sacraficing the principle of ENCAPSULATION?
We have not provided another way to visually design components but we will consider it for a future release.
How can I make Frame data-aware? I tried to do as with any other component, but I've got AV. Is it doable? If not, is there a work-around?
If you put a TDataSource component on the frame and connect the contained data aware component to it, when the data source is connected to the data set on the targe frame is set all the components connected to the data source will be connected to the table in the form.
Since there is no logical place for an OnCreate event, is there any thought or possiblity to giving an event that fires off once all the fixups are done, sort of an AfterCreate to allow for manual fixup?
There are no events that you can handle for this, but you can override the constructor in the frame or override the Loaded method. We will consider adding an event for this kind of code in the future.
How do you respond to the fact that a user of a frame can rewire the embedded controls beyond the initial intent of the frame author?
That is possible you are right. We will consider allowing some of the functionality of the frame to be locked in a future release.
Can Frames be nested inside one-another?
Have you seen Custom Containers from Sergey Orglik? Would it be possible to incorporate his idea of a container class "repository" into the your framework? Also, his custom containers allow NEW published information to show up in the object inspector ... a very nice feature.
I have not seen it. From your description it sounds interesting. Send me e-mail about where I can find it.
When can we have a chat about Borland marketing?
I will schedule it and update the Delphi Chat Schedule on the community web site.
This relates to frames in principle: Was it logically necessary to tie "published" to visibility? That is, Pulblished implies Public.
We feel that if you make something published, accessable at runtime, it needs to be clear that it is also public. If you place a private member in the runtime type information it means it is accessable in places where the language would indicate that it shouldn't be. That said, there are some appliations for such a beast, so we might consider allowing it in a future release.
Is there a limit to the number of frames that you can use?
Nope. Well, available memory, disk space, etc...
What is the best way to have dynamic frames? Let's say, I have two different address frames, one with USA view, and one with European view, and would like to change them dynamically, based on the country field in the database, without losing the content of other TEdit fields on the main frame (the address frame is a part of a larger Person frame).
I am not sure this is the best way, but you could create the frame dynamically at runtime. You could also have the frames in a page control without the page tabs showing and flip the pages at runtime.
Are there any components that you can't use on a frame?
Components that stream out custom properties are responsible for comparing the current value to the property value of the "ancestor". If a component doesn't do that, it isn't fully compatible with form inheritance or frames. This is only an issue for components that define custom property streaming via DefineProperties.
I don't have Delphi 5 yet (it's on order). Please explain what this "Frames" thing is about.
This is very high-level, but frames allow you to visually create a component group, make default behavior for it, inherit from it, use it in multiple applications, share resources (like bitmaps) so only one copy of the bitmap is in the app, and so on.
Why are there very few books on Delphi 5, there are tons on VB? Where is C Calverts D5 Unleashed?
There will be no D5 Unleashed, but Marco Cantu's book is out and I believe that Steve Teixeira and XMan's book is on the way.
Just curious, I can see the answer to the questions but not the questions. Is this how it is suppose appear?
It depends on the interface you use for ichat. The ichat plug-in works best and you shouldn't have that problem. We're seeing all of the questions and answers posted and our systems seem to be working okay today.
We'll be sure to post the transcript of today's chat on the community site, too. So, if you've missed anything today, you'll find everything there.
Will the Solaris version of Delphi have frames?
Uh, well, if we create a Solaris version, it will support frames :-).
We were shown in DC by JK using frame as components, could you speak more on this topics? and possible releasing our own frame components!
Not positive what you're asking, but Charlie and I both plan on doing articles on frames on the community site, and you should definitely check CodeCentral for examples. I'll bug people here to post some examples up there as well.
What is the difference between using a frame and using form inheritance?
In a nutshell, frames are form inheritance without forms. Frames are nestable. At design time, you're manipulating multiple instances of frames on forms, whereas in form inheritance, you're manipulating class descendents of forms. Frames don't allow deletion or insertion of components, but form inheritance does. etc. etc. There's more info in the online help.
To rephrase my question. Lets say I have a an option for my program that gives the end-user five choices and I use a frame with five radio buttons to depict those five choices. I then give them two different places to change the options. Is there any way to automatically have the users previous selections shown in both frames?
There is no built in, generic method to keep them in sync. If you use data aware controls connected to fields, the data is stored in the fields and all controls contected to them will be updated automatically.
Is it possible to share Frames amoung a group of developers? If so, how?
Yes. They are just files and you can share them just like they where forms.
How about a poll on the community site to help determine future chat subjects?
We definitely want to do this. We'll implement it as soon as we can. We already have a backlog of applications to write. Should discuss this in the community newsgroup further. As soon as I have a spec, I'll post it somewhere for people to review. Working on specs for some of the other apps right now.
Where can I get a list of all of the Borland chat attendees mailing addresdes? ... What's Chuck's email? =)
Hey, what kind of question is that? But maybe if I type real fast, I can get them out before they can stop me:
firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com
Could you list future chat times including EDT and other time zones? I can program like a Banshee..but I am time zone challenged.
The schedule of upcoming Live Delphi Chats can be found at https://community.borland.com/article/1,1410,10208,00.html. The next Delphi chat will be on ADOExpress next Thursday, Nov. 11th at 10:00am Pacific Time (1800 GMT).
We'll also add a time zone conversion URL to the chat schedule. Just saw one yesterday that I should be able to find again.
Chuck, in your opinion, where does visual form inheritence now stand as frames seem like a very similar concept?
They are very similar. In fact, they user much of the same code in VCL and the IDE. Frames are different in that they allow you to imbed instead of inherit. Just like aggregation and inheritence, there is a lot of similarities but there are many things that are easier to accomplish with aggregation than inheritence as well as the other way around.
Today's chat is on Frames. Please use the /ask command to ask questions of the speakers.
Can Frames be created on the fly in a procedure the way you can create say a button or a listbox?
Yes, they can. There have been some messages about this in the Delphi newsgroups just in the last few days.
I've found dynamic creation fo Frames a power feature. Over the past couple of months I've come to the conclusion that interfaces and Frames are a very natural combo. Any thoughts in the future to add enhancements to Delphi to make the use of interfaces even easier? One idea of mine was to tight click in the Code Explorer and having an impliments option that would allow me to select what interfaces I want the class to impliment and what functions to go ahead and stub out.
Yes. We are looking at ways to make interfaces easier especially when connected to components.
Viewing the frame as a visual container, I have no contol over the properties and events that I expose or define? Will you remedy that in the future?
Just as with forms, you can delete the published field declarations in a frame class. This is one way to limit programmatic access to the elements of the frame. So, there are techniques to control exposure. We'll work on making them more obvious in the future, but you can do it now.
if the only way to see a frames published properties to to register it as a component is it possible that this could be in a future version?
Currently that is the case. We will look at ways to address this in the future.
There is time conversion at http://www.timeanddate.com/
If I want to show a dialog that contains nothing but the components defined in a frame, do I have to drop the frame on an empty form first or it is ok to call the frame directly?
A frame must be hosted in a form, so yes you need to put into a form.
Will using frames cut down on the memory and windows resources that my applications use?
Absolutely! Bitmaps and other reference-counted resources (strings) would be shared among all instances of the frame used in the application.
We're almost out of questions. Please make sure to get your new questions into the queue in the next 10 minutes.
What other cool things like Frames is the Delphi R&D department playing with?
Sure! We're working on ******, ******* *** *****, and might even attempt *********************.
Could you provide more info the use of frame as components, and the release (selling) of those components - as third-party tools?
You can definitely make resellable frames, and we've heard from several people working on doing this. We're also working on additional examples for frames that will be published in CodeCentral or articles in the community site.
scratches his head.
slaps jkaster with a trout
Is it safe to assume that delphi developers can now visually create components instead coding, coding, coding?
Yes, frames can be used to visually create components.
What are the basic advantages of frames over Compound Components?
Frames are easier to create and can be customized at design.
When is the chat about interfaces?
Great idea. We'll add it to the schedule of Delphi chats for the future.
If I have multiple DLLs, all containing the same frame with a graphic image, is there still resource savings if these DLLs are loaded at the same time?
Well, it depends on what you mean by "DLLs". Putting a frame in multiple stand-alone (non-package) DLLs will produce multiple copies of the code and data, and runtime memory. Using multiple instances of a frame in multiple packages will share the code, data, and runtime base class instance data.
We just talked to the speaker (Danny) about doing an Interfaces chat. We've scheduled it for Dec. 9th at 10:00am Pacific Time (1800 GMT). How's that for a response to your request?! :-)
Is registering a frame as a component nothing more than calling registercomponent? Or, is there more to it?
Calling RegisterComponent and putting it into a design time package, are the only things that is required. You probably would want to come up with a custom icon as well.
How is Kylix coming along?
Its going great.
We will post the transcript for today's chat on the community site by the end of the day today or tomorrow at the latest.
Can I create new component without putting it in a package?
Yes, but you cannot use it at design time unless it is regsitered in the IDE and that requires it appear in, at least, a design time package. It doesn't have to be in a runtime package.
We will no longer be accepting new questions for the speaker(s). We will continue to answer the questions that have already been accepted.
"To build Outlook style apps, should I use frames or stick to "embedded" forms (how can I merge menus if they are in a frame?)?
Hmm. Not sure about menu merging. You might need to manually merge them. As for building Outlook-style apps, you'll have to put in your own email corruptors and access violations. (sorry) ;P
I like the idea of using frames to visually create components. You'd have to write your own constructor/destructor. What other considerations over creating a component manually would I need to consider?
Once you make a frame a component, none of the components in the frame are available at design time. Any properties of sub-components that you would like the user to be able to change you need to add a published property on the frame that will then modify the corresponding property in the nested component.
What is Kylix?
Delphi and C++ Builder for Linux. See the press release at http://www.borland.com/about/press/1999/linuxdev.html
Any Linux converts in the Delphi group after working on Kylix?
Linux has its advantages and its weaknesses, like any other software. It will be much easier to enjoy Linux once Kylix is available. :P
Thank you for joining us today!
The auditorium will be unhushed shortly so that you can resume general chat.
Please join us for future Delphi Team chats. The schedule of upcoming Live Delphi Chats can be found at http://community.borland.com/article/1,1410,10208,00.html.
Hope to see you here again!
Could not retrieve comments. Please try again later.
Download Delphi 10 now!
Webinars on demand!
More social media choices:
Delphi on Google+
@RADTools on Twitter
Server Response from: ETNASC03