AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TPanel OnActivate

Ein Thema von ConnorMcLeod · begonnen am 5. Okt 2012 · letzter Beitrag vom 8. Okt 2012
Antwort Antwort
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

TPanel OnActivate

  Alt 5. Okt 2012, 12:10
Hallo Kollegen,
ich habe ein TPanel abgeleitet, das ein paar andere Kompos beheimatet und noch ein paar Dinge im Hintergrund macht.
Jedesmal, wenn die Form, auf der dieses Panel sitzt, aktiviert wird, soll es aufs Neue einige Daten einlesen und sich refreshen. Aber nicht von aussen angestossen, sondern das Panel soll selbst die Fähigkeit haben, zu reagieren.
Leider habe ich keine Variante gefunden, wie das Panel mitkriegt, wann die Form aktiviert wird. So etwas wie ein CM_ACTIVATE-MessageHandler.
Weiss jemand Rat?
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: TPanel OnActivate

  Alt 5. Okt 2012, 12:17
Da dem Panel nunmal von der VCL nicht mitgeteilt wird, daß die Form (etwas Externes/Unabhängiges) aktiviert wird, wird es da nichts geben, außer es selber von außen zu benachrichtigen.


Ja, man könnte sich eventuell hinterrücks in den MassageHandler der Form reinhacken,
oder sich global an alle Messages hängen (TApplicationEvents) und dort auf die Aktivierungsnachricht für die Parent-Form reagieren.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: TPanel OnActivate

  Alt 5. Okt 2012, 19:10
Würde es nicht gehen, wenn du einfach die aktivierung der Form durch die Message "CM_ACTIVATE" an dein Panel weiterleitest?
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: TPanel OnActivate

  Alt 5. Okt 2012, 19:45
Ein gewagter Versuch und sicher nicht für die Redistribution geeignet, springt auch noch bei Deaktivieren an, aber vielleicht bringt es Dich noch auf andere Ideen.
EDIT:
Fehlt nur die Überprüfung auf wParam<>0
Angehängte Dateien
Dateityp: zip Test.zip (1,7 KB, 7x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 6. Okt 2012 um 09:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TPanel OnActivate

  Alt 6. Okt 2012, 21:53
Danke Euch allen für die Ideen und Bummi für die Mühe! Diesen Ansatz habe ich mir auch ein paar Sekunden lang überlegt...das Problem dabei ist, dass ich erstens nicht weiss, welche Form mein Parent sein wird und zweitens diese Form mit hoher Wahrscheinlichkeit eine eigens geschriebene WndProc hat - diese müsste ich dann auch ausführen und wer weiss, was dann alles schieflaufen kann. Und was mache ich bei zwei Panels auf einer Form...

EDIT: Mein derzeit favorisierter Gedanke ist, eine Ableitung von TForm zu machen mit einem public property: TObjectList, in die sich das Panel einträgt plus einem Pointer auf die Prozedur, die ausgeführt werden soll. In der überschriebenen WndProc der Form wird die Liste abgearbeitet; nachgeschaut, ob die Objects noch gültig sind und wenn ja, die entsprechende Prozedur ausgeführt.
Nr.1 Delphi-Tool: [F7]

Geändert von ConnorMcLeod ( 7. Okt 2012 um 06:12 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: TPanel OnActivate

  Alt 8. Okt 2012, 09:35
Aber da das doch im Prinzip auch "von aussen angestossen ist" könnte man auch durch alle Panels auf der Form iterieren, sehen ob sie von Typ "Selbstaktualisierendes Panel" sind und dann eine public "Aktualisiere mich"-Methode des Panels anstossen. Da macht das mit Objectlist und ein- und austragen doch nur komplizierter für letztlich den selben Vorgang.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TPanel OnActivate

  Alt 8. Okt 2012, 12:42
Ich habe meinen Controls einen Controller verpasst, der den Weg zu den benötigten Daten kennt.
Immer wenn ein Control gezeichnet wird (WM_Paint) holt dieses sich über seinen Controller die aktuellen Daten. (Das Databinding läuft automatisiert über ein Framework im Hintergrund.)
Wenn andererseits die Datenschicht Änderungen vornimmt werden alle Controller (die sich beim Erzeugen in eine globale Liste eintragen) darüber informiert und veranlassen für ihren Owner ein Invalidate. Sofern bzw. sobald das Control sichtbar ist holt es sich also neue Daten ab.

Vielleicht hilft Dir das als Ansatz? Wenn es aber nur um ein Panel und ein paar Controls darin geht, ist es sicher einfacher, das (auf die klassiche Weise) von Hand anzustoßen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 8. Okt 2012 um 15:01 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz