Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 14, 2025 19:44

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Jan 12, 2011 11:24 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Hallo zusammen,

ich habe folgendes Problem. Ich verwende OpenGL um auf einem Panel in meinem Hauptfenster zu zeichnen. In der Regel wird die Szene innerhalb einer Schleife upgedated und neu gezeichnet. Gelegentlich schalte ich die Schleife allerdings aus. Mit der Mouse kann ich dann meine Szene verschieben, zoomen,..., meine Zeichenroutine wird in den entsprechenden Mouseevents des Panels ausgeführt. Aber auf welches Event kann ich reagieren, wenn ich ein weiteres Fenster über mein Panel ziehe? Die vom Fenster überstrichene Fläche wird dann nämlich nicht neu gezeichnet, bzw. wird grau! Gibt's irgend eine Message auf die man reagieren könnte?

Vielen Dank
Marcel

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jan 12, 2011 12:05 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Schau mal ob das OnShow Event feuert.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jan 12, 2011 12:18 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Zitat:
Schau mal ob das OnShow Event feuert.


Das OnShow der Form: nein. Das Panel hat keines.

Könnte ich anstatt auf einem Panel auf einer anderen Komponente rendern, die mir entsprechende Events zur Verfügung stellt?

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jan 12, 2011 12:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ich habe keine Ahnung von Delphi, aber ich würde mal auf ein "OnPaint" oder ähnliches tippen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jan 12, 2011 12:57 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
@Coolcat: Das würde ich auch machen, gibts aber beim Panel nicht.

Ich habe aber einen Workaround gefunden:
Zuerst wollte ich in eine Paintbox zeichen (die hat ein onPaint). Aber CreateRenderContext akzeptiert das Handle nicht. Jetzt zeichne ich weiter auf dem Panel, habe aber eine Paintbox darüber gelegt, die nur dazu da ist auf das OnPaint zu reagieren und meine Szene neu zu zeichnen.

Funktioniert! Wenn jemand eine elegantere Möglichkeit kennt, kann er das aber gerne hier posten.

Vielen Dank!

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 13, 2011 12:06 
Offline
DGL Member

Registriert: Mo Nov 09, 2009 12:01
Beiträge: 200
Ich nutzte das TjvPanel von JEDI. Das hat ein OnResize und ein OnPaint Event. Die werden beide gebraucht.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 15, 2011 21:29 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Code:
type
  TGLPanelPaintProc = procedure (Sender : TObject) of Object;
  TGLPanel = class(TPanel)
  private
    evOnPaint : TGLPanelPaintProc;
  protected
    procedure OnPaint; override;
  published
    property OnPaint : TGLPanelPaintProc write evOnPaint;
  end;

implementation

procedure TGLPanel.Paint;
begin
  inherited;
  if Assigned(evOnPaint) then
    evOnPaint(Self);
end;


Code in form ob rein packen, das TPanel in TGLPanel umbennen, das OnPaint nutzen fertig.
Im OnPaint kannst du dann dein rendercode reinpacken.

Kann sein das du noch das Hintergrund Löschen verhindert musst.
Das geht mit ableitung der windows message wm_erasebkgnd oder so.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 20, 2011 10:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Apr 09, 2009 12:51
Beiträge: 53
Programmiersprache: Lazarus
Code:
type
  TGLPanelPaintProc = procedure (Sender : TObject) of Object;
  TGLPanel = class(TPanel)
  private
    evOnPaint : TGLPanelPaintProc;
  protected
    procedure Paint; override;
  published
    property OnPaint : TGLPanelPaintProc read evOnPaint write evOnPaint;
  end;

implementation

procedure TGLPanel.Paint;
begin
  inherited;
  if Assigned(evOnPaint) then
    evOnPaint(Self);
end;


Bissl korrigiert (ein write-only Property) :o
Zur Sicherheit evtl noch WM_PRINTCLIENT abfangen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 17 Queries | GZIP : On ]