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 JvPanel zur Laufzeit skalieren (https://www.delphipraxis.net/165204-jvpanel-zur-laufzeit-skalieren.html)

Jens Hartmann 18. Dez 2011 13:11

JvPanel zur Laufzeit skalieren
 
Hallo und einen schönen Sonntag zusammen,

ich habe ein Form mit mehreren gleichgroßen JvPanel Komponenten. Ich möchte diese zur Laufzeit skalieren können. Das geht auch soweit ohne Problem. Jetzt kommt das was ich bislang noch nicht hinbekommen habe. Ändere ich die Größe von z.B. Panel1, sollen alle anderen Panels ebenfalls gleichmäßig mit "Größer" oder "Kleiner" werden.
Die Panels werden zur Laufzeit auch erst erstellt. Das heißt, ich muss der Methode eine Prozedure zuweisen.

Delphi-Quellcode:
private
  //Methoden zu JvPanel
  procedure PanelSetWidth(Sender: TObject; ChangedSize: Integer);
  procedure PanelSetHeight(Sender: TObject; ChangedSize: Integer);

...
//Erstellen der Panels zu Laufzeit
  Panels[i] := TJvPanel.Create(Self);
  with Panels[i] do
    begin
      Name := 'p'+IntToStr(i);;
      Parent := ParentPan;
      Align := alClient;
      Height := KPanelHeight;
      Width := KPanelWidth;
      Caption := IntToStr(i);
      Sizeable := True;
      OnChangedWidth := PanelSetWidth;
      OnChangedHeigth := PanelSetHeigth;
      TabOrder := i;
    end;
Das Problem ist, ich kann das entsprechenden Panel skalieren, allerdings wird die Methode OnChangeWidth und OnChangeHeigth nie aufgerufen. Selbst wenn ich eine Komponente zur Entwurfszeit auf die Form legen und z.B. ein ShowMessage('Größe geändert'); in die Methode eintrage. Es passiert nichts. Kennt jemand vieleicht das Problem?

Gruß Jens

mkinzler 18. Dez 2011 13:16

AW: JvPanel zur Laufzeit skalieren
 
Versuzch es mal ohne with

Jens Hartmann 18. Dez 2011 13:19

AW: JvPanel zur Laufzeit skalieren
 
Zitat:

Zitat von mkinzler
Versuzch es mal ohne with

Was soll das bringen, selbst bei zur entwurfszeit erstellten Panels, wird die Methode nich gefeuert...

Bummi 18. Dez 2011 13:21

AW: JvPanel zur Laufzeit skalieren
 
Du musst eine Prozedur zuweisen die erreichbar ist

Delphi-Quellcode:
  TForm1 = class(TForm)
    JvPanel1: TJvPanel;
    procedure JvPanel1ChangedHeight(Sender: TObject; ChangedSize: Integer);
//......

procedure TForm1.JvPanel1ChangedHeight(Sender: TObject; ChangedSize: Integer);
begin
 //CODE
end;

Jens Hartmann 18. Dez 2011 13:25

AW: JvPanel zur Laufzeit skalieren
 
Zitat:

Zitat von Bummi
Du musst eine Prozedur zuweisen die erreichbar ist

Warum sollte meine Prozedur nicht ereichbar sein.
Delphi-Quellcode:
private
//Ist in der selben Unit, ansonsten könnte ich ja nicht kompilieren...
Wie gesagt, selbst bei zur Entwurszeit auf die Form gelegten Komponenten wird die Prozedur nicht ausgelößt..

Gruß Jens

Bummi 18. Dez 2011 13:54

AW: JvPanel zur Laufzeit skalieren
 
dann muss es irgendwo ein Missverständnis geben, das hier funktioniert ....
Delphi-Quellcode:
procedure TForm1.JvPanel1ChangedHeight(Sender: TObject; ChangedSize: Integer);
begin
  Showmessage(IntToStr(ChangedSize));
end;

procedure TForm1.JvPanel1Click(Sender: TObject);
begin
   JvPanel1.Height := JvPanel1.Height + 10;
end;

Jens Hartmann 18. Dez 2011 14:01

AW: JvPanel zur Laufzeit skalieren
 
Ich weiß, das geht. Da Du die Höhe hier durch das OnClick beeinflussen tust.

Du kannst aber die Größe ja auch bei der Eigenschaft
Delphi-Quellcode:
Sizeable := True;
über die Maus mit ziehen im unteren Bereich einstellen. Dabei passiert nichts..

Bummi 18. Dez 2011 14:26

AW: JvPanel zur Laufzeit skalieren
 
OK, jetzt habe ich verstanden wo es hängt ....
Delphi-Quellcode:

  TForm1 = class(TForm)
    JvPanel1: TJvPanel;
    procedure JvPanel1ChangedHeight(Sender: TObject; ChangedSize: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TJvPanel }

procedure TJvPanel.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
  inherited;
  if Assigned(OnChangedHeight) then OnChangedHeight(Self,AHeight);

end;

procedure TForm1.JvPanel1ChangedHeight(Sender: TObject; ChangedSize: Integer);
begin
  Caption := (IntToStr(ChangedSize));
end;

Jens Hartmann 19. Dez 2011 07:08

AW: JvPanel zur Laufzeit skalieren
 
Zitat:

Zitat von Bummi
Delphi-Quellcode:
procedure TJvPanel.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
 begin
   inherited;
     if Assigned(OnChangedHeight) then OnChangedHeight(Self,AHeight);
end;

Wie kann ich SetBounds einbinden. Bei mir wird das Fehler erkannt.
Ich muss allerdings gestehen, noch nie eine Prozedur mit dem Aufruf
Delphi-Quellcode:
inherited
aus einer anderen Klasse genutzt zu haben.

Gruß Jens

Bummi 19. Dez 2011 07:21

AW: JvPanel zur Laufzeit skalieren
 
Delphi-Quellcode:
type

  TJvPanel=Class(JVPanel.TJvPanel)
        procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer);override;
  End;

  TForm1 = class(TForm)
    JvPanel1: TJvPanel;
    procedure JvPanel1ChangedHeight(Sender: TObject; ChangedSize: Integer);
  private
    { Private-Deklarationen }
.................
................


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