AGB  ·  Datenschutz  ·  Impressum  







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

TComponent "unsichtbar" in eine Form einbauen

Ein Thema von sir-archimedes · begonnen am 12. Feb 2006 · letzter Beitrag vom 12. Feb 2006
Antwort Antwort
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#1

TComponent "unsichtbar" in eine Form einbauen

  Alt 12. Feb 2006, 13:48
Hallo,

ich möchte gerne eine Componente unsichtbar in eine Form einbauen:

habe eine Form, die vererbt wird und diese Form soll auf verschiedene Messages reagieren können. Dazu habe ich ein TApplicationEvent protected eingebaut, welches im Constructor auch einwandfrei instanziert wird.

In abgeleiteten Formen jedoch wird dieses TApplicationEvent im Formulareditor angezeigt. Das will ich allerdings nicht. Die Form soll also nach außen quasi genauso aussehen, wie jede andere Form auch. Geht so etwas irgendwie?

Ich hoffe, irgendwer konnte verstehen, was ich meine

Gruß,
Dominik
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: TComponent "unsichtbar" in eine Form einbauen

  Alt 12. Feb 2006, 14:02
Von was hast denn du abgeleited ? Ein Tobject sollte reichen. Oder hab ich dich falsch Verstanden...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#3

Re: TComponent "unsichtbar" in eine Form einbauen

  Alt 12. Feb 2006, 14:06
Dann hast du mich falsch verstanden. Ich habe quasi folgendes:

Delphi-Quellcode:
type
  TMyForm = class(TForm)
  private
    AppMessages : TApplicationEvents;
    procedure AppMessagesOnMessage(var Msg: tagMSG; var Handled: Boolean);
  public
    constructor Create(AOwner : TComponent); override;
  end;

constructor TMyForm .Create(AOwner : TComponent);
begin
  inherited;
  AppMessages := TApplicationEvents.Create(Self);
  AppMessages.OnMessage := AppMessagesOnMessage;
end;

procedure TMyForm .AppMessagesOnMessage(var Msg: tagMSG;
  var Handled: Boolean);
begin
  // Hier eine Menge MEssage-Behandlung
end;
Und wenn ich nun eine neue Form erzeuge, die von TMyForm erbt, also z.B.
Delphi-Quellcode:
type
  TNeueForm = class(TMyForm)
  end;
Dann habe ich im Formulareditor ein ApplicationEvent, welches eigentlich unsichtbar hätte bleiben sollen, da es ja nur intern verwendet wird!

Gruß,
Dominik
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TComponent "unsichtbar" in eine Form einbauen

  Alt 12. Feb 2006, 14:16
ist doch klar, schließlich schreibst du:
TApplicationEvents.Create(Self); übergib als owner "nil" und schon trägt es sich nicht in die Components-List des Forms ein.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: TComponent "unsichtbar" in eine Form einbauen

  Alt 12. Feb 2006, 14:17
im übrigen würde ich dir eher die messagehandler per extra-methode empfehlen da dein Application-Events auch die messages von anderen Forms abfängt. Wenn du also zwei von deinen forms nutzt wertest du die messages wohlmöglich doppelt aus. Richtiger wäre es doch aber wenn du wirklich nur die messages für das form auswertest oder nicht?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TComponent "unsichtbar" in eine Form einbauen

  Alt 12. Feb 2006, 15:15
Zitat von SirThornberry:
ist doch klar, schließlich schreibst du:
TApplicationEvents.Create(Self); übergib als owner "nil" und schon trägt es sich nicht in die Components-List des Forms ein.
Oh ja, tatsächlich - das wars... Manchmal ist man einfach blind

Zitat von SirThornberry:
im übrigen würde ich dir eher die messagehandler per extra-methode empfehlen da dein Application-Events auch die messages von anderen Forms abfängt. Wenn du also zwei von deinen forms nutzt wertest du die messages wohlmöglich doppelt aus. Richtiger wäre es doch aber wenn du wirklich nur die messages für das form auswertest oder nicht?
Stimmt schon - aber ich möchte eine Form quasi komplett sperren, um ein "modales MDI-Fenster" zu erstellen. Das heißt, dass alle Klicks - auch auf Children der Form - geschluckt werden sollen und das modale MDI-Fenster wieder aktiviert wird. Das mache ich so:

Delphi-Quellcode:
procedure TInstantiableForm.AppMessagesOnMessage(var Msg: tagMSG;
  var Handled: Boolean);
var
  Ctrl : TWinControl;
begin
  if csDesigning in ComponentState then
    exit;
  if Assigned(RelativeModalForm) then
    begin
      if ((Msg.message >= WM_LBUTTONDOWN) AND (Msg.message <= WM_MOUSELAST)) then
        begin
          Ctrl := FindControl(Msg.hwnd);
          while Assigned(Ctrl) do
            begin
              if Ctrl = Self then
                begin
                  RelativeModalForm.BringToFront;
                  Handled := true;
                  Break;
                end;
              Ctrl := Ctrl.Parent;
            end;
        end;
    end;
end;
Da sieht man auch, dass ich tatsächlich nur Messages an meine Form behandle

Hab es jetzt auf jeden Fall wie gewünscht am Laufen =)

Danke!
  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 13:37 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