Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Objekt verschwindet nach einiger Zeit

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.09.2008, 08:46 Uhr
~GastBenutzer123
Gast


Hallo Community

Ich benutze C++ Builder 2007 von Borland
und habe ein Objekt erstellt, das von TImage abgeleitet ist.

Diese Objekt benutze ich ebenfalls in einem Objekt das von einer TScrollBox abgeleitet ist.
Ich erstelle also in dem Objekt TScrollBox 8 Objekte von dem TImage.

Die TImage-Objekte dienen zur grafischen Übersicht von Werten.
Nun tritt aber manchmal, nach einiger Zeit, der Effekt auf, das eines oder mehrere der 8 TImage-Objekte verschwinden.
In dem Objekt selbst wird die Zeichenroutine noch durchlaufen, jedoch erscheint die grafische Darstellung nicht mehr.
erst nach dem schließen und wieder öffnen des TScrollBox-Objekts ist das verschwunde wieder sichtbar.

//------------------------------------------------------------------------------
/* TBalkenBitmap */
__fastcall TBalkenBitmap::TBalkenBitmap(): Graphics::TBitmap(){}
//------------------------------------------------------------------------------
void __fastcall TBalkenBitmap::MakeLike(Graphics::TBitmap* ATemplate)
{
Width = ATemplate->Width;
Height = ATemplate->Height;
Canvas->Brush->Color = TColor(clWindowFrame);
Canvas->Brush->Style = bsSolid;
Canvas->FillRect(Rect(0, 0, Width, Height));
}
//------------------------------------------------------------------------------

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

void __fastcall TBalken::Zeichnen()
{
int FillSize;
int W, H;



std::auto_ptr<TBalkenBitmap> OverlayImage(new TBalkenBitmap());


TRect PaintRect;

PaintRect = ClientRect;


PaintBackground(this->Picture->Bitmap);

InflateRect(&PaintRect, -1, -1);

OverlayImage->MakeLike(this->Picture->Bitmap);
PaintBackground(OverlayImage.get());



W = PaintRect.Right - PaintRect.Left + 1;
H = PaintRect.Bottom - PaintRect.Top + 1;

Canvas->Brush->Color = FHinterGrundFarbe;
Canvas->FillRect(PaintRect);
Canvas->Pen->Color = clBlack;
Canvas->Pen->Width = 1;
Canvas->Brush->Color = FBalkenFarbe;

FillSize = SolveForX(PercentDone, H);
if (FillSize >= H)
FillSize = H - 1;

NegativenMinPruefen();

if (FNegativAnz)
{
Canvas->FillRect(Rect(PaintRect.Left,H - FillSize,W, H/2));
FNegativAnz = false;
}
else
Canvas->FillRect(Rect(PaintRect.Left,H - FillSize,W, H));


Canvas->CopyMode = cmSrcInvert;
Canvas->Draw(0, 0, OverlayImage.get());
Canvas->CopyMode = cmSrcCopy;
PaintAsText(this->Picture->Bitmap, PaintRect);
Canvas->CopyMode = cmSrcCopy;
Canvas->Draw(0, 0, this->Picture->Bitmap);

}
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
void __fastcall TBalken::PaintAsText(Graphics::TBitmap* AnImage, const TRect& PaintRect)
{
AnsiString S , E;
int X, Y;
std::auto_ptr<TBalkenBitmap> OverRect(new TBalkenBitmap);

OverRect->MakeLike(AnImage);
PaintBackground(OverRect.get());

if (FProzentAnz == true)
{
S = AnsiString((int)PercentDone);
E += "%";
}
else
{
S = FCurValue;
E = FEinheit;
}

OverRect->Canvas->Brush->Style = bsClear;
OverRect->Canvas->Font = Font;
OverRect->Canvas->Font->Color = clWhite;

if (E.Length())
{
X = (PaintRect.Right - PaintRect.Left + 1 - OverRect->Canvas->TextWidth(S)) / 2;
Y = (((PaintRect.Bottom - PaintRect.Top + 1) /2) - OverRect->Canvas->TextHeight(S));
OverRect->Canvas->TextRect(PaintRect, X, Y, S);
X = (PaintRect.Right - PaintRect.Left + 1 - OverRect->Canvas->TextWidth(E)) / 2;
Y = ((PaintRect.Bottom - PaintRect.Top + 1) / 2) ;
OverRect->Canvas->TextRect(PaintRect, X, Y, E);
}
else
{
X = (PaintRect.Right - PaintRect.Left + 1 - OverRect->Canvas->TextWidth(S)) / 2;
Y = (PaintRect.Bottom - PaintRect.Top + 1 - OverRect->Canvas->TextHeight(S)) / 2;
OverRect->Canvas->TextRect(PaintRect, X, Y, S);
}
AnImage->Canvas->CopyMode = cmSrcInvert;
AnImage->Canvas->Draw(0, 0, OverRect.get());
}
//------------------------------------------------------------------------------
void __fastcall TBalken::PaintBackground(Graphics::TBitmap* AnImage)
{
TRect ARect;
AnImage->Canvas->CopyMode = cmBlackness;
ARect = Rect(0, 0, Width, Height);
AnImage->Canvas->CopyRect(ARect, AnImage->Canvas, ARect);
AnImage->Canvas->CopyMode = cmSrcCopy;
}
//------------------------------------------------------------------------------


Hat jemand ne Idee?

Habe auch schon die Methode Repaint selbst erstellt und in dieser dann Zeichen()
aufgerufen aber es tritt trotzdem nach einiger Zeit der Fehler auf

mfg
alex
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.09.2008, 14:40 Uhr
berniebutt



Wer soll soviel Code lesen, noch dazu in einer Programmier-Oberfläche, die man selbst nicht benutzt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: