Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigene Form-Nachfolge-Klasse in der IDE (https://www.delphipraxis.net/118189-eigene-form-nachfolge-klasse-der-ide.html)

Sereby 2. Aug 2008 13:41


Eigene Form-Nachfolge-Klasse in der IDE
 
Hi,

also mir geht es darum meine eigene abgeleitete Form-Klasse (TFormX) bereits während dem Designen in der IDE (Delphi 2007) benutzen zu können.

Also dass ich im Objektinspector meine eigenen Eigenschaften sehe wenn ich die Hauptform auswähle.

Das problem ist soweit ich das sehen konnte, das
Delphi-Quellcode:
Application.CreateForm(TfrmGUI, frmGUI);
denn da wird TForm als FormTyp verwendet und es werden auch eigenschaften gesetzt bzw benutzt auf die Ich nicht zugreifen darf/kann.

Kennt jemand nen Weg das umzusetzen?

MfG Sereby

mkinzler 2. Aug 2008 19:08

Re: Eigene Form-Nachfolge-Klasse in der IDE
 
Du könntest die Formularklasse in die Objektablage ablegen

grenzgaenger 2. Aug 2008 20:18

Re: Eigene Form-Nachfolge-Klasse in der IDE
 
oder 'ne eigene kompo von TForm ableiten und installieren.

Hansa 2. Aug 2008 20:58

Re: Eigene Form-Nachfolge-Klasse in der IDE
 
Um welche Eigenschaften geht es überhaupt ? Form <> Komponente. Das sieht zwar alles ähnlich aus, ist es aber nicht ! So wie man Komponenten von geeignetem Vorfahr ableitet, das geht bei Forms so nicht ohne tiefe Eingriffe in die VCL.

Sereby 3. Aug 2008 07:23

Re: Eigene Form-Nachfolge-Klasse in der IDE
 
aaaalso nochmal etwas ausführlicher:

Bisher habe ich bei meinem Hauptformular, bei der FormCreate Routine, die ecken abgerundet.
Nun.. da ich das allerdings schon während der Entwicklung gerne sehen würde, wollte ich halt ne neue Form klasse haben wo extra eigenschaften dafür vorhanden sind womit man das einstellen kann.

Das funktioniert auch wenn ich die Komponente auf die Form ziehe aber wegen Application.Createform kann ich das leider nicht beim Hauptformular benutzen weil der da TForm benutzt!

hier die Unit
Delphi-Quellcode:
unit FormX;

interface
  uses Windows, Classes, Forms;

type
  TFormX = class(TForm)
  private
    FRoundEdges: Boolean;
    FRoundWidth,FRoundHeight: Integer;
    procedure SetRoundEdges(const Value: Boolean);
    procedure SetRoundHeight(const Value: Integer);
    procedure SetRoundWith(const Value: Integer);
  public
    constructor Create(AOwner: TComponent); override;
  protected
    procedure Paint; override;
  published
    property RoundEdges: Boolean read FRoundEdges write SetRoundEdges default False;
    property RoundWidth: Integer read FRoundWidth write SetRoundWith default 40;
    property RoundHeight: Integer read FRoundHeight write SetRoundHeight default 40;
  end;

  procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Sere', [TFormX]);
end;

{ TFormX }

constructor TFormX.Create(AOwner: TComponent);
begin
  inherited;
  FRoundEdges := False;
  FRoundWidth := 40;
  FRoundHeight := 40;
end;

procedure TFormX.Paint;
var REGN: HRGN;
begin
  inherited;
  if FRoundEdges then
  begin
    //ecken abrunden
    REGN := CreateRoundRectRgn(0,0,Width,Height,FRoundWidth,FRoundHeight);
    SetWindowRgn(Handle, REGN, True);
  end;
end;

procedure TFormX.SetRoundEdges(const Value: Boolean);
begin
  if (FRoundEdges <> Value) then
  begin
    FRoundEdges := Value;
    Invalidate;
  end;
end;

procedure TFormX.SetRoundHeight(const Value: Integer);
begin
  if (FRoundHeight <> Value) then
  begin
    FRoundHeight := Value;
    Invalidate;
  end;
end;

procedure TFormX.SetRoundWith(const Value: Integer);
begin
  if (FRoundWidth <> Value) then
  begin
    FRoundWidth := Value;
    Invalidate;
  end;
end;

end.

mkinzler 3. Aug 2008 08:03

Re: Eigene Form-Nachfolge-Klasse in der IDE
 
Das kannst du aber ändern

Sereby 3. Aug 2008 09:40

Re: Eigene Form-Nachfolge-Klasse in der IDE
 
was meinst du?

WIE kann ich das hauptformular bzw die eigenschaften auf ALLE Formulare übertragen?

mkinzler 3. Aug 2008 09:53

Re: Eigene Form-Nachfolge-Klasse in der IDE
 
Wie ich oben geschrieben habe: lege das Formular in der Objektablage ab

rotfc 3. Aug 2008 10:09

Re: Eigene Form-Nachfolge-Klasse in der IDE
 
Zitat:

Zitat von Sereby
was meinst du?

WIE kann ich das hauptformular bzw die eigenschaften auf ALLE Formulare übertragen?

Mit meinem D5 geht das nicht "automatisch" oder gar bequem ;-)

Ich muss jedes meiner Formulare in die IDE laden und das Form.Create ändern. Dabei vergesse ich schon gerne mal die (alle) dynamisch erzeugten Formulare.

Beim Testen meiner Echse merke ich dann, welche Forms ich noch nicht "überarbeitet" habe.

Mit neueren Delphis (>5) lässt sich das vielleicht automatisieren, aber ein mieses/fieses Kommandozeilenwerkzeug kann das "Stringreplace" auch ;-)

Backups sind hin und wieder ganz nützlich ;-)

Sereby 3. Aug 2008 13:02

Re: Eigene Form-Nachfolge-Klasse in der IDE
 
@rotfc:
ich glaub du verstehst nicht worauf ich hinaus will..
in der fertigen anwendung funktioniert das mit dem manuellen eintragen bei FormCreate ja aer das is ja nicht was ich möchte..

Ich möchte diese Einstellmöglichkeiten im Objektbrowser ändern können und die Änderungen direkt beim Entwickeln in der IDE sehen können ohne die Anwendung zu starten.. also zu der zeit wo du Buttons auf der Form platzierst! Das manuelle mit FormCreate möchte ich vermeiden.

Daher habe ich die eigene Form Klasse geschrieben und möchte z.B. das hauptformular damit ersetzen aber das geht nicht soo einfach bzw garnich weil Application.CreateForm(TfrmGUI, frmGUI) TForm und nicht meine Klasse benutzt!
Genau deswegen habe ich den Thread hier gestartet um zu erfahren wie ich das wie oben beschrieben bewältigen kann. Nix mit Dynamisch erstellen oder Suchen & Ersetzen..

@mkinzler:
kannst du das etwas ausführlicher beschreiben? ich habe die .pas datei und die hab ich dem package dclusr hinzugefügt.. wenn ich das dann der objektablage hinzufüge sowie ich das durch googeln erfahren habe wies geht mache dann kommen recht viele fehlermeldungen beim erstellen von einem neuen projekt :)

bitte kläre mich auf


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:03 Uhr.
Seite 1 von 2  1 2      

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