AGB  ·  Datenschutz  ·  Impressum  







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

Composite Control wird nicht dargestellt.

Ein Thema von BAMatze · begonnen am 16. Mär 2009 · letzter Beitrag vom 16. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 09:26
Hallo an alle DPler,

hab wieder mal eine Frage. Habe mir das Tutorial zu composite controls hier angeschaut und versucht dieses nachzuvollziehen. Leider mache ich trotz, dass dort wirklich sehr viel Quellcode gezeigt wird und dieser auch gut kommentiert wird, Fehler, wo ich nicht weiß warum das so ist. Ich stelle euch mal hier einfach meine kurzen Testquellcodes zur Verfügung und hoffe jemand kann mir dort etwas weiter helfen. Mir ist bewusst, dass in dem Tutorial fertige Komponenten benutzt werden und ich diese erstmal nur versuche dynamisch zu erstellen (Vieleicht liegt hier auch der Fehler, weiß ich aber leider nicht).

Hier meine MainForm:
Delphi-Quellcode:

unit TestFensterUnit;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FTestContainer: TTestContainer;
    { Private-Deklarationen }
  public

    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FTestContainer := TTestContainer.Create;
end;

end.
und hier die Unit1, die in Uses eingebunden wurde:

Delphi-Quellcode:

unit Unit1;

interface

uses Classes, StdCtrls, Controls, Graphics;

Type TTestComponente = class(TWinControl)
  private
    FTestLabel: TLabel;
  public
    constructor create(AOwner: TComponent);
end;

Type TTestContainer = class(TPersistent)
  private
    FTestComponente: TTestComponente;
  protected

  public

end;


implementation

constructor TTestComponente.create(AOwner: TComponent);
begin
  inherited create(AOwner);
  Controlstyle := Controlstyle - [csAcceptsControls]; // Der Componente wird nicht erlaubt
                                                      // andere Componenten aufzunehmen,
                                                      // als die, die durch den Programmierer
                                                      // hier einprogrammiert werden.


  Visible := true;
  width := 300;
  height := 200;
  Color := clBlack; // <-- diese Zeile wurde eingeschoben, um zu sehen, ob das
                    // Composite Controll wirklich auf der Form erzeugt wird.
                    // Da sich kein Teil von der Form schwarz färbt, kann ich
                    // wohl davon ausgehen, dass dies nicht der Fall ist.
                    // WARUM?

  // TestLabel initialisieren
  FTestLabel := TLabel.create(Self);
  with FTestLabel do
    begin

      Parent := Self;
      Visible := true;
      Caption := 'Hallo';
      Left := 10;
      Top := 10;
    end;

  

end;

end.
Kompilieren und ausführen lässt sich der Code bei mir ohne Probleme, nur das erwartete Ergebnis (am Anfang hab ich gehoft das Label mit dem Text "Hallo" zu sehen, als das fehl schlug, hab ich das Control einfach in der kommentierten Zeil komplett
schwarz gemacht) blieb aus.

Vielen Dank
BAMatze

Edit1: Habe den Hinweis von HDeddy berücksichtigt und hier schon in dem Quelltext verbessert. Danke dafür, leider keine Verbesserung des Ergebnisses.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 09:30
Das erste, was mir auffällt:
Delphi-Quellcode:
with FTestLabel do
    begin
      Create(Self);
Das müsste ja wohl eher so heißen:
Delphi-Quellcode:
FTestLabel := TLabel.Create(Self);
with FTestLabel do
    begin
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 09:49
hmm daran lag es leider nicht, hab es aber eingebaut, siehe #1.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 09:51
Und so?
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  FTestContainer := TTestContainer.Create(self);
  FTestContainer.Parent := self;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 10:02
Das TWinControl stellt keine Eigenschaft Parent zur Verfügung. Kann ich diese als Property nachprogrammieren?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 10:11
Zitat von BAMatze:
Das TWinControl stellt keine Eigenschaft Parent zur Verfügung.
Es erbt doch die Parent-Property von TControl.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 10:28
Also laut Hilfe hat das TWinControl einen Member Parent. Wenn ich aber versuche TTestContainer.Parent in der FromCreat-procedure für die Form zu setzen bekomme ich immer die Meldung, dass es sich dabei um einen undefinierten Bezeichner handelt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 10:31
Nach nochmaligem genauen Hinsehen stimmt das sogar.
Zitat:
Type TTestContainer = class(TPersistent)
Der Container ist ja auch kein TWinControl.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 10:38
Stimmt siehst du eventuell noch einen anderen Fehler @HDeddy? In dem Tutorial wird der Container auch von TPresistent abgeleitet, nur wie gesagt, der Hersteller des Tuts hat die Komponente schon als eigenständige Komponente erstellt. Es wird aber gesagt, dass es im Endeffekt ähnlich der dynamischen Erstellung wäre (kein genaues Zitat, nur sinngemäß (wie ich es verstanden habe) wiedergegeben).
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Composite Control wird nicht dargestellt.

  Alt 16. Mär 2009, 10:45
Müsste nicht im Konstruktor der Containerklasse die Testkomponente instanziert werden? Davon kann ich im obigen Code nichts entdecken. Setz doch einfach mal einen Breakpoint auf den Konstruktor der Testkomponente, wenn Du keinen Code unterschlagen hast, dürfte der gar nicht durchlaufen werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:02 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