Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TPanel.Create PROBLEM!!! (https://www.delphipraxis.net/134819-tpanel-create-problem.html)

DragonDrake 29. Mai 2009 17:00


TPanel.Create PROBLEM!!!
 
Moin,
ich habe Folgendes gemacht:
-ich habe eine Klasse erstellt
-diese Klasse ist eine Unterklasse vom normalen Panel
-ich möchte panels erstellen, in dem ich auf ein schon vorhandenes Panel klicke
-es kommen keine Fehlermeldungen, wenn ich das Programm starte
-PROBLEM: Die Pannels sind unsichtbar, sind aber vorhanden.

hier ist der Quellcode von der Unterklasse, die ich erstellt habe:

------------------------------------------------------------------------------------------------------------------

Delphi-Quellcode:
unit UBluePanel;

interface

uses ExtCtrls,
     Classes,
     Graphics,
     Forms,
     Controls;

type TBluePanel = class(TPanel)
 public
  constructor Create (AOwner: TComponent); override;
 end;

implementation

constructor TBluePanel.Create (AOwner: TComponent);
begin
 inherited Create (AOwner);
 Color := clBlue;
 Caption := 'Blau';
 Height := 40;
 Width := 185;
 BorderStyle := bsNone;
 BorderWidth := 1;
 BevelOuter := bvNone;
 BevelInner := bvRaised;
 BevelWidth := 4;
 Visible := True;
end;

end.
----------------------------------------------------------------------------------------

und in dieser Procedure erstelle ich das BluePanel:

----------------------------------------------------------------------------------------

Delphi-Quellcode:
procedure TFPanels.POwnerClick(Sender: TObject);
begin
 BluePanel := TBluePanel.Create(FPanels);
 BluePanel.Autosize := true;
 BluePanel.Left := 10;
 BluePanel.Top := top1;
 BluePanel.Show; {ich habe auch "BluePanel.Visible := true" ausprobiert}
 BluePanel.Parent := FPanels;
 top1 := top1+50;
end;
-----------------------------------------------------------------------------------------
"top1" ist eine variable, die beim erstellen der Form auf 50 gesetzt wird.

ich habe als Parent vom BluePanel schon alles ausprobiert aber es erscheint eifach nicht.

Ich würde mich sehr über Lösungsvorschläge freuen.

mfg
DragonDrake

[edit=mkinzler]Delphi-Tags eingefügt Mfg, mkinzler[/edit]

Fussball-Robby 29. Mai 2009 17:05

Re: TPanel.Create PROBLEM!!!
 
Eventuell den Parent vor dem Show setzen?

DeddyH 29. Mai 2009 17:07

Re: TPanel.Create PROBLEM!!!
 
Das macht Sinn, außerdem würde ich statt einer benannten Instanz self verwenden.

DragonDrake 29. Mai 2009 21:34

Re: TPanel.Create PROBLEM!!!
 
Ich habe schon alles was es in meinem Programm gibt statt self eingesetzt und nichts funktioniert.
Den Parent hab ich auch mehrmals geändert.
Ich weiß nicht woran das liegt.

Satty67 29. Mai 2009 22:45

Re: TPanel.Create PROBLEM!!!
 
Zitat:

Zitat von DragonDrake
Den Parent hab ich auch mehrmals geändert.

Du hast wie vorgeschlagen auch schon den Parent vorm Aufruf von Show zugewiesen, wie es vorgeschlagen wurde?
Delphi-Quellcode:
procedure TFPanels.POwnerClick(Sender: TObject);
begin
BluePanel := TBluePanel.Create(FPanels);
BluePanel.Parent := FPanels; // Das ist jetzt nach oben gewandert
BluePanel.Autosize := true;
BluePanel.Left := 10;
BluePanel.Top := top1;
BluePanel.Show; {ich habe auch "BluePanel.Visible := true" ausprobiert}
top1 := top1+50;
end;

Luckie 29. Mai 2009 23:16

Re: TPanel.Create PROBLEM!!!
 
Wo wird das Parent im Konstruktor der Klasse gesetzt?

Satty67 29. Mai 2009 23:20

Re: TPanel.Create PROBLEM!!!
 
Zitat:

Zitat von Luckie
Wo wird das Parent im Konstruktor der Klasse gesetzt?

Muss er das, Parent kann doch auch nach Create gesetzt werden?

DragonDrake 30. Mai 2009 10:38

Re: TPanel.Create PROBLEM!!!
 
Man kann leider in den Constructor kein Parent einbauen :wall:

Luckie 30. Mai 2009 10:47

Re: TPanel.Create PROBLEM!!!
 
Also das:
Delphi-Quellcode:
type TBluePanel = class(TPanel)
public
  constructor Create (AOwner: TComponent); override;
end;

implementation

{$R *.dfm}

{ TBluePanel }

constructor TBluePanel.Create(AOwner: TComponent);
begin
  inherited;
  Color := clBlue;
  Caption := 'Blau';
  Height := 40;
  Width := 185;
  BorderStyle := bsNone;
  BorderWidth := 1;
  BevelOuter := bvNone;
  BevelInner := bvRaised;
  BevelWidth := 4;
  Visible := True;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  bp: TBluePanel;
begin
  bp := TBluePanel.Create(Self);
  bp.Parent := Panel1;
end;
Funktioniert bei mir ohne Probleme. Das BluePanel wird dabei auf einem normalen Panel erzeugt.

Welchen Wert hat iTop bei dir? Liegt der eventuell ausserhalb der Form bzw. des Panels auf dem die BluePanels erzeugt werden??

DragonDrake 31. Mai 2009 12:15

Re: TPanel.Create PROBLEM!!!
 
ich kenne jetzt das Problem :spin2: :spin2: :spin2: !!!
BluePanel muss eine lokale Variable sein und darf keine Public wariable sein.

trotzdem danke dass ihr versucht habt das problem zu erkennen.

mfg DragonDrake


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