AGB  ·  Datenschutz  ·  Impressum  







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

OnShow von Frames selbst erstellen

Ein Thema von Maya · begonnen am 26. Okt 2011 · letzter Beitrag vom 25. Jan 2012
Antwort Antwort
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#1

OnShow von Frames selbst erstellen

  Alt 26. Okt 2011, 14:00
Hallo ihr Lieben,

das Mini-Azubi braucht mal wieder etwas Hilfe.
Ich arbeite ja zur Zeit mit Frames und läuft, trotz kleiner Stolpersteine ganz gut. Eine Lösung für das fehlende OnCreate-Ereignis habe ich schon gefunden, aber nun fall ich wgn. dem fehlenden OnShow auf die Nase.

Ich möchte das Programm ja auch benutzerfreundlich gestalten, deswegen soll der Cursor beim Aufruf des Frames direkt im entsprechenden Edit-Feld blinken. Also dachte ich mir, packst du das ebenfalls in dein selbstgebasteltes OnCreate herein.

Delphi-Quellcode:
private
   constructor Create(AOwner: TComponent); override;

[...]
constructor Tirgendetwas.Create(AOwner: TComponent);
begin
   inherited;
   dtpAnfang.Date:=Now;
   dtpEnde.Date:=Now;
end;
Das klappt super, aber sobald ich "lbledt_Begriff.SetFocus" einbaue, sagt Delphi-Lein mir folgendes beim Aufruf des entsprechenden Frames: "Element 'lbledt_Begriff' hat kein übergeordnetes Fenster". Da dachte ich mir, das könnte daran liegen, dass bei dem Constructor die labeled Edits noch nicht erezeugt wurden und deswegen damit nichts angefangen werden kann. Aus dem Grund war mein Lösungsansatz, ich bastel mir selber ein OnShow-Ereignis.
Frage ist bloß: wie? Gibt es ein Tutorial oder einen Tipp, den ihr mir geben könnt. Ich möchte ja nicht, dass mir alles vorgekaut wird, aber ein Schubser ist schon notwendig. -.-

Dankefein!
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
webcss

Registriert seit: 10. Feb 2006
255 Beiträge
 
Delphi XE2 Professional
 
#2

AW: OnShow von Frames selbst erstellen

  Alt 26. Okt 2011, 14:10
Delphi-Quellcode:
interface

TMyFrame = class(TFrame)
private
  FOnShow: TNotifyEvent;
protected
  procedure DoShow;
published
  property OnShow: TNotifyEvent read FOnShow write FOnShow;
end;

implementation

procedure TMyFrame.DoShow;
begin
  inherited DoShow;
  if assigned(FOnShow) then
    FOnShow(self);
end;
So sollte es gehen.
"Wer seinem Computer Mist erzählt, muss immer damit rechnen..." (unbekannt)
"Der Computer rechnet damit, dass der Mensch denkt..." (auch unbekannt)
mein blog
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: OnShow von Frames selbst erstellen

  Alt 26. Okt 2011, 14:17
Du kannst procedure VisibleChanging; override; überschreiben oder auf CM_VISIBLECHANGED reagieren.


PS: Das hättest du auch selber rausfinden können.
Schauen was der Setter von TFrame.Visible (also hier das TControl.SetVisible) macht, ob sich dieser Setter überschreiben läßt,
oder ob darin ein Event ausgelöst wird, bzw. ob dort etwas Überschreibbares ausgerufen wird.

@webcss: Wenn du DoShow überschreiben willst, dann solltest du es auch als override markieren.

@maya: Der Constructor sollte vermutlich public sein und nicht private?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Okt 2011 um 14:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: OnShow von Frames selbst erstellen

  Alt 26. Okt 2011, 14:42
Du kannst procedure VisibleChanging; override; überschreiben[..]
@maya: Der Constructor sollte vermutlich public sein und nicht private?
Also es scheint Syntaxfehlerfrei zu sein, aber passieren tut trotzdem nichts.

Delphi-Quellcode:
procedure Tirgendetwas.VisibleChanging;
begin
   inherited;
   lbledt_Begriff.SetFocus;
end;
Jupp, ist public. Hatte es ursprünglich mal im Private, aber da kam ja dann immer ein Hinweis, dass das so nicht wirklich in Ordnung ist.
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
webcss

Registriert seit: 10. Feb 2006
255 Beiträge
 
Delphi XE2 Professional
 
#5

AW: OnShow von Frames selbst erstellen

  Alt 26. Okt 2011, 15:43
@webcss: Wenn du DoShow überschreiben willst, dann solltest du es auch als override markieren.
Richtig, aber ich meinte auch procedure Show; , denn procedure DoShow; gibt's erst in TCustomForm, TCustomFrame ist aber von TScrollingWinControl bzw. TWinControl geerbt, welche eben nur Show; kennen, und die ist weder virtual noch dynamic...
"Wer seinem Computer Mist erzählt, muss immer damit rechnen..." (unbekannt)
"Der Computer rechnet damit, dass der Mensch denkt..." (auch unbekannt)
mein blog

Geändert von webcss (26. Okt 2011 um 15:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: OnShow von Frames selbst erstellen

  Alt 25. Jan 2012, 07:59
Ich möchte hier mal meine Lösung posten, falls noch jemand das mal braucht. Die Lösungen, die ich hier im Forum fand, halfen mir leider nicht so wirklich.

Delphi-Quellcode:
private
    { Private-Deklarationen }
    procedure CMSHowingChanged(var M: TMessage); message CM_SHOWINGCHANGED;

[...]

procedure TmeinFrame.CMSHowingChanged(var M: TMessage);
begin
  inherited;
  if Showing then
    begin
        //Mache dieses und jenes!
    end;
end;
Ganz simple, ganz einfach und klappt!
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  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 12:20 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