Avatar billede sessa Nybegynder
28. juli 2006 - 16:14 Der er 5 kommentarer og
1 løsning

Hvorfor virker Canvas ikke i Borland C++ Builder?

Ifølge C++Builders hjælpfil skulle man kunne tegne direkte på en form ved hjælp af Canvas, f.eks Form1->Canvas->Ellipse(0,0,50,50), hvis altså den pågældende form hedder Form1.
Det virker bare ikke. Det vil sige, det gør det, hvis jeg skriver det i en OnPaint-funktion, men i andre sammenhænge tegnes der ingenting.
Jeg har derfor prøvet at sende en WM_PAINT message til både formen og dens Canvas, men det hjælper ikke.
Er der nogen, der kan forklare det her? Jeg ved godt, at jeg kan komme udenom problemet ved at lægge et Image på formen eller på andre måder, men det mystificerer mig...
Avatar billede miqe Nybegynder
28. juli 2006 - 16:58 #1
Skummelt!
Det virker for mig.
Jeg lavede en knap på formen og lagde Form1->Canvas->Ellipse(0,0,50,50)ind i dens onClick.
Kan vi se noget af kildekoden? Mest så vi kan se hvorfra du laver kaldet.
Avatar billede tommya Nybegynder
28. juli 2006 - 17:15 #2
Problemet er højest sandsynligt at hvis du ikke tegner i OnPaint, bliver din ellipse overtegnet når formen gentegner. Hvor fra kaldte du den før.
Avatar billede sessa Nybegynder
28. juli 2006 - 17:18 #3
Her er det skåret ned til det absolut minimale. Jeg starter C++ Builder og skriver linien "Form1->Canvas->Ellipse( 0, 0, 50, 50 )" i den første og eneste funktion, der er til start.
Og så forsøgte jeg som nævnt uden held med en WM_PAINT message for at opdatere formen. Men det SKAL måske slet ikke virke her?


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  Form1->Canvas->Ellipse( 0, 0, 50, 50 );
}
//---------------------------------------------------------------------------
Avatar billede tommya Nybegynder
28. juli 2006 - 17:21 #4
Du sætter det i constructor, den kode bliver kaldt før formen bliver tegnet, derfor bliver det overtegnet af formen selv. Hvis du ønsker at tegne på formen og det skal forblive der så skal du gøre det i OnPaint. Du kan også gøre det du tegner til et offscreen canvas som du så tegner på formen i OnPaint.
Avatar billede sessa Nybegynder
28. juli 2006 - 17:53 #5
Nå, jeg kan se, at jeg har dummet mig. Jeg kunne heller ikke få det til at virke, når jeg satte linien Form1->Canvas->Ellipse(0,0,50,50) i OnKeyPress, men nu prøvede jeg igen - og så fungerede det. Hmm! Jeg ved ikke, hvad jeg har gjort...
Men i hvert fald, tak for hjælpen ( og undskyld ulejligheden ). Tommya, lægger du et svar?
Avatar billede tommya Nybegynder
28. juli 2006 - 18:02 #6
ingen grund til at undskylde, tror vi har været der alle sammen, held og lykke med det :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester