AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Eigene Klasse von TTabsheet

Ein Thema von Pro_RJ · begonnen am 10. Sep 2013 · letzter Beitrag vom 12. Sep 2013
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Eigene Klasse von TTabsheet

  Alt 11. Sep 2013, 08:58
Das mache ich ja auch nicht aus Spaß, sondern nur, wenn es nicht anders geht. In meinem Leben bislang zwei mal: Einmal für irgendeinen (unsinnigerweise protected) onXYZ-Event einer TTrackbar und dieses mal eben für die Scrollbalken eines TDBGrid. Also nur für reine Äußerlichkeiten einer VCL-Komponente.

Ein echter Mann würde eine richtige Unterklasse erstellen, aber da eben das mit VCL-Komponenten auf einem Formular doch nicht einfach in kurzer Zeit einfach zu machen ist (oder irre ich mich?), habe ich lieber zu dieser Methode gegriffen.

Da diese "Interposer-Klasse" nicht in einer anderen Unit, sondern in der gleichen wie das Formular: So kann mir doch keine andere Unit diese Klasse verdecken? Meine ist immer ganz oben, richtig?


Aber ja, es ist ein ziemlicher Hack und sollte man nicht zur Gewohnheit werden lassen. Habe ich bislang auch nur in Delphi mit seiner komischen Interpretation von Sichtbarkeitsmodifikatoren gesehen
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#2

AW: Eigene Klasse von TTabsheet

  Alt 11. Sep 2013, 13:45
Halli Hallo,
danke erstmal für die Anworten.
Aufgrund der Komplexität des Programmes (über 300 Fenster) und auch der Sicherheit habe ich es jetzt wie folgt gelöst:

Jedes Fenster stammt bei uns von einer gemeinsamen Vorfahrenklasse ab (TMYCustomform) diese Steuert die gesamte Benutzerverwealtung. Diese hab ich jetzt so erweitert, das die Tabsheets auch mit in der Benutzerliste gespeichert werden(hier standen bis her nur die Labels,Edits,Butten usw)

Diese Klasse hab ich jetzt um die Eigenschaft "Tabvisible[Page : TTabsheet]" erweitert. Jeder Aufruf von Tabsheet1.tabvisible := true wird auf Self.Tabvisible[Tabsheet1] := True geändert. Damit habe ich einen gemeinsamen Punkt wo ich prüfen kann, ob der Anwender das register sehen darf oder nicht.

Ausserdem habe ich die TPagecontrol Klasse abgeleitet und ein "BeforeChange" implementiert in der ich abfragen kann welches register jetzt angezeigt werden soll. Dieses Ereigniss prüft in der Benutzerliste ob der Anwender in das register darf oder eben nicht. Darf er nicht lasse ich einen wechsel des Registers einfach nicht zu.

Das ist für uns die Sicherere Variante mit relativ geringem Aufwand. und bei der weiteren Entwicklung muss nichts weiter beachtet werden.

mfg
Jens
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Eigene Klasse von TTabsheet

  Alt 11. Sep 2013, 13:47
Ah und ich dachte, man kann nicht einfach eine Unterklasse einer VCL-Komponente auf dem Formular erstellen da Delphi doch immer die Oberklasse nimmt? War ich wohl zu dumm dafür, als ich das mal versucht hatte...
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#4

AW: Eigene Klasse von TTabsheet

  Alt 12. Sep 2013, 11:21
Ah und ich dachte, man kann nicht einfach eine Unterklasse einer VCL-Komponente auf dem Formular erstellen da Delphi doch immer die Oberklasse nimmt? War ich wohl zu dumm dafür, als ich das mal versucht hatte...
Sorry aber irgendwie steh ich gerade auf dem schlauch.
Was meinst du?
Ich habe aus dem TPagecontrol ein TMyPagecontrol gemacht. Auf dem kann ich Per rechter Maus Taste noch immer eine neue Seite erstellen. Diese Seite ist dann noch immer von der Klasse TTabsheet.
Das TForm ist bei mir abgeleitet.
z.B. TForm --> TmyCustomForm --> TFormArtikelstamm
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Eigene Klasse von TTabsheet

  Alt 12. Sep 2013, 11:42
Ich habe aus dem TPagecontrol ein TMyPagecontrol gemacht. Auf dem kann ich Per rechter Maus Taste noch immer eine neue Seite erstellen.
Ich habe irgendwo noch im Kopf dass ich
  • Einfach eine Unterklasse einer VCL-Komponente (z.B. TPageControl) gebildet habe
  • Die published-Referenz in der .pas-Datei der Form vom Typ TPageControl auf TMyPageControl geändert habe
  • Das keine Auswirkungen hatte: Konkret wurde immer noch ein TPageControl erzeugt statt der Unterklasse
  • Ich dann auch noch versucht habe, es in der DFM zu ändern, aber er das nicht angenommen hat

Wie gesagt, das sind nur noch verschwommene Horror-Erinnerungen, wahrscheinlich halte ich den Betrieb mit meinen falschen und vergangenen Halluzinationen unnötig auf. Oder wie bist du vorgegangen?
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#6

AW: Eigene Klasse von TTabsheet

  Alt 12. Sep 2013, 13:44
Ich hab mir ein neues Package gemacht. Dort ist die TMyPagecontrol deklariert.
dann habe ich in den units per Sucher/ersetzen TPAgecontrol durch TMyPagecontrol ersetzt(in der.Pas und in der .dfm).
Dann die Unit neu gestartet und alles war ok.

Als 2. habe ich dann alle Tabsheet1.tabvisible := ??; ersetzt durch self.Tabvisible[Tabheet1] := ??;

Und das war schon die Änderung in den Units. den Rest habe ich in der Vorfahrenklasse der Fenster gemacht (also der TMyCustomForm)

Wenn wir jetzt ein neues Pagecontrol brauchen verwenden wir halt nicht mehr die Delphi-Klasse TPAgecontrol sondern halt die eigene (TMyPagecontrol)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Eigene Klasse von TTabsheet

  Alt 12. Sep 2013, 14:07
Ich hab mir ein neues Package gemacht.
Gut, darum kommt man wohl nicht herum. Ich dachte, es würde auch ohne gehen.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz