Results 1 to 11 of 11

Thread: Vreemd probleem

  1. #1

    Question Vreemd probleem

    Bij het uitvoeren van het stukje code hieronder wordt het lijnstuk dat ik probeer te tekenen met de procedure "Paintform" vreemd genoeg in 2 stukken "gebroken".
    Het gebeurt alleen als de edit- en statictext veldjes op de coordinaten staan zoals vermeld in "left" en "top". Bij het verplaatsen van de veldjes verdwijnt het probleem (meestal). Heeft iemand enig idee ?


    Delphi Code:
    1. unit NieuwlijnenU;
    2.  
    3. interface
    4.  
    5. uses
    6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    7.   StdCtrls;
    8.  
    9. type
    10.   TForm1 = class(TForm)
    11.     Edit1: TEdit;   // left = 124, top =  277
    12.     Edit2: TEdit;   // left = 124, top =  309
    13.     Edit3: TEdit;   // left = 124, top =  344
    14.     Edit4: TEdit;   // left = 124, top =  376
    15.     StaticText1: TStaticText;  // left = 24, top =  368
    16.     procedure FormPaint(Sender: TObject);
    17.   private
    18.     { Private declarations }
    19.   public
    20.     { Public declarations }
    21.   end;
    22.  
    23. var
    24.   Form1: TForm1;
    25.  
    26. implementation
    27.  
    28. {$R *.DFM}
    29.  
    30. procedure TForm1.FormPaint(Sender: TObject);
    31. begin
    32. with canvas do
    33.   begin
    34.   MoveTo(840,420);  // beginpunt lijnstuk
    35.   LineTo(960,45);   // eindpunt lijnstuk
    36.   end; // with canvas do
    37. end;
    38.  
    39. end.
    Last edited by GolezTrol; 23-Dec-19 at 19:42.

  2. #2
    Kun je een screenshot posten waarin je het "probleem" laat zien? Zelf denk ik dat je een geïnterpoleerde lijn verwacht en dat je geen interpolatie gebruikt (wat de standaard is).

  3. #3
    Hierbij het gevraagde. Ik werk wel nog met Delphi 5. Misschien komt dit probleem in nieuwere versies niet meer voor. Click image for larger version. 

Name:	Delphiprobleem.jpg 
Views:	45 
Size:	60.6 KB 
ID:	8050

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,208
    Probeer het canvas eens leeg te maken voor je tekent

  5. #5
    En/of DoubleBuffered van het form aan te zetten. Dat voorkomt in ieder geval wat geknipper, maar ik denk dat je dan ook steeds met een schone buffer begint.
    1+1=b

  6. #6
    Bedoel je met het canvas leegmaken alle Edit e.a. veldjes uit de Form verwijderen, dan op het canvas tekenen en de veldjes er eventueel nadien programmatisch opzetten ?

  7. #7
    Zal dit eens proberen. Heb ondertussen een "work around" gevonden. Ik gebruik nu 2 Forms, één waar ik de data nodig voor mijn tekeningen ingeef via de Edit veldjes en een ander waarvan ik alleen maar het canvas gebruik om de tekeningen uit te voeren. Werkt uitstekend.

  8. #8
    In dat geval, mocht je het toch op hetzelfde form willen hebben, dan zou je ook kunnen tekenen op het canvas van een TPanel.
    TPanel heeft, meen ik, een canvas en een OnPaint event, net zoals TForm.
    Je controls zet je dan bijvoorbeeld links op het scherm. Daarnaast zet je een TPanel. Dat TPanel gebruik je als ondergrond om op te tekenen.
    1+1=b

  9. #9
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,208
    Quote Originally Posted by Christian M View Post
    Bedoel je met het canvas leegmaken alle Edit e.a. veldjes uit de Form verwijderen, dan op het canvas tekenen en de veldjes er eventueel nadien programmatisch opzetten ?
    Meer iets als

    Delphi Code:
    1. Canvas.Brush.Color := Color;
    2.   Canvas.Brush.Style:=bsSolid;
    3.   Canvas.FillRect(rect(left,top,left+width,top+height));

    Als begin van je paint routine. Tis lang geleden maar het was met name nuttig als het canvas scrollers had.

  10. #10
    Probeer anders ipv MoveTo gebruik te maken van PenPos, ik heb eerder ook zoiets gehad, weet niet meer precies wat ik toen gebruikte, maar mogelijk ben je aan het tekenen terwijl je de cursor verplaatst.
    Wat je ook kan proberen is Canvas.Pen.Style op psClear zetten.
    Dan de MoveTo aanroepen, Canvas.Pen.Style terug op psSolid zetten en dan LineTo aanroepen.

  11. #11
    Lijkt me inderdaad een interessant alternatief.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •