Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi mit create erstelltes Panel steuern (https://www.delphipraxis.net/105800-mit-create-erstelltes-panel-steuern.html)

XXcD 30. Dez 2007 13:04


mit create erstelltes Panel steuern
 
Hallo,
ich erstelle ein Panel(Panel2) in einem Panel(Panel1).
Jetzt müsste ich wenn ich auf Panel2 klicke, Panel1 autosize auf false setzen und height auf 19.
Wie kann ich das am besten anstellen.
Hier noch der code von den Panels:

Delphi-Quellcode:
for j := 0 to FResult.RowsCount - 2 do
begin
Panel1:=TPanel.Create(Scrollbox1);
Panel1.Parent := ScrollBox1;
Panel1.Left := 5;
Panel1.Height := 59;
Panel1.Width := 362;
Panel1.Top := aTop;
Panel1.Caption:='';
Panel1.AutoSize:=true;
Panel1.Color:=clblack;
Panel1.Color:=clblack;

Panel2:=TPanel.Create(Panel1);
Panel2.Parent := Panel1;
Panel2.Left := 0;
Panel2.Height := 17;
Panel2.Width := 359;
Panel2.Top := 0;
Panel2.Caption:=' '+FResult.FieldValuebyname('Title')+' ***geschrieben von '+FResult.FieldValuebyname('from');
Panel2.AutoSize:=false;
Panel2.Color:=clblack;
Panel2.Alignment:=taLeftJustify;
Panel2.OnClick := //Was muss hier hin???
end;

dominikkv 30. Dez 2007 13:13

Re: mit create erstelltes Panel steuern
 
Dir ist klar das du hier ein Speicherleck hast?
Und du brauchst eben eine Event-Prozedure die du dem OnClick zuweist.
Dort kannst du dann Panel1 über das Parent verändern:
Delphi-Quellcode:
(Panel2.Parent as TPanel).bla

XXcD 30. Dez 2007 13:25

Re: mit create erstelltes Panel steuern
 
Hmm ich kriege das irgendwie nicht hin.
Ich müsste das Panel ja über eine externe Prozedure
steuern.
Da ist ja dann nicht mehr Panel2.Parent definiert:

Delphi-Quellcode:
procedure TForm1.Newsausfahren(Sender: TObject);
begin
if (Panel2.Parent as TPanel).AutoSize=true then
begin
(Panel2.Parent as TPanel).Autosize:=false;
(Panel2.Parent as TPanel).Height:=19;
end
else
begin
(Panel2.Parent as TPanel).Autosize:=true;
end;
end;

Apollonius 30. Dez 2007 13:31

Re: mit create erstelltes Panel steuern
 
Ich sehe kein Speicherleck. Die Komponenten werden freigegeben, da du beim Create eine andere Komponente als Parameter angibst, den Owner.

XXcD 30. Dez 2007 18:59

Re: mit create erstelltes Panel steuern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt nochmal nachgedacht wie ich das am besten erklären könnte.

Also ich gebe dem Erstellten Panel die Prozedur Newsausfahren.
Wenn man darauf klickt müssen alle Panels und dem Panel verkleinert werden.
Ich stell mal ein Screen davon rein wie das jetzt aussieht.

XXcD 31. Dez 2007 10:48

Re: mit create erstelltes Panel steuern
 
Ich glaube ich wüßte wie ich das machen kann.
Wenn ich den Panelnamen z.b. als Caption angebe wie kann ich dann für den Panelnamen autsize und height angeben?

Also z.b.

Delphi-Quellcode:
Panelkommplett.name:='Panelkommplett'+i;
Panelheader.caption:='Panelkommplett'+i;
Jetzt müsste ich später Panelheader.caption verwenden um autosize festzulegen aber wie soll das gehen??

Die Muhkuh 31. Dez 2007 10:58

Re: mit create erstelltes Panel steuern
 
Würde es sich nicht mehr anbieten, einen TWebBrowser einzubinden und solche Sachen per HTML zu machen? Oder eine Komponente, die HTML verarbeiten und anzeigen kann.

Ansonsten würde ich einmal eine Komponente schreiben, die das macht, was Du willst und dann diese immer wieder erzeugen und nicht mit mehreren Panels arbeiten.

XXcD 31. Dez 2007 11:04

Re: mit create erstelltes Panel steuern
 
Hmmm kann man denn HTML datein local erzeugen und nutzen??

Edit: Ich glaube ich habe hier was gefunden, was nen wenig daran kommt was ich brauche http://www.delphipraxis.net/internal...t.php?p=783771

XXcD 31. Dez 2007 13:10

Re: mit create erstelltes Panel steuern
 
Hab alles gelöst :-)

Delphi-Quellcode:
procedure TForm1.GetObjectByName(Sender: TObject);
  var
      i: Integer;
  begin
      for i := ScrollBox1.ComponentCount - 1 downto 0 do
      begin
            if Scrollbox1.Components[i] is TPanel then
      if TPanel(Scrollbox1.Components[i]).Name = (Sender as TPanel).Parent.Name then begin
      if TPanel(Scrollbox1.Components[i]).AutoSize = false then begin
        TPanel(Scrollbox1.Components[i]).AutoSize:=true;
      end
      else
      begin
        TPanel(Scrollbox1.Components[i]).AutoSize:=false;
       TPanel(Scrollbox1.Components[i]).Height:=17;
      end;
      end;
      end;
  end;
War eigentlich nicht schwer man muss nur wissen wie es geht.
Und ihr habt mir wirklich weitergeholfen :-D :-D :-D Und einen guten Rutsch ins neue jahr


Jetzt muss ich nur noch rausbekommen wie ich alle Tops der anderen Panels um 50 Pixel verringer.

DeddyH 31. Dez 2007 13:12

Re: mit create erstelltes Panel steuern
 
Falsch:
Zitat:

Delphi-Quellcode:
if (Components[i] as TPanel).Name = 'Panel6' then begin

Richtig:
Delphi-Quellcode:
if (ScrollBox1.Components[i] as TPanel).Name = 'Panel6' then begin
[edit] *Grmpf* wird das einfach wegeditiert ;) [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz