Hello! I have a question: How to improve refreshing speed?
Problem is as follows: I refresh labels and textfields very offen in table views. The refreshing consists of changing mainly background, but also foreground, fontsize etc. The way I am doing it is using $object->Change( @parameters ) function which is encapsulated in my Refresh(...) function (this function is copied later on). As you can see the Change method is the main part of the Refresh function. Because there is many such refreshings the user fills some slowness. Is it possible in a relatively simple way to replace this Change function with some other which would be closer (and therefore faster) to Windows system graphics? Waldemar ============================== sub Refresh { my ( $screen, $object, $type ) = ( shift, shift, shift ); $object = '' unless $object; return unless $screen->{$object}; my %parameter; my @attributes = (); my @attributes_2; my ( $par, $val ); my %new_font = Win32::GUI::Font::Info($screen->{$object}->GetFont()); my $change_value = 0; my $value = ''; my $change_visible = 0; my $visible = 0; my $change_readonly = 0; my $readonly = 0; my $change_font = 0; while ( $par = shift ) { $val = shift; #print "par/value = $par / $value\n"; if ( $par eq '-visible' ) { $change_visible = 1; $visible = $val; $visible = 0 unless $visible; } elsif ( $par eq '-readonly' ) { $change_readonly = 1; $readonly = 1 if $val; $readonly = 0 unless $readonly; } elsif ( $par eq '-background' ) { push @attributes, ( -background=>$val ); # push @attributes_2, ( -background=>$val ); } elsif ( $par eq '-text' ) { $change_value = 1; $value = $val; $value = '' unless defined $value; } else { push @attributes, ( $par=>$val ); } if ( $par =~ /-fontsize|-fontweight/ ) { $val = 0 unless $val; $val += 0; if ( $par eq '-fontsize' && $val != $new_font{-height} ) { $change_font = 1; $new_font{-height} = $val; } elsif ( $par eq '-fontweight' && $val != $new_font{-weight} ) { $change_font = 1; $new_font{-weight} = $val; } } elsif ( $par =~ /-fontname/ && $val ne $new_font{-name} ) { $change_font = 1; $new_font{-name} = $val; } } if ( $change_font ) { $screen->{$object.'font'} = Win32::GUI::Font->new( -name => $new_font{-name}, -size => $new_font{-height}, -weight=> $new_font{-weight}, ); push @attributes, ( -font=>$screen->{$object.'font'} ); } if ( $type =~ /checkbox|boolean/i ) { if ( $value ) { push @attributes, ( -background=>0xccffcc ) } elsif ( $value eq '0' ) { push @attributes, ( -background=>0xccccff ) } else { push @attributes, ( -background=>0xffffff ) } } elsif ( $type =~ /integer/i ) { my $val = $value; $val = 0 unless $val; $val =~ s/ //g; $val += 0; } elsif ( $type =~ /money/i ) { my $val = $value; $val = 0 unless $val; $val =~ s/ //g; $val += 0; if ( $val < 0 ) { push @attributes, ( -foreground=>0x0000aa ) } elsif ( $val > 0 ) { push @attributes, ( -foreground=>0x000000 ) } else { push @attributes, ( -foreground=>0x333333 ) } } if ( @attributes ) { #print "object = $object\n"; #print "attributes = @attributes\n"; $screen->{$object}->Hide() if $change_font; $screen->{$object}->Change(@attributes) if @attributes; $screen->{$object}->Show() if $change_font; } $screen->{$object.'_2'}->Change(-text=>'',@attributes_2) if @attributes_2 && $screen->{$object.'_2'} && $object=~/VAR|FILL/i; $screen->{$object.'_3'}->Change(-text=>'',@attributes_2) if @attributes_2 && $screen->{$object.'_3'} && $object=~/VAR|FILL/i; if ( $change_visible ) { $screen->{$object}->Show(1) if $visible; $screen->{$object.'_0'}->Show(1) if $visible && $screen- >{$object.'_0'}; $screen->{$object.'_1'}->Show(1) if $visible && $screen- >{$object.'_1'}; $screen->{$object.'_2'}->Show(1) if $visible && $screen- >{$object.'_2'}; $screen->{$object.'_3'}->Show(1) if $visible && $screen- >{$object.'_3'}; $screen->{$object}->Hide() if $visible == 0; $screen->{$object.'_0'}->Hide() if $visible == 0 && $screen- >{$object.'_0'}; $screen->{$object.'_1'}->Hide() if $visible == 0 && $screen- >{$object.'_1'}; $screen->{$object.'_2'}->Hide() if $visible == 0 && $screen- >{$object.'_2'}; $screen->{$object.'_3'}->Hide() if $visible == 0 && $screen- >{$object.'_3'}; } if ( $change_readonly ) { $screen->{$object}->ReadOnly( $readonly ); $screen->{$object.'_2'}->ReadOnly( $readonly ) if $screen- >{$object.'_2'} && $object =~ /VAR/;; $screen->{$object.'_3'}->ReadOnly( $readonly ) if $screen- >{$object.'_3'} && $object =~ /VAR/;; } if ( $change_value ) { if ( $type =~ /checkbox/i ) { $value = 1 if $value; $value = 0 unless $value; $screen->{$object}->SetCheck( $value ) } elsif ( $type =~ /datetime/i ) { $value =~ /(\d{2})-(\d{2})-(\d{4})/; $screen->{$object}->SetDate( $1, $2, $3 ); } else { if ( $type =~ /boolean/i ) { $value = 1 if $value; $value = 0 unless $value; } $value = '' unless defined $value; $screen->{$object}->Change( -text => $value ); } } } ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo _______________________________________________ Perl-Win32-GUI-Users mailing list Perl-Win32-GUI-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users http://perl-win32-gui.sourceforge.net/