Canvas
-
hi leutz,
ich male etwas .. wenn messagebox angezeigt wird stellt er anschliessend keine neue grafik dar .. lass ich messagebox weg stellt er alles richtig dar.
wenn ich mfCanvas direkt durch Image->Canvas ersetze malt er auch alles mit messagebox .. kann mir einer verraten wieso das mit mfCanvas nicht klappt?void Form1::male(TCanvas *mfCanvas)
{
for (;;)
{
if (k==2) Application->MessageBox("","",MB_OK);mfCanvas->Pen->Color=clWhite;
DrawZeichen(mfCanvas,22,3,zeichen);
}
}
-
Du malst direkt in die Form (Canvas)?
Dann wird das bei erstbester Gelegenheit gelöscht - wenn sich die Form neu darstellt.
Deine Messagebox ueberdeckt die Form - die muss neu gez. werden (spaetestens wenn Messagebox zu geht)
TImage speichert das gemalte als Bild - stellt dieses immer wieder dar!
-
ich verstehe jetzt nicht ganz.
also er malt in einem TImage und zerstört auch kein bild .. er malt nur bis die messagebox kommt und dann einfach nciht weiter .. zumindest sieht man ab da an keine änderung (für TCanvas *mfCanvas)wenn ich nicht nen zeiger(mfCanvas) auf Image->Canvas mache sondern dirkt darauf zugreife geht es mit messagebox
ich würde jetzt nur gerne wissen wieso der "fehler" bei dem zeiger mfCanvas ist und nciht bei Image->Canvas
-
???
Zeig mal, wie Du den Zeiger machst!
Und die entsprechende Aufrufe von male(...);PS: kannst auch mal mit Image->Picture->Bitmap->Canvas probieren.
-
TCanvas *mfCanvas=new TCanvas;
mfCanvas->Handle=Image->Picture->Bitmap->Canvas->Handle;
male(mfCanvas);DAS GEHT NICHT MIT MESSAGEBOX
-------------------------------
void Form1::male(TCanvas *mfCanvas)
{
for (;
{
if (k==2) Application->MessageBox("","",MB_OK);mfCanvas->Pen->Color=clWhite;
DrawZeichen(mfCanvas,22,3,zeichen);
}DAS GEHT MIT MESSAGEBOX
-------------------------
void Form1::male(void)
{
for (;
{
if (k==2) Application->MessageBox("","",MB_OK);Image->Canvas->Pen->Color=clWhite;
DrawZeichen(Image->Canvas,22,3,zeichen);
}
-
Probiers mal so:
.
.
.
TCanvas *mfCanvas; //ohne new!!!
//Image1->Picture->Bitmap->Width=100; //Bild muss
//Image1->Picture->Bitmap->Height=100;//Groesse haben!!!(nicht leer!)
mfCanvas=Image1->Picture->Bitmap->Canvas;
-
Altenburger: du setzt am falschen Ort an. Das problem ist, dass <heul> ne Endlosschleife programmiert hat. (In Windows Applikationen sind endlosschleifen nicht nur verpönt sondern verboten!) Innerhalb der Schleife gibt er dem Form keine Chance sich neu zu zeichnen oder anderen Anforderungen des Betriebssystems in Form von Messages nachzukommen, da er die MessageQueue nirgendwo abarbeitet.
<heul>: Schau dir mal TApplication::ProcessMessages an.
-junix
-
Ich denk er hat den Schleifenkopf nur nicht komplett gepostet!
Eine der beiden Varianten geht ja angeblich - die mit Zugriff auf Canvas ueber das Image!
Nur nicht mit ... new TCanvas...