Wiki Home

_ Exam 70-155 Study Group Log _1999/10/08


Namespace: SoftwareEng
[Irrelevant material was trimmed]

Session Start: Fri Oct 08 16:51:17 1999

[16:51] *** Now talking in #VisualFoxPro

[16:53] {Nancy} Evan-I really like how you structured the com topic

[16:53] {Evan Delay} Thank you.

[16:54] {Nancy} I extended Rick's zipcode example and it's available via FTP.

[16:54] {Nancy} It let's you switch between a local and remote db.

[16:54] {Evan Delay} Cool.

[16:58] {Nancy} Paul, we are working thru the topics for the soon-to-be-released beta version of the VFP distributed certification exam.

[16:59] {PaulHemans} Excellent

[16:59] {PaulHemans} Is this every week?

[16:59] {Evan Delay} A few times per week.

[16:59] {Nancy} You can find the topics either at MS or on the Fox wiki:
CategoryExam70-155

[17:03] {Nancy} So, just to start, we've been taking assignments and then discussing the topics during these chats.

[17:04] {CraigBerntson} OK..Denormalization

[17:05] {CraigBerntson} Normalization... optimizes updates at the expense of retrievals. When a fact is stored in only one place, retrieving many different but related facts usually requires going to many different places. This tends to slow the retrieval process. Updating is quicker, however, because the fact you're updating exists in only one place. Frequently, however, performance needs dictate very quick retrieval capability for data stored in relational databases. To accomplish this, sometimes the decision is made to denormalize the physical implementation. Denormalization is the process of putting one fact in numerous places. This speeds data retrieval at the expense of data modification.

[17:06] {CraigBerntson} and if you look up what Date and Codd had to say, third normal form, which is what most of us use isn't always the best design

[17:07] {Nancy} That's a great summary. Safe to say: use normalization to get the data in. Once it's in (and won't be changed) denormalize for quick retrieval/analysis.

[17:07] {CraigBerntson} they say that 3nF is best for insertion, but not necessarily for retrieval That's where things like data marts and warehouses come in

[17:08] {Evan Delay} Views are a great way of making the data appear to be denormalized

[17:08] {CindyWinegarden} Right. If it's a snapshot of the data anyways, you can denormalize to make the queries faster

[17:08] {Nancy} Evan-Yeah, that's exactly what we do for reporting, eh?

[17:09] {PaulHemans} Doesn't it take time to make the view every time you choose to use it?

[17:09] {Nancy} Paul-yes.

[17:10] {Nancy} Paul-but you can control how much info you pull into the view at one time, if you are dealing with large data sets.

[17:10] {RoiLedford} Is that true? The query has to use the normalized data to load. So it's not faster.

[17:10] {Nancy} If the data sets are medium to small, then VFP, of course, excels at that.

[17:11] {PaulHemans} If it were larger you might use nightly consolidation processes or trickle feeds?

[17:11] {CraigBerntson} Paul: If you need to speed up reporting, then you can pipe the data from the 3nF data to something that is not normalized

[17:11] {CraigBerntson} that's what a data mart or data warehouse is

[17:11] {CindyWinegarden} But it doesn't have to join the tables.

[17:11] {Nancy} Data Mart? Is that just another name for Data Warehouse? Or is it different?

[17:12] {CraigBerntson} Cindy: That's right...it *could* go into a single table

[17:12] {CraigBerntson} Nancy: A warehouse is generally enterprise wide, the data mart is for a department or division

[17:12] {CraigBerntson} so, it's the same thing, but a smaller scale

[17:12] {CarlKarsten} I would like to point out that disk IO is much slowwer than CPU stuff, so I am leery that denormalized data can be pulled quicker from a disk than constructed in memory from a smaller amount pulled from disk

[17:13] {Nancy} Carl-That's an interesting observation.

[17:13] {CraigBerntson} Carl: You have to get it from disk to memory somehow in the first place

[17:14] {CarlKarsten} but get the company name once, then it will be in cached in ram

[17:14] {CindyWinegarden} But what about denormalized data from an SQL server?

[17:14] {CraigBerntson} So, the question would be, 'is it faster to move the data from 3nF to memory and rearrange it, or should it be stored non-normalized in the first place?'

[17:15] {Nancy} My opinion is to permanently denormalize, if access is an issue, when data is fixed and doesn't need to be changed.

[17:15] {CarlKarsten} the sql server has to get it from disk. it either gets the company name once and passes it back with each item, or gets it from disk for each item.

[17:16] {CindyWinegarden} I think a lot of denormalizing depends on the data and who'se using it from the warehouse

[17:16] {RoiLedford} The goal should be to Normalize first. Review. Then Denormalize only when absolutely necessary.

[17:16] {CraigBerntson} Cindy: And the speed they need to get to it

[17:16] {CraigBerntson} Roi: I agree

[17:16] {DaveJohnson} When is it the right time to Normalize/Denormalize? and what form and how far should you take it?

[17:16] {Carl} what constitutes "absolutely necessary"?

[17:17] {DaveJohnson} Heheh not to general of a question huh?

[17:17] {CraigBerntson} Dave: It think the answer is, it depends

[17:17] {Carl} Craig- where is the support for speed?

[17:17] {Nancy} Definitely, check out the data warehousing and normalization and denormalization topics on the wiki.

[17:17] {RoiLedford} You should only denormalize when you KNOW there is going to be a performance problem. And I think you only going to have those problems with HUGE tables, right?

[17:17] {CindyWinegarden} My question about SQL server was to compare speeds on the server for putting data together, not the local machine

[17:17] {Evan Delay} Normalize as much as you can until you have to denormalize for speed. Dave

[17:18] {DaveJohnson} ok.. some intresting things to take into consideration there =)

