🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.lang.pascal.delphi.misc
Article #137

Strange NT problems with D1 and TImage.Canvas Methods PLEASE HELP!!

#137
From: Rob Wilson
Date: Thu, 05 Feb 1998 00:00
128 lines
5146 bytes
Hi,

Unfortunately I was not too sure which newsgroup would be best for
this problem, so I have cross-posted to many.

I appologise if I have 'over' posted.

I have been using Delphi 1 to ensure 16 bit windows compatibility and
have been developing in windows 95 environment with NO problems at
all.

Today I have moved to an NT workstation and copied my project over and
use Delphi 1 still as the target is still 16 bit.... BUT one of my
forms contiuously updates when it is run on an NT but NOT on 3.11 (and
not on WIN95 at home)....

I have a snippet of my code, which you can really ignore everything
except the area shown in ******'s.

The ListBox1 is used for debugging, and on Win3.11 just displays

"Form Update Number 1" and stops, ready for user input

On the NT, this is repeated non-stop and doesn't allow the user to
have any input.

When I remove the bit of code in the ****'s, it stops refreshing, but
its the heart of the draw operation..... Strangely enough, the listbox
says its been called twice..... Why?  Is this the start of my problem?

DOES ANYONE KNOW WHATS WRONG!!!???

Please help, any ideas would be appreciated.

Code follows:-


procedure TFormOverlay.FormPaint(Sender: TObject);
var
   colorloop : integer;
   gap : integer;
   x,y : integer;
   MaxOverlayX,MaxOverlayY : integer;
   StartX,StartY : integer;
begin
     inc(FormUpdateCount);
     ListBox1.ItemIndex:=ListBox1.Items.Add('Form update number
'+inttostr(FormUpdateCount));
     ListBox1.Refresh;

     {Is there a better time/place for this?}
     OverlayNumberOfColours:=NumberOfColours;

     {Do I need to copy palette from bitmap 1 ?}
     gap:=FormOverlay.ImageColorPalette.Width div NumberOfColours;

     ImageColorPalette.Canvas.Brush.Style:=BSSolid;
     for colorloop:=0 to NumberOfColours-1 do
     begin

ImageColorPalette.Canvas.Pen.Color:=ColourInfo[ColorLoop].ColourRef;

ImageColorPalette.Canvas.Brush.Color:=ColourInfo[ColorLoop].ColourRef;

          {

ImageColorPalette.Canvas.FillRect(rect(colorloop*gap,0,(colorloop*gap)+gap,imagecolorpalette.height));
          ImageOverlay.Refresh;

          {Palette information copied to overlay when drawing, to
ensure always
          up-to-date without calling a function}
          OverlayPalette[colorloop]:=ColourInfo[ColorLoop].ColourRef;
     end;

     MaxOverlayX:=ImageOverlay.Width  div (CurrentZoom.Progress*3);
     MaxOverlayY:=ImageOverlay.Height div (CurrentZoom.Progress*3);

     startx :=OverlayScrollBarX.Position;
     starty :=OverlayScrollBarY.Position;

     for y:=0 to MaxOverlayY do
     begin
          for x:=0 to MaxOverlayX do
          begin
               if (startx+x > formmain.image1.width) or (starty+y >
formmain.image1.height) then
               begin
                    {Debug.Items.Add('Image 1
width='+inttostr(image1.width)+height'}
               end
               else
               begin

ImageOverlay.Canvas.Pen.Color:=FormMain.Image1.Canvas.Pixels[startx+x,starty+y]
AND $00FFFFFF;

ImageOverlay.Canvas.Brush.Color:=FormMain.Image1.Canvas.Pixels[startx+x,starty+y]
AND $00FFFFFF;

                   {****************************}
                   {****************************}
                   {****************************}
                   {THIS BIT CAUSES DRAW EVENT TO HAPPEN
AGAIN,AGAIN,AGAIN!!!
                   BUT ONLY ON NT!!!?  NOT 3.11 DELPHI 1 ???
HEEEEELLLLPPPP!}

                   ImageOverlay.Canvas.Rectangle

(x*(CurrentZoom.Progress*3),y*(CurrentZoom.Progress*3),

(x+1)*(CurrentZoom.Progress*3),(y+1)*(CurrentZoom.Progress*3));

                   {****************************}
                   {****************************}
                   {****************************}


               end;
          end;
          if (y mod 5 = 0) then
          begin
               ImageOverlay.Refresh;
          end;
     end;
end;
Technical Details
Message-ID: <34d99764.164479739@linux.compd.com>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit
X-Google-Thread: fd817,4361e6fcbfe9a987,start
X-Google-Attributes: gidfd817,public
X-Google-Thread: fb0ea,4361e6fcbfe9a987,start
X-Google-Attributes: gidfb0ea,public
X-Google-Thread: 10baee,4361e6fcbfe9a987,start
X-Google-Attributes: gid10baee,public
X-Google-Thread: f973d,4361e6fcbfe9a987,start
X-Google-Attributes: gidf973d,public
X-Google-Thread: f973b,4361e6fcbfe9a987,start
X-Google-Attributes: gidf973b,public
X-Google-Thread: 10a296,4361e6fcbfe9a987,start
X-Google-Attributes: gid10a296,public
X-Google-Thread: 109d99,4361e6fcbfe9a987,start
X-Google-Attributes: gid109d99,public
From: rw@linux.compd.com (Rob Wilson)
Subject: Strange NT problems with D1 and TImage.Canvas Methods PLEASE HELP!!
Date: 1998/02/05
Message-ID: <34d99764.164479739@linux.compd.com>
X-Deja-AN: 322273676
X-NNTP-Posting-Host: linux.compd.com [193.195.210.97]
Newsgroups: comp.lang.pascal.delphi.misc,comp.lang.pascal.delphi.components.usage,comp.lang.pascal.delphi.components.misc,borland.public.delphi.vcl.components.using,borland.public.delphi.graphics,alt.lang.delphi,alt.comp.lang.borland-delphi