Einzelnen Beitrag anzeigen

Dr_C

Registriert seit: 13. Jul 2003
6 Beiträge
 
#1

Eigenes Visueles Komponent mit zus. Formular

  Alt 23. Mär 2014, 21:11
Delphi-Version: 7
Ich bin dabei eigenes Komponent erstellen , der unteranderen ein Button beinhaltet.
Der button öffnet ein Formular . Auf ersten Blick scheint dass alles funktionieret , aber es gibt ein ABER :

In der Form , wo man den Komponent benutzt wird folgendes hinzugefügt :
Delphi-Quellcode:
  object TestColorChange1: TTestColorChange
    Left = 332
    Top = 108
    Width = 143
    Height = 43
  end
  object TTestFormColorChange
    Left = 0
    Top = 0
    Width = 320
    Height = 240
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
  end
Der erste object ist richtig , aber der 2te soll gar nicht erscheinen.


Das ist vereinvachte code von dem komponent :
TestColorChange.pas
Delphi-Quellcode:
unit TestColorChange;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, StdCtrls, uTestFormColorChange ;

type
  TTestColorChange = class(TCustomControl)
  private
    { Private-Deklarationen }
    CCEdit : TEdit ;
    CCButton : TButton ;
    CCShape : TShape ;
     Fenster : TTestFormColorChange ;
    FOnChange: TNotifyEvent;
    procedure ButtonClick(Sender: TObject);
    procedure EditChange(Sender: TObject);
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
     constructor Create( AOwner: TComponent); Override;
     destructor Destroy; override;
  published
    { Published-Deklarationen }
     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;

procedure Register;

implementation

constructor TTestColorChange.Create(AOwner: TComponent);
begin
  RegisterClass(TTestFormColorChange);

  inherited Create(AOwner);

  Fenster := TTestFormColorChange.Create(Owner);

  CCEdit := TEdit.Create(Self);
  CCButton := TButton.Create(Self);
  CCShape := TShape.Create(Self);

  insertcontrol(CCEdit);
  insertcontrol(CCButton);
  insertcontrol(CCShape);

  CCEdit.Name := name + 'Edit';
  CCEdit.Top := 1 ;
  CCEdit.Left := 1 ;
  CCEdit.Text := name ;
  CCEdit.OnChange := EditChange ;

  CCButton.Name := Name + 'Button' ;
  CCButton.Left := CCEdit.Width +1 ;
  CCButton.Top := 1 ;
  CCButton.Height := CCEdit.Height +1 ;
  CCButton.Width := CCButton.Height ;
  CCButton.Caption := '...';
  CCButton.OnClick := ButtonClick ;

  CCShape.Name := Name + 'Shape';
  CCShape.Top := CCEdit.Height+3 ;
  CCShape.Left := 1 ;
  CCShape.Height := CCEdit.Height ;
  CCShape.Width :=CCEdit.Width + CCButton.Width;
  height := ( CCEdit.Height * 2 ) + 5 ;
  width := CCShape.Width + 2 ;
end;

destructor TTestColorChange.Destroy;
begin
  CCShape.Free;
  CCButton.Free;
  CCEdit.Free;
  Fenster.Destroy ;
  inherited Destroy;

end;

procedure TTestColorChange.EditChange(Sender: TObject);
begin
  if Assigned(FOnChange) then FOnChange(self);
end;

procedure TTestColorChange.ButtonClick(Sender: TObject);
var tmp : string ;
begin
  tmp := CCEdit.text ;
  if Fenster.Execute( tmp ) then
  begin
    CCEdit.text := tmp ;
  end;
end;

procedure Register;
begin
  RegisterComponents('MyTools', [TTestColorChange]);
end;
end.
Das ist der Formular der von den komponent aufgerufen wird :

uTestFormColorChange.pas
Delphi-Quellcode:
unit uTestFormColorChange;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TTestFormColorChange = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
     class function Execute(var Farbe : string ):Boolean;
  end;

var
  TestFormColorChange: TTestFormColorChange;

implementation

{$R *.dfm}


class function TTestFormColorChange.Execute(var Farbe : string ):Boolean;
begin
 with Create(Application) do
 begin
    Result := (ShowModal=mrOK);
    if Result then
    begin
      Farbe := '123456';
    end;
  end;
end;

end.
uTestFormColorChange.dfm
Delphi-Quellcode:
object TestFormColorChange: TTestFormColorChange
  Left = 581
  Top = 263
  Width = 255
  Height = 132
  Caption = 'TestFormColorChange'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object BitBtn1: TBitBtn
    Left = 36
    Top = 60
    Width = 81
    Height = 25
    TabOrder = 0
    Kind = bkCancel
  end
  object BitBtn2: TBitBtn
    Left = 132
    Top = 60
    Width = 81
    Height = 25
    TabOrder = 1
    Kind = bkOK
  end
end
Probleme macht das erst , wenn man diesen Komponent auf Frames benutzt . bei google habe ich nichts gefunden , was mir weiter helfen konnte . Vielleicht jemand von Euch kann mir helfen.

mfg
Arek

Geändert von Dr_C (23. Mär 2014 um 21:19 Uhr)
  Mit Zitat antworten Zitat