Delphi-PRAXiS

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 Events von untergeordneter Komponente werden nicht angezeigt (https://www.delphipraxis.net/148009-events-von-untergeordneter-komponente-werden-nicht-angezeigt.html)

IIIMADDINIII 20. Feb 2010 15:48


Events von untergeordneter Komponente werden nicht angezeigt
 
Hallo mein Vater hat ein Problem.

Beim Erstellen einer eigenen Komponente (Tdateiformat) hat er Komponenten kreiert deren Funktion
es ist einen Dateibrowser darzustellen. Nun hat er die Komponenten im Objektinspektor dargestellt aber die dazugehörigen Events fehlen.

Hier ist der Code zu der Komponente:
Delphi-Quellcode:
unit dateiformat;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, FileCtrl;

type
  Tdateiformat = class(TCustomControl)
  private
    { Private declarations }
    con_filename: string;
    con_anz: integer;
    con_strings: Tstrings;
    con_openstndformat: boolean;
    con_drivecombobox: tdrivecombobox;
    con_directorylistbox: tdirectorylistbox;
    con_filtercombobox: Tfiltercombobox;
    con_filelistbox: Tfilelistbox;
  protected
  procedure paint; override;
    { Protected declarations }
  public
    { Public declarations }
    constructor create(aowner: tcomponent); override;
    procedure setfilename(filename: string); virtual;
    procedure setopenstndformat(openstndformat: boolean); virtual;
    procedure setstrings(strings: Tstrings); virtual;
    function openfile(filename: string = ''): boolean;
    procedure openusr(filename: string);
    procedure openusp(filename: string);
    procedure openspe(filename: string);
    procedure opendat(filename: string);
  published
     property align;
     property openstndformat: boolean read con_openstndformat write setopenstndformat;
     property filename: string read con_filename write setfilename;
     property anz: integer read con_anz;
     property strings: Tstrings read con_strings write setstrings;
     property Filelistbox: TFilelistbox read con_Filelistbox;
     property filtercombobox: Tfiltercombobox read con_filtercombobox;
     property directorylistbox: Tdirectorylistbox read con_directorylistbox;
     property drivecombobox: Tdrivecombobox read con_drivecombobox;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Tdateiformat.openusr(filename: string);
begin
  //
end;

procedure Tdateiformat.openusp(filename: string);
var
  filn: Tstringlist;
begin
  filn := Tstringlist.Create;
  filn.LoadFromFile(filename);
  con_strings := filn;
end;

procedure Tdateiformat.openspe(filename: string);
begin
  //
end;

procedure Tdateiformat.opendat(filename: string);
begin
  //
end;

function tdateiformat.openfile(filename: string = ''): boolean;
begin
  result := true;
  if filename = '' then filename := con_filelistbox.FileName;
  if not fileexists(filename) then
  begin
    result := false;
    halt;
  end;
  if con_openstndformat = false then openusr(filename)
  else
  begin
    if uppercase(extractfileext(filename)) = '.USP' then openusp(filename)
    else if uppercase(extractfileext(filename)) = '.SPE' then openspe(filename)
    else if uppercase(extractfileext(filename)) = '.DAT' then opendat(filename)
    else if uppercase(extractfileext(filename)) = '.TXT' then openusr(filename)
    else openusr(filename);
  end;
end;

procedure tdateiformat.paint;
begin
 con_drivecombobox.SetBounds(0, 0, round(0.25 * self.Width), 10);
 con_filtercombobox.SetBounds(0, con_drivecombobox.Height + con_directorylistbox.Height, round(0.25 * self.Width), 10);
 con_directorylistbox.SetBounds(0, con_drivecombobox.Height, round(0.25 * self.Width), self.Height - con_drivecombobox.Height - con_filtercombobox.Height);
 con_filelistbox.SetBounds(con_drivecombobox.Width, 0, round(0.75 * self.Width), self.Height);
end;

procedure Tdateiformat.setstrings(strings: Tstrings);
begin
  con_strings.Assign(strings);
  repaint;
end;

procedure Tdateiformat.setopenstndformat(openstndformat: boolean);
begin
  con_openstndformat := openstndformat;
  repaint;
end;

procedure Tdateiformat.setfilename(filename: string);
begin
  con_filename := filename;
  con_drivecombobox.Drive := extractfiledrive(filename)[1];
  con_directorylistbox.Directory := extractfiledir(filename);
  con_filelistbox.FileName := filename;
  repaint;
end;

constructor tdateiformat.create(aowner: tcomponent);
begin
  inherited create(aowner);
  con_drivecombobox := tdrivecombobox.Create(self);
  con_drivecombobox.Parent := self;
  con_directorylistbox := tdirectorylistbox.Create(self);
  con_directorylistbox.Parent := self;
  con_filtercombobox := tfiltercombobox.Create(self);
  con_filtercombobox.Parent := self;
  con_filelistbox := tfilelistbox.Create(self);
  con_filelistbox.Parent := self;
  con_drivecombobox.DirList := con_directorylistbox;
  con_directorylistbox.FileList := con_filelistbox;
  con_filtercombobox.Filter := 'USP-Datei|*.usp|SPE-Datei|*.spe|DAT-Datei|*.dat|TXT-Datei|*.txt|Alle Datein|*';
  con_filtercombobox.FileList := con_filelistbox;
  con_strings := Tstrings.Create;
  repaint;
end;

procedure Register;
begin
  RegisterComponents('Standard', [Tdateiformat]);
end;

end.

Uwe Raabe 20. Feb 2010 16:25

Re: Events von untergeordneter Komponente werden nicht angez
 
Welche Events fehlen denn? So wie ich das sehe, deklariert die Komponenente gar keine Events. Sollte es sich dagegen um Events aus TControl/TCustomControl handeln, so müssen diese in der abgeleiteten Komponente als published deklariert werden, damit sie im Object-Inspektor angezeigt werden. Dabei können die Getter und Setter weggelassen werden.

Z.B.

Delphi-Quellcode:
published
  property OnEnter: TNotifyEvent;
  property OnExit: TNotifyEvent;

SirThornberry 20. Feb 2010 17:02

Re: Events von untergeordneter Komponente werden nicht angez
 
Der Typ wird doch auch mit weg gelassen oder nicht?!
Z.B.
Delphi-Quellcode:
published
  property OnEnter;
  property OnExit;

daywalker9 20. Feb 2010 17:04

Re: Events von untergeordneter Komponente werden nicht angez
 
Richtig SirThornberry

IIIMADDINIII 20. Feb 2010 17:15

Re: Events von untergeordneter Komponente werden nicht angez
 
Mein Vater möchte nicht die Events von Tcustomcontrol haben, sonder die Events von z.B. Tfilelistbox.

Hawkeye219 20. Feb 2010 18:08

Re: Events von untergeordneter Komponente werden nicht angez
 
Hallo,

die untergeordneten Komponenten müssen als Subkomponenten gekennzeichnet werden:

Delphi-Quellcode:
con_drivecombobox := tdrivecombobox.Create(self);
con_drivecombobox.SetSubComponent (True);
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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