AGB  ·  Datenschutz  ·  Impressum  







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

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
Online

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

AW: Eigene Klasse von TTabsheet

  Alt 10. Sep 2013, 13:27
Deins natürlich, denn das verdeckt das "normale" TTabsheet. Nennt sich, glaube ich, Interposer-Klasse. Probier es doch mal aus, ich habe so etwas eben grade noch mit einem TDBGrid gemacht um ihm seine Scrollbalken zu nehmen: Einfach eine TDBGrid-Interposer-Klasse, der Instanz einmal die Scrollbalken genommen und der Interposer-Klasse die UpdateScrollbars -Methode kaputt gemacht. Funktioniert bestens.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
732 Beiträge
 
Delphi 12 Athens
 
#2

AW: Eigene Klasse von TTabsheet

  Alt 11. Sep 2013, 07:27
Man könnte die TTabsheets erst von Delphi erstellen lassen und dann manuell im Quellcode und in der DFM nach TMyTabsheet ändern.

Nur so eine Idee, nicht ausprobiert.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Eigene Klasse von TTabsheet

  Alt 11. Sep 2013, 07:51
Funktioniert bestens.
Glaube ich Dir, nur sobald man in der Uses-Klausel rumfummelt (oder irgend ein blöder Formatierer), kann es passieren, das plötzlich nicht mehr deine Klasse, sondern die Originalklasse verwendet wird. D.h.: Die korrekte Funktion ist von der Reihenfolge der Units der Uses-Klauses abhängig.

Ich halte es für gefährlich, solche Tricks zu verwenden. Außerdem ist es schwer verständlich.
  Mit Zitat antworten Zitat
Der schöne Günther
Online

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

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
 
#5

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
Online

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

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
 
#7

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
Online

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

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
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 08:07 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