Panel inhalt und Panel selbst löschen ?

Rund um die LCL und andere Komponenten
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Panel inhalt und Panel selbst löschen ?

Beitrag von pluto »

Hallo,
ich versuche verzweifelt einen Panel zu löschen, aber es klappt einfach nicht.

erstellen tue ich ihn so:

Code: Alles auswählen

procedure TForm1.AddPanel(PCaption:String);
var
  pl,pl1,pl2:TPanel;
  i:Integer;
  sp,sp1,sp2,sp3:TSpeedButton;
  lb,lb1:TLabel;
  ed:TEdit;
  vst:TVirtualStringTree;
begin
  inc(Index);
  SetLength(PL_Liste,high(PL_Liste)+2);
 
  pl:=TPanel.Create(ScrollBox1); pl.Parent:=ScrollBox1;
  pl.Left:=0; pl.Top:=0; pl.Width:=308; pl.Height:=406;
 
  // Das Erste Panel wird erstellt
  pl1:=TPanel.Create(pl); pl1.Parent:=pl; pl1.Visible:=True;
  pl1.left:=0; pl1.top:=0; pl1.Width:=306; pl1.Height:=24;
  pl1.Align:=alTop;
 
// Komponenten zum Erste Panel hinzufügen
 
  // Die Speed Buttons werden erstellt
  sp:=TSpeedButton.Create(pl1); sp.Parent:=pl1; sp.Caption:='&X';
  sp.Left:=280; sp.Top:=0; sp.Width:=23; sp.Height:=22; sp.tag:=1;
  sp.OnClick:=@SPClick;
 
  sp1:=TSpeedButton.Create(pl1); sp1.Parent:=pl1; sp1.Caption:='&M';
  sp1.Left:=253; sp1.Top:=0; sp1.Width:=23; sp1.Height:=22; sp1.tag:=2;
  sp1.OnClick:=@SPClick;
 
  sp2:=TSpeedButton.Create(pl1); sp2.Parent:=pl1; sp2.Caption:='&V';
  sp2.Left:=225; sp2.Top:=0; sp2.Width:=23; sp2.Height:=22; sp2.Tag:=3;
  sp2.OnClick:=@SPClick;
  // Label wird erstellt
  lb:=TLabel.Create(pl1); lb.Parent:=pl1; lb.Caption:='Titel leiste';
  lb.Left:=0; lb.Top:=0; lb.Width:=225; lb.Height:=17;
 
// Komponenten zum zweiten Panel hinzufügen
  pl2:=TPanel.Create(pl); pl2.Parent:=pl; pl2.Visible:=True;
  pl2.left:=0; pl2.top:=25; pl2.Width:=306; pl2.Height:=60;
  pl2.Align:=alTop;
 
  lb1:=TLabel.Create(pl2); lb1.Parent:=pl2; lb1.Caption:='Verzeichnis';
  lb1.Left:=6; lb1.Top:=4; lb1.Width:=83; lb1.Height:=17;
 
  ed:=TEdit.Create(pl2); ed.Parent:=pl2;
  ed.Left:=6; ed.Top:=23; ed.Width:=271; ed.Height:=25;
 
  sp3:=TSpeedButton.Create(pl2); sp3.Parent:=pl2; sp3.Caption:='...';
  sp3.Left:=277; sp3.Top:=23; sp3.Width:=23; sp3.Height:=22; sp3.tag:=4;
  sp3.OnClick:=@SPClick;
// VST zum hintergrund Panel hinzufügen
  vst:=TVirtualStringTree.Create(pl); vst.Parent:=pl;
  vst.left:=6; vst.top:=90; vst.Width:=290; vst.Height:=300;
  vst.ScrollBarOptions.AlwaysVisible:=True;
//  pl_liste[high(PL_Liste)]:=pl;
end;
und löschen tue ich ihn so:

Code: Alles auswählen

// Verarbeitet alle SP onclick Ereignisse
procedure TForm1.SPClick(Sender:TObject);
var
  str:String;
  t,i:Integer;
  pl1:TPanel;
begin
  t:=(Sender as TSpeedButton).Tag;
 
  case t of
    1: begin
        pl1:=pl_liste[0];
 
        for i:=pl1.ControlCount-1 downto 0 do
          pl1.RemoveControl(Controls[i]);
 
        pl1:=NIL;
 
        TPanel(ScrollBox1.Controls[0]).Destroy;
 
       end; // X Button
 
    2: begin
 
       end; // M Button
 
    3: begin
 
       end; // V Button
 
    4: begin
 
       end; // ... Button
  end;
end;
egal was ich mache es kommt immer eine Zugriffs Verletzung.
Ich weiß einfach nicht mehr weiter.

Mein ziel ist es den Panel über ein Button der auf dem Panel zu löschen.

evlt. ist genau da das Problem.
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Button auf demselben Panel?

Das wird so nicht gehen. Wenn das Panel weg ist, ist auch der Rücksprungpunkt wech. Das kann man nur mit FreeAndNil machen. Von Außen gehts ganz einfach. Panel.Parent:= nil, und wech isses.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

naja das ziel wahr es eigentlich mit dem Button auf dem Panel wie bei einer Titel Leiste bei From.

Das Problem ist, eigentlich brauche ich für ein Projekt, MDI Fenster und die gibt es ja noch nicht.
Normale Fenster haben das Problem das sie auf dem Gestammten Bildschirm Verschielbar sind.

Wobei, mir fält gerade ein, ein From müsste ja auch eine Parent Eigenschaft haben oder ?
in Delphi konnte ich ein From auf ein Panel legen.

Danke für den Tipp. Das Probiere ich gleich mal aus.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ja haben Sie das ist unter Windows noch mit Vorsicht zu geniessen.
MDI wird es übrigends wahrscheinlich auch nie geben. Da es nicht auf allen Plattformen verfügbar ist.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6857
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Normale Fenster haben das Problem das sie auf dem Gestammten Bildschirm Verschielbar sind.
Was wäre, wenn Du ganz einfach die Positionierung einschränkst :-) Dann sieht es aus, als wäre es schon fast ein bischen MDI.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@Christian
doch es gibt ein Packte, für Lazarus, aber es hatte irgend ein hacken, deshalb nutzte ich es auch nicht.

ich habe das Probiert mit Form4.Parent es wird leider keine Titelleiste angezeigt. In der ersten Version werde ich auf das Verschieben versichten die Panels werden einfach nebeneinander und untereinander angezeigt. Auto.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Es gibt ein paket das auf TPanel basis versucht MDI fenster zu emulieren aber ich seh das mehr als Plutoreanische Lösung an.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ja...ist ein netter Ansatz, aber es sieht doch etwas gewöhnungsbedürftig aus.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

naja, eigentlich müsste man doch einfach nur beim neuen MDI Form sagen, du gehörst jetzt zu Form1 und währe doch diese MDI effekt da.

Aber die Titelleiste müsste noch gezeichnet werden.
so ganz verstehe ich auch nicht, warum das Plattform abhängig sein soll(te)
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Naja, so einfach ist es scheinbar eben nicht, sonst wäre es wohl schon längst drin, selbst wenn die optik stimmt, was man ja noch zeichen kann, aber das Verhalten sollte ja auch ner MDI-Form entsprechen und daran wirds wohl scheittern.

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Das dürfte wohl auch eher was mit dem Docking zu tun haben. MDI wird wohl bei den meisten Desktops klappen. Obwohl ich insgesamt nicht viel von MDI halte. Besonders übersichtlich ist das am Ende nicht.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Dann muss der Programmierer dafür sorgen das es übersichtlich wird/ist.

ich finde es auch nicht gerade übersichtlich wenn ich von einem Programm 100 Instanzen brauche.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wiso willst du ne Titelleiste bauen ? TForm hat doch ne Titelleiste auch wenn du ihm ein Parent zuweist...
Aber ich stimme Schnuller hier mal zu ich find es auch nicht so toll.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

TForm hat doch ne Titelleiste auch wenn du ihm ein Parent zuweist.
Leider nicht. Ich habe versucht den Parent auf eine TScrolbox zu stellen. und da wahr keine Titelleiste.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

also solange man formstyle nicht auf fsNone hat sollte das klappen zumindest unter windoof gehts
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten