AGB  ·  Datenschutz  ·  Impressum  







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

Eigenen Fenstertyp erstellen/registrieren?

Ein Thema von himitsu · begonnen am 8. Mai 2014 · letzter Beitrag vom 9. Mai 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

Eigenen Fenstertyp erstellen/registrieren?

  Alt 8. Mai 2014, 19:56
Halli Hallo.

Wie kann ich denn nun eigentlich einen eigenen Fenstertyp im Delphi registrieren?
> Nachfahr eines TDataModul, bzw. einer TForm.

Das mit der Objektablage kenn ich, aber das ist ja nicht benutzbar.


Es sollen einfach nur weitere Funktionen (Property und Co.) zu den Basisklassen hinzugefügt werden.
Und diese sollen auch im Objektinspektor konfigurierbar sein.
(irgendwie sollte es dann auch noch möglich, daß man irgendwie bestimmt, welche Komponenten auf der Form/Datenmodul drauf dürfen, bzw, Welche nicht)


Der Formeditor kommt mit Nachfahren von TDataModul garnicht klar und stellt dann z.B. alles so dar, als sei es von TForm abgeleitet, inkl. der falschen Property im OI. (wenn man einfach ein TDataModule erstellt und dann im Editor den Vorfahren manuell anpasst und auch beim Weg über die Objektablage geht es nicht)
Bei einer Form stört es so zwar nicht direkt, aber dennoch fehlen im OI die eigenen Property.

Oder der Formeditor meint nur noch "Fehler beim Erzeugen von Formular: Vorfahr für '...' nicht gefunden.", beim Laden der Unit.
$2B or not $2B

Geändert von himitsu ( 8. Mai 2014 um 20:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Eigenen Fenstertyp erstellen/registrieren?

  Alt 8. Mai 2014, 20:56
Vielleicht object statt inherited im dfm? Schau mal was Jeroen dazu schreibt.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Eigenen Fenstertyp erstellen/registrieren?

  Alt 8. Mai 2014, 21:09
Nee, mit inherited würde es zwar vererbt, aber der OI kennt dennoch keines der Properties.

Diese Art der Vererbung ist leider nur benutzbar, für Komponenten, welche drauf liegen und da gibt es nichts.


Ach ja, das "Vorfahr nicht gefunden" kommt, wenn es zu der Basisklasse keine DFM gibt.
$2B or not $2B

Geändert von himitsu ( 8. Mai 2014 um 21:29 Uhr)
  Mit Zitat antworten Zitat
D-User

Registriert seit: 19. Dez 2006
Ort: NRW
56 Beiträge
 
#4

AW: Eigenen Fenstertyp erstellen/registrieren?

  Alt 8. Mai 2014, 21:38
Bzgl TDatamodul ( nicht TForm ) mein Wissensstand:
das ist in Bug, in D7 hatte das noch funktioniert,
in D2010 nicht mehr. Hatte ich reklamiert, gab auch andere in QC
die das Problem hatten.
Irgendwie schien das nicht dringend genug, ich fands extrem ärgerlich.

Ich fänd vererbbare DMs schon sehr praktisch (waren sie auch in D7)hatte mir da schon ein
recht weit entwickeltes Basismodul zusammengebastelt das ich dann
leider umbauen musste.

Habe das für mich so gelöst, dass ich die Funktionalität in
Komponenten ausgelagert habe.

Vllt können ja auch ein paar Leute auf QC Druck machen,
vererbbare DMs wären mMn designmäßig schon sehr angebracht.

Wie es jetzt damit in ganz aktuellen D's aussieht weiss ich nicht,
wäre interessant zu erfahren.

Die Pluimers-Lösung ist mMn halt eine Spezial-Lösung, kein echter
Ersatz für ein vererbbares DM.



>Es sollen einfach nur weitere Funktionen (Property und Co.) zu den
>Basisklassen hinzugefügt werden.
>Und diese sollen auch im Objektinspektor konfigurierbar sein.

Das wäre wohl mit Komponenten gegeben.

PS:
den Titel "Eigenen Fenstertyp erstellen/registrieren"
find ich ein bisschen verwirrend, ich denk da an z.B. Windows-Fenstertype mit selbstgemalter Titelbar etc, wie ja in JVCL "angedacht" wurde/wird

Geändert von D-User ( 8. Mai 2014 um 21:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Eigenen Fenstertyp erstellen/registrieren?

  Alt 8. Mai 2014, 22:09
Ja, die Idee, das in eine Komponente auszulagern, hatte ich auch schon, aber als "richtiges" Modul fänd ich es dennoch besser.

Ich brauch praktisch 2 Typen (DatenModul und Fenster), welche z.B. wie TService als Grundlage dienen.


[edit]
Vielleicht hab ich was gefunden, aber es ist wie immer ....... nix Genaues weiß man nicht.
http://docwiki.embarcadero.com/Libra...stomModuleProc

In der DPR speichert die IDE doch den KlassenNamen des Vorfahren, als Kommentar hinter der Unit.
Das Selbe fand dann nochmal, wo es in die DPROJ übernommen wurde, denn es steht auch im OI, wenn man in der Projektverwaltung die Unit anwählt.
In der DPROJ danach gesucht, entdeckte ich es in einem <DesignClass>-Node, das dann nach einer Suchen den VCL-Quellcodes zur OH/Google führte, in der Hoffnung was rauszufinden.

[edit2]
Zitat:
Ein benutzerdefiniertes Modul ermöglicht, dass von anderen Klassen als TForm abgeleitete Container im Formular-Designer erstellt und bearbeitet werden können. Das ist für andere Formulare, wie Container (z.B. Report-Designer), oder für spezialisierte Formulare (z.B. ActiveForm) oder für generische Komponenten-Container (z.B. TDataModule) nützlich.
$2B or not $2B

Geändert von himitsu ( 9. Mai 2014 um 00:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Eigenen Fenstertyp erstellen/registrieren?

  Alt 9. Mai 2014, 00:34
Juhuu, es funktioniert.

Hab die kommentierte Dekumentation im Quellcode entdeckt und angewendet.
$2B or not $2B
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#7

AW: Eigenen Fenstertyp erstellen/registrieren?

  Alt 9. Mai 2014, 15:36
Wo?
Ich wollte mal einen weiteren Anwendungstyp registrieren, hab das nicht gefunden.
Das Template sollte bereitstellen das ein laufen des Projekts als Dienst und als Anwendung möglich ist.
Bisher muss ich das immer per Hand codieren...
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#8

AW: Eigenen Fenstertyp erstellen/registrieren?

  Alt 9. Mai 2014, 16:13
Kannst Du das als Beispiel hier näher erläutern, Himitsu?
Weil das klingt eigentlich total praktisch.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Eigenen Fenstertyp erstellen/registrieren?

  Alt 9. Mai 2014, 16:58
Der Witz dabei ist, daß ich mir grade daraus ein Henne-Ei-Problem bastle.

(mit Hilfe dieses Dings entsteht ein Helper, um nochmal sowas zu erstellen,
was "nett" werden wird, daß die OTA die Interfaceinstanz selber erstellt und mir keine Möglichkeit gibt, da einen Parameter mitzugeben.
Aber zum Glück hilft mir die RTTI beim Hacken der Klasse, wenn das so funktioniert, wie ich es erhoffe.)

Delphi-Quellcode:
uses
  DesignIntf;

type
  TMyCustomModule = class(TBaseCustomModule, ICustomModule)
    constructor Create(Root: TComponent; const Designer: IDesigner); override;
    class function DesignClass: TComponentClass; override;

    function GetAttributes: TCustomModuleAttributes;

    function GetVerbCount: Integer;
    function GetVerb (Index: Integer): string;
    procedure PrepareItem(Index: Integer; const Item: IMenuItem);
    procedure ExecuteVerb(Index: Integer);

    procedure Saving;
    procedure ValidateComponent(Component: TComponent);
    function ValidateComponentClass(ComponentClass: TComponentClass): Boolean;
    function Nestable: Boolean;
  end;

  TMyDataModule = class(TDataModule)
  private
    FMyProp: Integer;
  published
    property MyProp: Integer read FMyProp write FMyProp;
  end;

procedure register;
begin
  RegisterCustomModuleProc(0, TMyDataModule, TMyCustomModule);
end;

constructor TMyDataModule.TMyCustomModule.Create(Root: TComponent; const Designer: IDesigner);
begin
  inherited;
end;

class function TMyDataModule.TMyCustomModule.DesignClass: TComponentClass;
begin
  Result := TMyDataModule;
end;

procedure TMyDataModule.TMyCustomModule.ExecuteVerb(Index: Integer);
begin
  case Index of
    0: ShowMessage('Execute: MyMenuItem');
  end;
end;

function TMyDataModule.TMyCustomModule.GetAttributes: TCustomModuleAttributes;
begin
  Result := [];
end;

function TMyDataModule.TMyCustomModule.GetVerb(Index: Integer): string;
begin
  case Index of
    0: Result := 'MyMenuItem';
    else Result := '';
  end;
end;

function TMyDataModule.TMyCustomModule.GetVerbCount: Integer;
begin
  Result := 1;
end;

function TMyDataModule.TMyCustomModule.Nestable: Boolean;
begin
  Result := False;
end;

procedure TMyDataModule.TMyCustomModule.PrepareItem(Index: Integer; const Item: IMenuItem);
begin
  case Index of
    0: Item.Checked := True;
  end;
end;

procedure TMyDataModule.TMyCustomModule.Saving;
begin
end;

procedure TMyDataModule.TMyCustomModule.ValidateComponent(Component: TComponent);
begin
end;

function TMyDataModule.TMyCustomModule.ValidateComponentClass(ComponentClass: TComponentClass): Boolean;
begin
  Result := True;
end;
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
$2B or not $2B

Geändert von himitsu ( 9. Mai 2014 um 17:03 Uhr)
  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:31 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