[17:18] {CraigBerntson} Carl: If you're looking a a three year sales trend, it might be faster to pull data that was rolled up by month rather than sum all the data

[17:19] {Carl} I would call that summarize, not denormilize.

[17:20] {CraigBerntson} Carl: How about a situation where you have multiple locations, each with their own data and then bring the stuff into the corporate office

[17:20] {RoiLedford} Do you think there will be much on the test about Data warehousing?

[17:20] {CraigBerntson} Roi: No.

[17:20] {Evan Delay} Okay.

[17:21] {Carl} Craig- explain further. I don't see the relevance.

[17:24] {Nancy} Carl- I really think it's a matter of "it depends."

[17:24] {CraigBerntson} Carl: They would still need to store info on a sales location, but the CEO would want things reported at his level much more quickly

[17:25] {Nancy} Rick (I wish he was still here) did the example of zipcodes for business rules, right?

[17:25] {Nancy} He asked me to extend his example to use remote data.

[17:25] {Nancy} So, I have a zip file for download. www.pixeldustindustries.com/public/myntier.zip

[17:26] {Nancy} It's fun cuz you can click a button on the form and switch between using fox and Access data. But you'll have to set up an ODBC data source.

[17:26] {CindyWinegarden} Cool

[17:26] {Nancy} I included a readme file.

[17:28] {Nancy} Anyhow. I subclassed the business class into local and remote classes.

[17:28] {CraigBerntson} I was doing some training on Mon & Tues. The people I was training asked about switching between local & remote data on the fly...I tell them to get the file too

[17:29] {Nancy} Craig...oh, well, we might want to crunch on it a bit before it goes public {s}

[17:29] {Nancy} Anyway, the business rules accept different zipcodes depending on which data source you are using.

[17:29] {RoiLedford} Views are easy. Just flip the OpenView? in the De.

[17:29] {CraigBerntson} Roi: Yeah..that's what I showed them

[17:29] {Nancy} What is missing in this example is a solid data tier classlib.

[17:30] {RoiLedford} Cool. I got something right.

[17:30] {Nancy} Roi-the DE isn't used in this case. And the controls are unbound.

[17:30] {CraigBerntson} That's an important thing to miss

[17:31] {DaveJohnson} Nancy, why didn't you bind your controls?

[17:32] {Nancy} Ricks original didn't do any kind of display so his controls weren't bound...

[17:33] {CraigBerntson} Nancy: are you going to write middle tier biz rules for this thing?

[17:33] {Nancy} When I extended the example, I thought I'd refresh the controls in the refresh() of each. It's a diff. way of dev. than I usually use.

[17:34] {DaveJohnson} thats intresting though.. ais there a speed tradeoff there?

[17:34] {Nancy} Unbound controls will be more uncommon I think in n-tier design.

[17:34] {DaveJohnson} ok

[17:35] {Nancy} Dave-I didn't measure it. What it gives is flexibility in how you assign data to the control...

[17:35] {Nancy} Personally, I've always like bound controls, and have kind of a hard time seeing why i wouldn't want them.

[17:35] {Nancy} So, this was a way for me to just try it out.

[17:36] {CraigBerntson} Nancy: So, rather than bind the control to a view at design time, you are thinking of doing it at run time based on the data source?

[17:36] {Carl} can't controls be bound to the props of a middle tier?

[17:37] {Nancy} In fact, this ex. is pretty rough, but I'd use a data object.

[17:37] {CraigBerntson} Carl: They shouldn't be

[17:37] {Nancy} And bind the controls to the object.

[17:37] {Evan Delay} Craig, why not?

[17:37] {Nancy} Erp. Actually, they could be bound to a dataobject, that would have been returned by the data layer...

[17:38] {Nancy} via a request by the business layer.

[17:38] {CraigBerntson} If the middle-tier is running in say, MTS, the connection is supposed to be stateless. That can't happen of you bind to the object's properties

[17:38] {Nancy} Craig: what if you are returned a data object?

[17:39] {CraigBerntson} Nancy: That would work. Something like ADO for example, or a custom object

[17:39] {Evan Delay} Craig. I still don't see why binding the controls would make it not stateless

[17:39] {Nancy} DAMN I'VE GOT A LOT TO LEARN! {okay, done freaking out now}

[17:39] {RoiLedford} I thought the idea behind the biz-object was to query it, retrieve the data, and build your own cursor.

[17:39] {Carl} I am loosing my grip on the topic, do you bind the control to anything?

[17:40] {Nancy} Carl-in the zipcode example? No. Using n-tier? You don't have to. Lot's of people don't.

[17:40] {Nancy} I *think* Booth's recommendation is to not.

[17:40] {CraigBerntson} Evan: If the biz/data object is running in MTS you can't be stateless AND bind directly to it...In fact, in MTS you're not even supposed to directly access the properties of your object

[17:41] {Evan Delay} Craig. Crap... this is new and bewildering to me. How do you access the object then?

[17:41] {RoiLedford} Good point Craig. You not supposed to any object modify another objects properties right.

[17:41] {CraigBerntson} But as Nancy said, you could return a data object (ADO for example) and bind to that

[17:41] * Nancy impressed by this segue into MTS

[17:41] {CraigBerntson} Evan: Through methods

[17:41] {CraigBerntson} Roi: That's correct

[17:42] {Evan Delay} Craig. Ahhh okay.

[17:42] {Nancy} Hm. Sounds like as an exercise, I should extend zipcodes to use MTS? ADO?

[17:42] {Evan Delay} Where can I read more on this?

[17:42] {Nancy} Craig-is that a stupid idea?

[17:42] {Nancy} Evan-JVP's book.

[17:43] {CraigBerntson} Evan: Look at the MTS Whitepaper on the MS VFP site

[17:43] {CraigBerntson} Nancy: An excellent idea

[17:43] {CraigBerntson} However, using MTS from the UI is just like using any object...since the UI knows nothing about MTS even existing

[17:44] {RoiLedford} So what does "- Write code that processes data entered on a form" really mean?

[17:44] {CraigBerntson} Evan: Also, www.microsoft.com/com

[17:44] {Nancy} Evan, et al: JCF started this topic:
SettingUpMTS

[17:44] {Nancy} Very nicely done IMO.

[17:45] {Nancy} Well, I *think* it was JFC.

[17:45] {RoiLedford} Is it just moving the data between the UI and the middle tier?

[17:45] {Nancy} BTW, Evan's topic on COM is really nicely formatted. Clear and professional looking. I'm gonna try emulate it.

[17:45] {CraigBerntson} Roi: It could mean doing anything to the data

[17:46] {Nancy} Roi-actually, the ui and middle tier don't move data at all, do they?

[17:46] {RoiLedford} The data the user enters has to move to the middle tier, and then the actual database.

[17:47] {Nancy} Roi-right. I see what you mean.

[17:47] {Carl} I think the midle tier passes data back and forth

[17:47] {Nancy} Well, the UI sends a message to the middle tier that the user wants to change a name to XYZ...

[17:47] {CraigBerntson} Carl: And manilupates/validates it

[17:47] {Carl} but this is could be splitting hairs. any idea what the MS posision (therefore exam answer) is?

[17:47] {Nancy} then the middle tier checks it's rules to see if it's okay according to business...

[17:48] {Nancy} ...Then sends the MESSAGE on to the data tier, which says okay I can do that or not.

[17:48] {CindyWinegarden} Right Carl, what does MS want here for an answer?

[17:48] {PaulHemans} sounds kind of slow (?) and complicated for rollback

[17:49] {Evan Delay} Paul that is the trade off.

[17:49] {RoiLedford} Nancy: thats how I understood it.

[17:49] {CraigBerntson} Paul: n-tier is slower than our 1-tier fox apps, but adds advantages in other areas

[17:49] {Carl} or do the first round of answers define what "correct" is?

[17:49] {RoiLedford} scalability / extensability

[17:49] {CraigBerntson} Nancy: I'm not so sure...the middle tier would just send the acutal changed data, not a message to change it

[17:50] {CetinBasoz} Interestingly it wasn't slow :) From a human perspective not fox :)

[17:51] {Nancy} Probably trivial point, but until a table update occurs, the buffered data is really just a message.

[17:51] {CraigBerntson} Nancy: I agree...just didn't want to confuse people

[17:52] {Nancy} Craig-Yeah you're right. It was misleading.

[17:52] {CraigBerntson} well, I was confused...but I often am

[17:52] {Nancy} Paul- As Cetin said, it actually can be very fast.

[17:52] {Nancy} But, n-tier developement does have an impact, both in complexity of deleveopement and in speed.

[17:53] {RoiLedford} I think that will be part of the test. We will need to evalute which option (1-tier, 2-tier, n-tier) for a given situation.

[17:54] {RoiLedford} based on performance, security, scalability, blah blah blah.

[17:54] {Evan Delay} Roi, I think that MS usually wants us to say n-tier.

[17:54] {Nancy} Roi-FWIW if you use a framework, like VFE (which I don't, btw), then you might be able to have both worlds.

[17:54] {CraigBerntson} Roi: That is definately the type of thing that will be on the test

[17:54] {Nancy} Well, for this exam? YEAH! Absolutely! IT'S THE DISTRIBUTED EXAM! :-)

[17:54] {Nancy} Do we need to talk more about MTS?

[17:55] {CetinBasoz} Roi, I don't believe that could a distinct number for tier...I would vote for n-tier

[17:55] {CraigBerntson} I've taken other MS exams and that is exactly the type of thing they ask about

[17:55] {CraigBerntson} Nancy: I think we've covered MTS for now...but it's something we'll need to come back to

[17:55] {CetinBasoz} So do we agree on n-tier ?

[17:56] {CraigBerntson} RoiLedford}? I think that will be part of the test. We will need to evalute which option (1-tier, 2-tier, n-tier) for a given situation.

[17:56] {Nancy} Craig- I need to do a lot of work on MTS.

[17:56] {Carl} I consider an app to be n-tiered if the different roles are well defined, even if it is all rolled up in one package (exe). again, I wonder what the party line is.

[17:56] {RoiLedford} Nancy: Did you dl the case study example question?

[17:56] {CraigBerntson} Nancy: Feel free to give me a call if you need too...I've done some stuff with it and read even more

[17:57] {Nancy} Craig, I think I'll try to make the zip code example into using MTS...if that makes any sense at all?

[17:57] {Nancy} Roi-Did you take the test?

[17:57] {CraigBerntson} Carl: Depends on logical vs. physical

[17:57] {RoiLedford} Yes. It's H A R D.

[17:57] {CraigBerntson} Nancy: Good idea

[17:57] {Nancy} Carl-Yeah, layers don't need to be split out into separate exe's necessarily.

[17:58] {CindyWinegarden} Roi, which test?

[17:58] {RoiLedford} You are given info about a client that needs work. Then asked question about how to set up the application.

[17:58] {Nancy} Roi-that's similar to how the practice exam was for VB.

[18:01] {Nancy} Oh, can I ask us to start with MTS next session? I think it's gonna be important for the exam.

[18:01] {Evan Delay} MTS sounds good for next time.

[18:02] {Nancy} We've never done: Establish the environment for source-code version control.

[18:02] {DaveJohnson} anyone here use VSS?

[18:02] {RoiLedford} nada.

[18:02] {CraigBerntson} While I'm thinking about it...someone said last time I was here to get a VB exam study guide...I've been following threads in the MCSD newsgroups and it seems the MS guide is crap and the New Riders guide is the best

[18:02] {Nancy} Not, I.

[18:02] {Evan Delay} Never used it.

[18:03] {DavidStevenson} Planning to start soon, to get the experience, and also the benefits.

[18:03] {Carl} used VSS before. not currenty (not working on a project that warents it) (yet)

[18:03] {Nancy} Craig. Good info. Amazon?

[18:03] {Evan Delay} Craig. I saw some of your posts.

[18:03] {RoiLedford} Craig: Heard the same thing on amazon.com

[18:03] {Nancy} What I'm interested in, too, is that you can set up VSS for use across the internet.

[18:03] {CraigBerntson} I tried to use VSS, but wasn't very successful...I can tell you that there are some KB articles on VFP/VSS integration that are VERY important

[18:04] {DaveJohnson} ok Carl, what do you have to say about setting up VSS?

[18:04] {Carl} Not much to it. click on the VSS box as part of VS install

[18:04] {Evan Delay} Establish the environment for source-code version control. [MichaelGEmmons]

[18:05] {Evan Delay} You can see all the assignments at
Exam70-155StudyGroup

[18:05] {Carl} it integrated into the project manager as advertised.

[18:06] {Carl} I spent a bit of time looking for exam related "control on form" things, and couldn't find anything. So I cooked up a beginners guide to putting some controls on a form.

[18:07] {Carl} Then i showed a friend what it was like to subclass something, and he agreed with the "mud hut" anlogy.

[18:07] {Nancy} Yeah, that's right! I was gonna flame you cuz I live in an adobe house! ROFL.

[18:07] {Carl} anyone know how to programmaticaly add a
value_assign method?

[18:08] {CraigBerntson} Carl: PROCEDURE Value_Assign?

[18:08] {JCrescencioFlores} hey hey!

[18:08] {Nancy} It's in the Creating User Services section.

[18:09] {Carl} Craig: thas fine for a new class, but what about adding to an existing object, like a form?

[18:09] {CraigBerntson} Carl: That's a good question...how do you add a method at runtime?

[18:09] {CindyWinegarden} Cetin, not sure what you're asking. CarlKarsten posted his notes on forms on the Wiki

[18:09] {Nancy} Carl-you have to create a subclass of the control before adding it to the form.

[18:10] {CraigBerntson} but, you want AddMethod?()

[18:11] {Nancy} No addmethod(). Though perhaps in 7.0 since they'll have a runtime compile.

[18:11] {CraigBerntson} Nancy: We have have a runtime compile now, with SP3...but and AddMethod?() method would be great

[18:11] {Nancy} Carl-did you get an answer to your question?

[18:13] {CetinBasoz} vcx are tables and could be compiled now...

[18:13] {DavidStevenson} So runtime compile can compile classes as well as prg's?

[18:13] {CraigBerntson} Cetin: I see what you're saying....hack the VCX

[18:14] {Nancy} Cetin-Yeah, you are right.

[18:14] {Carl} Ill buy that. but I sure don't like it.

[18:14] {CraigBerntson} The draw back is that you'd need to distribute the VCX for existing class to work

[18:15] {Carl} I can't think of why you would want to, unless you were using VB

[18:15] {DavidStevenson} Carl: Do you have a specific need for turning an assign method on or off?

[18:15] {CetinBasoz} No actually. Since it's burried in exe I could write it to disk.

[18:15] {Carl} I was going to do an assign method in my example, but I wanted to be able to have a programatic counter part, so I dropped it.

[18:15] {CraigBerntson} Cetin: Now it's getting really messy...you'd need to hack the EXE too

[18:16] {CetinBasoz} But honestly didn't try with vcxes yet

[18:16] {CetinBasoz} Craig.. I didn't do it with vcx but dbf in the past...

[18:16] {Nancy} Carl-why did you have to drop the assign?

[18:16] {CetinBasoz} include in project.. so readonly...

[18:17] {CetinBasoz} use it and copy to fiel...

[18:17] {Carl} I realized afterwards that I should have used farm animals and stomachs. then it could calc total stomachs.

[18:17] {Carl} Nancy, because I couldn't do it in code.

[18:17] {DavidStevenson} Denis: In a VERY abstract kind of way!

[18:19] {Evan Delay} Next topic is Create a ToolBar. [CindyWinegarden]

[18:19] {CindyWinegarden} Here's my ToolBar notes:
ToolBar

[18:20] {CindyWinegarden} I think the most important thing is when do you want a toolbar instead of a menu.

[18:20] {Nancy} Cindy, and what's the verdict?

[18:20] {CindyWinegarden} We all sort of "know" this, but it's not well defined

[18:21] {Carl} any advice on moving the seperators around on toolbars?

[18:21] {CindyWinegarden} Well, MS uses menus for more permanent and less customizable stuff...

[18:21] {CraigBerntson} Cindy: You never want to use a toolbar instead of a menu

[18:21] {CindyWinegarden} and toolbars for special tasks and allows the user to customize

[18:22] {CindyWinegarden} Right Craig, but with a menu the user has to hunt for stuff

[18:22] {Nancy} I think menus are evolving into toolbars, frankly.

[18:22] {Evan Delay} One interesting note about toolbars is that that don't receive focus

[18:22] {CetinBasoz} Craig I did. One app with only toolbar :)

[18:22] {CindyWinegarden} So I guess it's when to ADD a toolbar to supplement the menu

[18:23] {CraigBerntson} Cetin: That breaks Windows standards...therefor a no-no

[18:23] {Nancy} But basically Menus expand with dropdowns. so one menu item might group a bunch of tasks...

[18:23] {CindyWinegarden} Another thing, can you put hot keys on a toolbar?

[18:23] {CindyWinegarden} I guess I could try it....

[18:23] {Nancy} But each tool bar control does pretty much on action.

[18:23] {CraigBerntson} Cindy: how about adding a toolbar to you main application...no forms up yet

[18:23] {CraigBerntson} and also to a top-level form

[18:24] {CetinBasoz} Yes you could hotkey toolbars...

[18:24] {Nancy} Evan-right about focus. Cindy, that might be an important point to add to the wiki topic.

[18:24] {CetinBasoz} menus need not be seen...

[18:24] {CindyWinegarden} So a toolbar showing before the main form kinda leaves the user wondering what to do!

[18:24] {RoiLedford} Did I see something about timers not firing on toolbars?

[18:24] {CraigBerntson} Cetin: How do you visually let the user know what the hotkeys are?

[18:25] {DenisChasse} What about treeviews for menu ?

[18:25] {CetinBasoz} Craig. I can use text on commandbuttons + picture

[18:25] {CindyWinegarden} You can put big buttons with words on a toolbar, not just little square picture buttons

[18:25] {Nancy} Carl-Re: spacers. What I've found to be more effective is create a container with the controls positioned the way I want them, then add that to the toolbar.

[18:25] {CraigBerntson} Cindy: I use _SCREEN as my main form...and have a toolbar on it...no forms visible

[18:25] {Nancy} Denis-You mean make a treeview toolbar control?

[18:26] {Carl} Nancy: got it

[18:26] {CraigBerntson} You should mention something about how to do that

[18:26] {DenisChasse} Yes

[18:26] {Nancy} I did that actually, for an appl.

[18:26] {CindyWinegarden} Do the users like it Craig? Personally, I don't like menus for users.

[18:26] {CraigBerntson} Cetin: Ok..that works

[18:26] {CraigBerntson} Cindy: Yes...no complaints

[18:26] {Nancy} Denis-though it used the outline control instead. Same idea.

[18:26] {Nancy} Since I have to do ole controls, I could use that for an example.

[18:26] {Nancy} Does that interest you?

[18:26] {DenisChasse} Nancy: Is it hard to do. How do you do that. Is there a sample available somewhere to do that ?

[18:27] {RoiLedford} Gotta have a menu. I use em all the time. Don't really like toolbars in certian cases.

[18:27] {JCrescencioFlores} Cindy: shouldn't the user have a say on that?

[18:27] {CindyWinegarden} One thing I like about toolbars is letting them be repositioned. Less distance to push the mouse

[18:27] {Nancy} Menus are important though, and I don't think you can do w/o both.

[18:27] {RoiLedford} Craig: Do you think there will be much about UI design on the exam?

[18:27] {CraigBerntson} Cindy: I use both menus and toolbars...go to word and close all documents...that's what my apps look like with no forms open

[18:27] {CindyWinegarden} JCF, my users are ***very*** unsophisticated.

[18:28] {DenisChasse} You have to do both. But let the user flush the tollbars if he wants to

[18:28] {JCrescencioFlores} Some win3.1-stuck users always ask for menus and hotkeys.

[18:28] {CraigBerntson} Roi: If there is, it will just be general stuff

[18:28] {Nancy} Toolbars hit screen real estate hard. Much harder than menus.

[18:29] {Nancy} Cindy-did you catch the point about how tool bars don't receive focus?

[18:29] {CraigBerntson} I have a "View Toolbars" option on the menu so users can turn them on and off if they want

[18:29] {Evan Delay} Nancy, I put that on the wiki topic.

[18:29] {Nancy} Cool. Everybody understand where that is important? It might be on the exam.

[18:30] {RoiLedford} Yes.

[18:30] {CindyWinegarden} I saw that about not receiving focus, but don't know what that involves

[18:30] {DavidStevenson} In Drew Speedie's framework, he has a form property, something like cLinkedToolbar, containing the toolbar to instantiate and show. When another form is opened that needs the same toolbar, it uses the same instance, or hids it if it needs its own. Maybe he does all of this in the oFormManager class. Interesting implementation.

[18:30] {CindyWinegarden} So you can't have "when" code?

[18:31] {Evan Delay} Lostfocus code won't fire on your controls.

[18:31] {Nancy} Cindy, the impact is on an edit that's been made in a control. If the user clicks on a save button in a toolbar before leaving the control, the lostfocus, and valid never fire.

[18:31] {Nancy} Evan-fine say in 7 words what I can't even say in a paragraph! :)))

[18:31] {CraigBerntson} Another important thing is the interaction between toolbars and forms...you can't use "ThisForm"

[18:31] {CindyWinegarden} So the save button needs to be on the form?

[18:31] {Nancy} Cindy, no.

[18:32] {Nancy} You just have force the form's activecontrol's lostfocus to fire.

[18:32] {RoiLedford} Craig: So what do you do? _screen.activeform?

[18:32] {Evan Delay} Cindy, that is one way to solve the problem. The other is to force the current control's lostfocus to fire.

[18:32] {CraigBerntson} Roi: That's what I do

[18:32] {RoiLedford} cool.

[18:32] {CetinBasoz} But you setfocus() to a form object which lets lostfocus to fire. Isn't it ?

[18:33] {Evan Delay} Someone posted some code on the UT. It basicially sets the focus to the control with focus which allows the valid and lostfocus to fire.

[18:33] {Nancy} Or you can simply use the _SCREEN.FORMS(1) object. Apparently the last accessed or current form is the first form in the collection

[18:33] {CindyWinegarden} I haven't made a toolbar in an app. All I can think of is for choices for printing reports.

[18:33] {RoiLedford} Evan: Wait. The toolbar doesn't get focus. That also causes it's contained object to not get focus?

[18:33] {CraigBerntson} Cindy: Look at Word...Cut, Copy, Paste...etc

[18:33] {Nancy} Cool. Tool bars usually duplicate some menu functions. The most common ones usually.

[18:34] {Evan Delay} Roi, on the form.

[18:34] {CarlK} Nancy, that sounds like unreliable behavior

[18:34] {CindyWinegarden} Who uses a toolbar for cut/paste when there's kb commands?

[18:34] {Nancy} Carl?

[18:34] {RoiLedford} I do.

[18:34] {CarlK} "Apparently the last accessed or current form is the first form in the collection"

[18:34] {Nancy} Some people do. Think of word,

[18:34] {CraigBerntson} Cindy: Most users typically use the toolbars

[18:34] {Nancy} Carl-Oh.

[18:35] {Nancy} Um, kinda nice actually, I think. Activeform can be problematic. I never use it.

[18:35] {CindyWinegarden} I guess I'm around right-mouse people too much

[18:35] {CetinBasoz} Yes. Last accessed form is on the top of stack

[18:35] {CraigBerntson} I've even seen users move the mouse
to Edit} Copy when the button is right there on the toolbar

[18:35] {Nancy} That's awesome. So then you can use the order of forms in forms collection to see what order the user has done stuff

[18:35] {Nancy} !

[18:35] {RoiLedford} Evan: If a combo is in a toolbar, you can't set focus to the combo?

[18:36] {Nancy} Roi-Yes, you can.

[18:36] {CetinBasoz} Yes regular users use toolbar...

[18:36] {CetinBasoz} Programmers Ctrl...

[18:36] {RoiLedford} ok.

[18:36] {RoiLedford} I use everything depending on my mood.

[18:36] {Nancy} Somethings I use the toolbar for, some the menus. I use KB controls less and less.

[18:36] {Nancy} Roi-I agree.

[18:37] {CarlK} A toolbar can get focus only if it contains a control that allows text input (text box, edit box, spinner, or combo box). -- Hackfox

[18:37] {Evan Delay} Ahhh.... thanks Carl.

[18:37] {Nancy} Carl-Thanks for the reference!

[18:37] {CetinBasoz} Not truely Nancy. If user walks around forms yes...

[18:37] {CetinBasoz} Otherwise they're in order you invoke them reversely.

[18:38] {CindyWinegarden} Carl, if you don't I will.

[18:38] {Evan Delay} Are we finished with toolbars?

[18:38] {RoiLedford} The goal of a good UI design is to provide the user with ways to do things. There are standards that users are used to. We can't change that, and should provide all of those features.

[18:38] {CetinBasoz} Not quite. I have a question...

[18:38] {CraigBerntson} Roi: I agree

[18:38] {Nancy} Cetin-so if formA is active and I click on FormB?, forms(2) points to formA, and forms(1) now points to formB?

[18:39] {Evan Delay} Roi, good point.

[18:39] {RoiLedford} Thanks.

[18:39] {CarlK} posted.

[18:39] {CetinBasoz} How would you invoke "report controls" toolbar if it's not there ?

[18:39] {CetinBasoz} Yes Nancy.

[18:39] {CraigBerntson} I need to check out that Forms() collection stuff...could simplfy my MRU

[18:39] {Nancy} Do you mean the native report's toolbar?

[18:39] {RoiLedford} The form collection isn't meant for that. It's more of a way to access all the forms with no knowledge of what's there.

[18:40] {CetinBasoz} Yes. Native toolbar. Report preview

[18:40] {Nancy} Cetin-I'm know I read references about that all the time...let me search my memory, okay?

[18:40] {CetinBasoz} Craig . MRU ?

[18:40] {CindyWinegarden} You can make the native report toolbar show by saving the form with it showing and using the resource file

[18:41] {CraigBerntson} Cetin: Most Recently Used .. like how Word puts the most recently used documents on the FIle menu...I do that with forms in my framework

[18:41] {Evan Delay} Craig that is cool

[18:41] {CetinBasoz} Yes. Cindy saving resource file is true. Another native way I'm seeking.

[18:42] {RoiLedford} Craig: You do that through the forms collection?

[18:42] {Nancy} Craig-Cool>!

[18:42] {CetinBasoz} I see. We were more crazy to hold ...

[18:42] {CraigBerntson} Evan: It was a real pain in the a** to get working...I'm working on an article about it

[18:42] {CetinBasoz} users last record and field :)

[18:42] {CraigBerntson} Roi: Not currently..but if I can, it would simplify it

[18:43] {RoiLedford} It may not be a good idea. I don't think we can depend on the array order reflecting the correct order all the time.

[18:43] {Evan Delay} Craig. When you post that article. Upgrade the RAM and CPU on your webserver.

[18:43] {DavidStevenson} Speaking of Forms Collection, do toolbars show up along with forms?

[18:43] {RoiLedford} No.

[18:43] {CraigBerntson} Roi: That's why I'm going to test, test, test...and talk to Calvin or someone on the fox team

[18:43] {CindyWinegarden} There's a lot of use for letting a user "pick up where they left off"

[18:44] {CindyWinegarden} ToolBars? can be put into FormSets? with forms.

[18:44] {RoiLedford} David: To clarify, the toolbars are not in the forms collection. Only forms.

[18:44] {CetinBasoz} With or w/o forms.

[18:44] {CraigBerntson} Evan: I'm going to try to get in published in FPA, but I haven't talked to Tamar about it yet. I talked to Ted Roche at DevCon and he was definately interested in seeing it

[18:44] {CarlK} anyone thing that the order that events fire will be tested? like "Undock fires before BeforeDock?" if so, is it documented anywhere?

[18:45] {Nancy} Cetin- I found this ref. in the msdn: System Toolbar (VFP Foundation Class)

[18:45] {Nancy} I don't know if it helps, but maybe?

[18:45] {DenisChasse} Craig: Publishing it in FPA would be very nice

[18:45] {CraigBerntson} Carl: Ther "could" be some of that...it's in VFP help under Events

[18:46] {DavidStevenson} I haven't tested it yet, but in Hacker's guide they loop thru the Forms Collection and call each form's QueryUnload if baseclass is Form. Their comment says that check is to skip over toolbars. Thus my question.

[18:46] {CraigBerntson} Denis: It will definately go on my website too

[18:47] {RoiLedford} David: AFAIK the form collection only contains forms, Like pageframe.page only contains pages.

[18:48] {CetinBasoz} Yes form collection only has forms...What's wrong with it ? It could ...

[18:49] {CetinBasoz} let you collect all PEM down to deepest object on form.

[18:50] {CetinBasoz} BTW does anyone need a collector class for her/his design/runtime ?

[18:50] {DavidStevenson} Toolbars ARE included in the Forms collection if they are in a formset, according to HackersGuide.

[18:51] {JohnPChambers} CetinBasoz What time and day is it where you are now?

[18:51] {DavidStevenson} Also HackersGuide says "custom toolsbars that are displayed get included in _SCREEN's Forms collection."

[18:52] {DavidStevenson} Roi: Better test it before adding to the wiki.

[18:55] {MikeHelland} Here's a file for shortcut menus, take a look, I gotta go real soon: MHMenu.zip

[18:55] {MikeHelland} Its just a textbox class, add it to a form and run it.

[18:55] {Nancy} Mike, why don't you link that URL up to your topic on the wiki.

[18:56] {MikeHelland} For more info check out Doug Hennig's FoxTalk article from April 99 I think.

[18:58] {JCrescencioFlores} Sorry. Here's the wiki link: SettingUpMTS

[18:59] {Evan Delay} 5pm Universal Thread time on Sunday?

Session Close: Fri Oct 08 19:04:20 1999


Contributor: CindyWinegarden

See also: Exam70-155StudyGroupSummaries

CategoryExam70-155StudyGroup
( Topic last updated: 1999.11.14 12:01:07 AM )