Question

How to skip Formshow when I set a tForm Visible?

Asked by: Treppenmeister

I have a Form with several controls. Because of several reasons I am rearranging all the components on the form while the program is running. Unfortunately this has the effect, that the more controls I am changing and the slower the machine is the easier I can see the 'moving' and the form is flickering. So I want to do the changes in the background.
When I had similar problems with drawing into a drawbox I just used the Visible-property.

So I tried this also here

Form.Visible := false;
RearrangingMyControls;
Form.Visible := true;

unfortunately the last one is calling the FormShow, what I cannot need.
Now I could override the Visible property and set a variable SkipFormShow : boolean to control that. But then I have to write in every Form at the beginning of every FormShow procedure a line like

if  SkipFormShow then exit;

I have my own class tMyForm of tForm. But all what I tried, to control from there, whether to jump into the childs FormShow or not, failed.

What is the easiest way to have the logic in my basic class tMyForm?


This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2005-08-31 at 06:52:29ID21546253
Tags

formshow

Topic

Delphi Programming

Participating Experts
7
Points
500
Comments
10

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. TForm with different shapes.
    Is there a way to have a TForm with a different shape other than a rectangle, let's say a circle, triangle, etc?
  2. TForm and MDIChild question
    On my MDI app I have 2 forms with the same procedure called "MyProc" but with different lines of code inside then! Now, I want to be able to call this procedure from the main form but not using: Form1.Myproc; or Form2.MyProc; I need to call the procedure accordin...
  3. Rotate TForm
    Hi, In my application I need a TForm that rotates 90 degrees. Can somebody explain me how to rotate a TForm?
  4. drawing rectangles on form produces flicker
    hi everyone, suppose i want to draw rectangles on a form at runtime, like so: -form mousedown to capture initial mouse position X,Y -form mousemove to draw rectangles using Canvas.Rectangle. not a problem so far. but what if i draw a grid on the form using FormShow and agai...
  5. Puting image in TForm
    Hi, Is there any way to access TForm canvas "directly" ? I want to put some images in the form background. Yes, I know that I can use TImage, put it in the form and set to the filename. But that is not the case. What I am really want to do is, something like drawi...
  6. Enhancing TForm
    Hello, What is the easy way to "enhance" a TForm? I have certain things (method and variables) that need to be added into a form, for example setting its color, borderstyle, adding new procedure and function (procedure WMNCHitTest(var M: TWMNCHitTest); message wm_...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: mikelittlewoodPosted on 2005-08-31 at 07:07:35ID: 14793857

Should you not rearrange the components on the create of the form?

Are you just having problems with the form flickering? Would disabling the form and setting the doublebuffered property of the form the TRUE help?

 

by: kretzschmarPosted on 2005-08-31 at 07:10:44ID: 14793887

guessing, no delphi on hand yet,
you have assigned an onFormShow-event

you could deasssign this event, do your action and reassign again like

var
  m : TNotifyEvent, //not in mind yet, which is correct method-type
begin
  m := onFormShow;
  onFormShow := nil;
  try
    Visible := false;
    RearrangingMyControls;
    Visible := true;
  finally
    onFormShow := m;
  end;
end;

just as idea

meikl ;-)


 

by: RadikalQ3Posted on 2005-08-31 at 07:37:04ID: 14794205

Hi!

Instead of change the Visible property of the form, you can disable its redraw sending the mesage Wm_SetRedraw

An example:

procedure TForm1.Button2Click(Sender: TObject);
var
  n : integer;
begin
  //Disable redraw
  Form1.Perform(WM_SetRedraw,0,0);

  //Do some stuff with the components:
  for n:=0 to 50 do begin
    Button2.Left:=Button2.Left+6;
    Sleep(100);
  end;

  //Re-enable it
  Form1.Perform(WM_SetRedraw,1,0);
end;

 

by: MolandoPosted on 2005-08-31 at 08:04:07ID: 14794500

RadikalQ3's comment is great, never knew that.  

Not after points, but if you have a quick thing to change, sometimes just setting form1.doublebuffered to true works quite well.

 

by: charlesgates22Posted on 2005-08-31 at 08:13:28ID: 14794603

A couple of suggestions.  They are more complicated then just turning the visible property on or off but they work.  Both of them, if you do them right, should allow the form to appear unchanged until the final arrangement is ready.

1.  Since you mentioned that this is your own form class, create a flag that tells your form that it is rearranging or not.  Then override the Paint procedure of the form and if the rearranging flag is true don't allow the repainting and then once you are done rearranging call the refresh routine of the form so that if forces a repaint, otherwise just let the Paint procedure do its thing.

2. Whenever you need to rearrange items on a screen, have a panel or "Frame" that is not visible rearrange the components and then you can update the visible form with the new arrangement.

 

by: TreppenmeisterPosted on 2005-08-31 at 08:22:40ID: 14794689

@mikelittlewood:
I have to rearrange the controls after the create and an enabled + doblebuffering doesn't make it much better.

@kretzschmar:
This works fine (replace onFormShow with OnShow).

@radikalQ3:
The idea is great - but I have the problem that the form does not want to refresh totally.
An invalidate of the form does not help.
It seems so whether I have to go through all the controls of the form and invalidate them all separately. But this cannot be the solution. Certainly I am only too blind to see the easiest solution.

 

by: kretzschmarPosted on 2005-08-31 at 09:18:01ID: 14795231

>replace onFormShow with OnShow
errm, sorry, had no delphi on hand, was from head

 

by: DragonSlayerPosted on 2005-09-01 at 20:44:17ID: 14807486

You can also do a

LockWindowUpdate(HandleOfTheFormYouWantToFreezeTheDisplay);
RearrangeControls;
LockWindowUpdate(0);



DragonSlayer.

 

by: TreppenmeisterPosted on 2005-09-02 at 00:30:40ID: 14808212

@DragonSlayer :

this works too.

But the performance is much worse than the example of kretzschmar and even worse than just
RearrangeControls;

Since I resize also the Form it is for my case not useful.

 

by: cerdalPosted on 2005-09-12 at 08:33:57ID: 14864792

Could you possibly put all the controls in your form onto a client-aligned panel, and set the panel's visible to false before rearranging?

That way the form's events are not involved, and if you put a pretty picture (or a snapshot of the form before you rearrange it) on another panel behind the first one, it'll keep the user happy while he waits.

If you want to rearrange before the form is shown, have you tried the onLoaded event ?

Chris

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...