Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: VCL (C++ Builder) ::  TImage nach FormResize neuzeichnen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Lukas Z.
Unregistrierter




Beitrag Lukas Z. Unregistrierter 13:38:04 08.11.2016   Titel:   TImage nach FormResize neuzeichnen            Zitieren

Simple Frage aber ich komm nicht drauf:
Wie kann ich nach dem Resize ein Image neuzeichnen?
(Da meine Neuberechnung zu lange dauert möchte ich das Image während dem Resize löschen und im Anschluss neuzeichnen)

Danke!
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 2607
Beitrag DocShoe Mitglied 13:43:04 08.11.2016   Titel:              Zitieren

Ich verstehe das Problem nicht. Was soll wann womit passieren?

_________________
Die fünf häufigsten Anzeichen für Faulheit:
1.
Lukas Z.
Unregistrierter




Beitrag Lukas Z. Unregistrierter 16:58:41 08.11.2016   Titel:              Zitieren

wenn ich die größe des formular mit der mouse ändere wird immer resize aufgerufen. aufwändigere funktionen möchte ich erst nach dem resize ausführen...

vielleicht OnMouseUp abfragen ob gerade ein resize ausgeführt wurde?
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 2607
Beitrag DocShoe Mitglied 17:10:12 08.11.2016   Titel:              Zitieren

Ah, jetzt verstehe ich. Während der Größenänderung wird mehrmals OnResize aufgerufen, und das löst ein Neuzeichnen des Bildes aus. Und das dauert jedes Mal lange und dadurch wird deine Anwendung träge?
Ein wirklich saubere Lösung gibt´s da nicht, du kannst vielleicht einen Timer aufziehen und im Handler prüfen, ob das Bild neu gezeichnet werden muss. Über das Intervall des Timers kannst du die Aktualisierungsgeschwindigkeit bestimmen.

C++:
class TMyForm : public TForm
{
   ...
private:
   bool ImageDirty_;
   ...
};


C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void TMyForm::OnFormResize( TObject* Sender )
{
   // Timer starten, falls er inaktiv ist
   if( !Timer->Enabled )
   {
      Timer->Enabled = true;
   }
   // Flag zum Neuzeichnen des Bildes setzen
   ImageDirty_ = true;
}
 
void TMyForm::OnTimer( TObject* Sender )
{
   if( ImageDirty_ )
   {
      // Bild muss neu gezeichnet werden
      repaint_image();
      ImageDirty_ = false;
   }
   else
   {
      // Timer ist abgelaufen und das Bild muss nicht
      // neu gezeichnet werden => kein weiteres Resize
      // Timer wird nicht mehr benötigt -> deaktivieren
      // Timer->Enabled = false;
   }
}


Nachtrag:
Du kannst auch den Status der linken Maustaste prüfen, wenn sie unten ist wird vermutlich die Größe weiter verändert. Das könnte auch klappen.

C++:
void TMyForm::OnFormResize( TObject* Sender )
{
   if( (GetAsyncKeyState( VK_LBUTTON ) & 0x8000) == 0 )
   {
      // Bild neu zeichnen
   }
}

_________________
Die fünf häufigsten Anzeichen für Faulheit:
1.


Zuletzt bearbeitet von DocShoe am 17:18:39 08.11.2016, insgesamt 2-mal bearbeitet
Burkhi
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.11.2003
Beiträge: 678
Beitrag Burkhi Mitglied 17:49:57 09.11.2016   Titel:              Zitieren

Ich würde in OnResize den Timer immer wieder neu aufziehen, dann werden deine Berechnungen erst dann ausgeführt, wenn sich das System wieder "beruhigt" hat:
C++:
1
2
3
4
5
6
7
8
9
10
void TMyForm::OnFormResize( TObject* Sender )
{
   Timer->Enabled = false;
   Timer->Enabled = true;
}
void TMyForm::OnTimer( TObject* Sender )
{  
   Timer->Enabled = false;
   repaint_image();
}

;)

_________________
Objekt- Orientierte Automatisierungs- Software- Entwicklung
Rad Studio: 10.1 Berlin, 10 Seattle, XE8, XE7, XE6, XE5, XE2, XE, 2010, 2009
C++ Builder: XE4, XE3, 2006, 5 Prof
Lukas Z.
Unregistrierter




Beitrag Lukas Z. Unregistrierter 21:35:26 09.11.2016   Titel:              Zitieren

Timer kannte ich gar nicht, klingt vernünftig.

Danke Euch!
C++ Forum :: VCL (C++ Builder) ::  TImage nach FormResize neuzeichnen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.