AGB  ·  Datenschutz  ·  Impressum  







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

Neue TPanel-Klasse

Ein Thema von alcaeus · begonnen am 29. Mai 2004 · letzter Beitrag vom 30. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Neue TPanel-Klasse

  Alt 29. Mai 2004, 20:08
Hi! Ich leite eine Klasse von TPanel ab, die beim Resizen etwas bestimmtes machen soll. Zusätzlich soll der Programmierer immer noch das "normale" OnResize behandeln können, ohne dass dabei das vorherige überschrieben wird. Ich hoffe es war einigermaßen verständlich. Kann mir bitte jemand weiterhelfen?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Neue TPanel-Klasse

  Alt 29. Mai 2004, 20:45
Kannst du nicht per inherited das alte OnReszise übernehmen und dahinter schreiben, was ausserdem noch gemacht werden soll?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Neue TPanel-Klasse

  Alt 29. Mai 2004, 20:55
das einfachste ist "SetBounds" zu überschreiben und wenn sich "width" oder "height" ändert dann kannst du ja reagieren...

Delphi-Quellcode:
  TYourpanel = class(TPanel)
  protected
    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
[...]

procedure TYourpanel.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
var Sizechanged: Boolean;
begin
  sizechanged := (AWidht <> Width) or (AHeight <> AHeight);
  inherited SetBounds(ALeft, ATop, AWidth, AHeight);
  if sizechanged then
  begin
    //do something you want todo onResize
  end;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#4

Re: Neue TPanel-Klasse

  Alt 29. Mai 2004, 20:59
Wenn ich dein Problem richtig verstanden habe, dann ist das folgendes:

du hast 'ne klasse, abbgeleitet von TPanel
Du selbst möchtest das OnResize verwenden, d.h. in der Klasse drinnen. Trotzdem sollte es dem User möglich sein, sein OnResize zu verwenden.
Das Eigentliche Problem ist dann halt ein Namenproblem, z.B. das Resize-Event des benutzers könnte dann OnNewResize heißen, dann könntest du folgendes machen:

Delphi-Quellcode:
type
  TMyPanel = class(TPanel)
  protected
    FOnNewResize: TNotifyEvent;
    property OnResize;
    procedure InternResize(Sender: TObject);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property OnNewResize read FOnNewResize write FOnNewResize;
  end;

implementation

constructor TMyPanel.Create(AOwner: TComponent);
begin
  inherited;
  OnResize := InternResize;
end;

procedure TMyPanel.InternResize(Sender: TObject);
begin
  if Assigned(OnNewResize) then
    FOnNewResize(Sender);
end;
hab aber keine garantie, dass alles funzt, müsst aber ein lösungsansatz sein...


[Edit] Zu langsam.... [/Edit]
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  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: Neue TPanel-Klasse

  Alt 29. Mai 2004, 21:07
@Skyron: das mit dem namen ist nicht so ein problem, auf deine art und weise kann man das so lösen
Delphi-Quellcode:
  TMyPanel = class(TPanel)
  private
    FOnResize: TNotifyEvent;
    procedure FOnResizeProc(Sender: TObject);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property OnResize read FOnResize write FOnResize;
  end;

implementation

constructor TMyPanel.Create(AOwner: TComponent);
begin
  inherited;
  inherited OnResize := FOnResizeProc;
end;

procedure TMyPanel.FOnResizeProc(Sender: TObject);
begin
  if Assigned(FOnResize) then FOnResize(Self);
  //do something you want....
end;
man überschreibt im prinzip das orginale "OnResize" und weißt dem orginalen OnResize mit inherited die procedure zu
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#6

Re: Neue TPanel-Klasse

  Alt 29. Mai 2004, 21:10
Das versteh ich jetzt nicht...
Sind da dann 2 OnResize? wird beim überschreiben das alte nicht überschrieben?
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Neue TPanel-Klasse

  Alt 29. Mai 2004, 21:21
das alte wird schon überschrieben aber ich kann ja auf das alte noch mit "inherited" zugreifen. Wenn du in den Constructor schaust wirst du sehen das ich dem "inherited OnResize" die Procedure zuweise..
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: Neue TPanel-Klasse

  Alt 29. Mai 2004, 21:38
Also, kann ich jetzt davon ausgehen dass der Code von SirThornberry funktioniert? Wenn ja, heißt das für den Programmierer sichtbare Ereignis immer noch OnResize? Das heißt ich kann im Benutzer-Resize ganz normalen Code schreiben, ohne lang ein inherited davor setztn zu müssen, oder? Bitte sagt mir was richtig ist, ich kenne mich bei den Sachen noch nicht so richtig aus.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#9

Re: Neue TPanel-Klasse

  Alt 29. Mai 2004, 22:13
Dankeschön SirT, dein Code hat funktioniert. Füge ich nun die Behandlungsroutine für das neue Panel ein, so erscheint automatisch das Wort inherited. Gute Arbeit, danke nochmals

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#10

Re: Neue TPanel-Klasse

  Alt 29. Mai 2004, 22:15
Das einfachste ist, das Standard-Resize zu überschreiben, darin wird nämlich OnResize aufgerufen, falls es nicht Nil ist.
Delphi-Quellcode:
...
Procedure Resize; override;
...
Procedure TMyPanel.Resize;
Begin
 // alles tun, was zu tun ist
 // dann das Original-Resize
 inherited;
End;
Gruß, teebee
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:36 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