AGB  ·  Datenschutz  ·  Impressum  







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

Panelreheinfolge einhalten.

Ein Thema von Luckner · begonnen am 3. Aug 2016 · letzter Beitrag vom 9. Aug 2016
Antwort Antwort
Seite 2 von 2     12   
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
555 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Panelreheinfolge einhalten.

  Alt 3. Aug 2016, 17:19
Genau das tun die Panels eben nicht tut es eben nicht, das habe ich schon probiert zuvor.

Die Höhe 0 verhindert nicht, dass das Control als solches aktiv weiterlebt. Das ist ein wenig blöd. Man müsste in eine Methode das konkrete Panel reingeben, dann die Controls durchiterieren und den Owner auf den Namen des Panels abfragen. Ganz astrein ist die Methode nicht. Erinnert an eine russische Lösung von weit hinter dem Ural. Aber wenn man den Tabstopp wie zuvor beschrieben abschaltet am versteckten Panel und allen Controls auf die auf demselben angesprungen werden können, dann sollte dieser Hack grad noch durchgehen mit allen Hühneraugen zugedrückt.


Hallo MichaelT, werde mal Dein Tipp mit der Höhe ausprobieren. Wenn ich alle Panals erst invisible mache und da in der richtigen Reihenfolge onTop und visible mache, müsste die an die richtigen Stelle springen? aber ich probiere erst mal die Höhe auf 0 setzen.

Luckner
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
555 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: Panelreheinfolge einhalten.

  Alt 3. Aug 2016, 17:21
Die Panels bleiben Visible, also nicht Visible:=false; setzen.


Hallo MichaelT, leider funktioniert es auch nicht. Es juckt Delphi nicht, ob die Panelhöhe mal auf 0 ist.

Geändert von MichaelT ( 3. Aug 2016 um 17:27 Uhr)
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#13

AW: Panelreheinfolge einhalten.

  Alt 3. Aug 2016, 17:36
Oh ja, das sieht gut aus. Werde morgen den Test mit den anderen Panels noch machen. Aber es gibt Hoffnung.

Danke!!!
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#14

AW: Panelreheinfolge einhalten.

  Alt 3. Aug 2016, 17:36
Ich würde bei der Gelegenheit noch den Code etwas übersichtlicher machen, und anstelle der Color das Property "Tag" nehmen. Wobei das "Tag" auch keine perfekte Lösung ist

Delphi-Quellcode:
procedure TFrameArtikel.Panellinksreihenfolge;

  procedure AdjustPanel(aPanel: TPanel; aButton: TButton);
  const
    PanelHeight: array[boolean] of Integer = (0, 100);
  begin
    aPanel.Height := PanelHeight[aButton.Tag = 0];
    aPanel.Enabled := aButton.Tag = 0;
    aPanel.TabStop := aButton.Tag = 0;
  end;

begin
  AdjustPanel(PanelArtikel, ButtonHaftEtikett);
  AdjustPanel(PanelDienstleistung, ButtonDienstleistung);
  . . . usw.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: Panelreheinfolge einhalten.

  Alt 3. Aug 2016, 22:19
Delphi-Quellcode:
unit Unit2;

interface

uses
  Vcl.Controls;

procedure ReAlignChildControls( AParentControl: TWinControl );

implementation

uses
  System.Types;

procedure ReAlignChildControls( AParentControl: TWinControl );
var
  lIdx : Integer;
  lBounds : TRect;
  lControl: TControl;
begin
  lBounds := AParentControl.ClientRect;

  for lIdx := 0 to AParentControl.ControlCount - 1 do
    begin
      lControl := AParentControl.Controls[ lIdx ];

      if not lControl.Visible
      then
        Continue;

      case lControl.Align of
        alTop:
          begin
            lControl.Top := lBounds.Top;
            lBounds.Inflate( 0, -lControl.Height, 0, 0 );
          end;
        alBottom:
          begin
            lControl.Top := lBounds.Bottom - lControl.Height;
            lBounds.Inflate( 0, 0, 0, -lControl.Height );
          end;
        alLeft:
          begin
            lControl.Left := lBounds.Left;
            lBounds.Inflate( -lControl.Width, 0, 0, 0 );
          end;
        alRight:
          begin
            lControl.Left := lBounds.Right - lControl.Width;
            lBounds.Inflate( 0, 0, -lControl.Width, 0 );
          end;
      end;
    end;
end;

end.
Die Ausrichtung erfolgt anhand der Z-Order (kann man über TControl.BringToFront oder TControl.SendToBack beeinflussen).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#16

AW: Panelreheinfolge einhalten.

  Alt 9. Aug 2016, 14:22
Hallo MichaelT,

also es funktioniert nicht. Wenn ich die Höhe mal auf 0 setze, dann auf die benötigte Grösse, dann bleiben die Panels dort wo ich sie in der Form gesetzt haben. Die sollen jedoch die Position in der richtigen Reihefolge wechseln, je nach dem welche Panel davor sichtbar sind. wenn ich noch die Eigenschalt alTop setze, dann legt mir das Programm die Panels zum Teil übereinander. Werde mir den Vorschlag von Sir Rufo vornehmen und versuchen den zu verstehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:11 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