TPanel's in ScollBox zur Laufzeit erstellen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
skfink
Beiträge: 28
Registriert: Do 20. Dez 2007, 20:39

TPanel's in ScollBox zur Laufzeit erstellen

Beitrag von skfink »

Hallo,
mit folgendem Code möchte ich beliebig viele TPanel (in meinem Delphi Projekt hatte ich TFrame verwendet, aber das geht ja hier leider nicht) in einer ScollBox erstellen.

Code: Alles auswählen

procedure TForm1.create_new_movie_frame(i: integer);
begin
  TPanel.Create(self).Name := 'moviepanel' + IntToStr(i);
  with TPanel(findcomponent('moviepanel' + IntToStr(i))) do
    begin
      parent := ScrollBox1;
      Height := 124;
      align := alTop;
    //  top := height * i;
      tag := i;
      width := ScrollBox1.width;
      if i mod 2 = 0 then
        color := $00DDEEEE
      else
        color := $00BBCCCC;
    end;
end;
Während das in Delphi mit TFrame einwandfrei funktionierte, versteht Lazarus mit TPanel, "TPanel" bereits nicht :shock:

Der Compiler bringt die Fehlermeldung in ZEILE 4: Identifier not found "TPanel"
Aber sogar auf derselben Form habe ich noch ein TPanel.

Keine Ahnung was da los ist. Hoffe jemand kann mir da helfen.
Danke.

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 »

Dann solltest du die ExtCtrls mal in deine Uses Anweisung mit aufnehmen und nicht Fehler suchen wo keine sind ;)

In Delphi würde das übrigends ohne diese unit genausowenig funktionieren. Und statt TFrame kannst du auch TForm in Lazarus nehmen funktioniert genauso.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10926
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Deine Lösung kommt mir etwas seltsam vor.
Wieso machst du's nicht einfach so:

Code: Alles auswählen

procedure TForm1.create_new_movie_frame(i: integer);
var myPanel:TPanel;
begin
myPanel:=TPanel.Create(self);
myPanel.Name := 'moviepanel' + IntToStr(i);
with myPanel do
    begin   
     ...

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 »

Ach und noch was du musst zwingend Parent setzen sonst wirst du nicht viel von deinen panels zu sehn bekommen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

skfink
Beiträge: 28
Registriert: Do 20. Dez 2007, 20:39

Beitrag von skfink »

Christian hat geschrieben:Dann solltest du die ExtCtrls mal in deine Uses Anweisung mit aufnehmen und nicht Fehler suchen wo keine sind ;)
hätte jetzt erwartet dass wenn ich ein TPanel auf die Form ziehe dass Lazarus dann selbst die notwendigen Units einbindet. Wenn ich ExtCtrls einbinde, kann ich das Programm zwar kompilieren, aber dann kommt die Fehlermeldung zur Laufzeit, dass TPanel nicht gefunden wurde. Also noch bevor die Form erscheint.

Christian hat geschrieben:Und statt TFrame kannst du auch TForm in Lazarus nehmen funktioniert genauso.
An die Möglichkeit hatte ich gar nicht gedacht, probier ich mal aus. Gibts Nachteile gegenüber der Benutzung von TFrame? Außer dass TForm mehr Ressourcen als TFrame braucht fällt mir da gar nix ein.

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 »

Lazarus fügt natürlich wenn du ein panel aufs Formular ziehst die Units hinzu aber logischerweise nicht wenn dus zur Laufzeit erzeugst.

Zur laufzeit kommen bei mir wenn ich das versuche auch keine fehlermeldungen da musst du irgendwas schon ganz schön vergewaltigt haben.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

skfink
Beiträge: 28
Registriert: Do 20. Dez 2007, 20:39

Beitrag von skfink »

das is klar, aber wie beschrieben habe ich ja auch zur Design Zeit ein TPanel auf die Form gezogen.

die Fehlermeldung die nach dem kompilieren kommt lautet übrigens:
EClassNotFound, TPanel not found

EDIT: keine Ahnung was da war, nachdem ich das Panel wieder gelöscht habe, ExtCtrls entfernt, kompiliert und wieder ein Panel hinzugefügt habe geht alles so wie geplant.
und wegen der parent Eigenschaft...die ist doch in Zeile 7 gesetzt.

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 »

Hatt ich übersehn...
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 »

Ich habe gelesen das es besser ist die Parent Eigenschaft zum Schluss zu setzten. Das würde geschindigkeits Vorteile bringen. In Lazarus aufjedenfall
und statt left, top, und soweiter manuell zu setzten, einfach die Methode SetBounds. Das bringt noch mehr geschindigkeits Vorteile.

Stat aufjedenfall irgendwo in der Wiki von Lazarus. Bei Tipp und Trick drin.
(sogar auf deutsch)
MFG
Michael Springwald

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Beitrag von piper62 »

Hallo,
ich verwende folgenden Code um zur Laufzeit verschiedene Objekte (nicht nur TLabel) zur Laufzeit auf ein Formular, eine ScrollBox oder ein Panel zu bringen.

with TLabel.Create(fo_forms) do
begin
Name :=v_name;
Parent := ScrollBox1;
Left := strtoint(v_left);
Top := strtoint(v_top);
Height := strtoint(v_height);
Width := strtoint(v_width);
Caption:=v_caption;
Tag:=1;
end;

Gruss,
Tibor

skfink
Beiträge: 28
Registriert: Do 20. Dez 2007, 20:39

Beitrag von skfink »

funktioniert das scrollen bei dir problemlos? Bei mir ist das so dass wenn ich bspw. ein Panel mit einer Höhe von ca 10'000 Pixeln habe, dass die ScrollBox dann (wenn man den Scrollbalken benutzt) nicht bis nach ganz unten scrollt. Man kann dann einfach weiter mit dem mouse wheel scrollen, aber ist halt unschön.

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Beitrag von piper62 »

OH! 10.000 Pixel! Das muss ich mal testen...
Ich probiere das mal aus, meine Formulare sind eher so gross wie die normalen Bildschirmauflösungen oder mal doppelt, dreimal so gross...
Da habe ich keine Probleme.

Gruss,
Tibor

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 »

TFrame wir übrigends gerade imlementiert
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 »

@piper62
Dein Code sieht eigentlich gut aus nur mit den Position Angaben kann ich nix anfangen.
MFG
Michael Springwald

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Beitrag von piper62 »

@pluto
Das sind Variablen weil ich das Ganze benutze um dynamisch benutzerdefinierte Formulare zur Laufzeit zu generieren. Damit können die User dann eigene Datenbankformulare mit dem Designer von Lazarus machen und die werden in der DB abgelegt. Dann werden die LFM Daten geladen geparst und dargestellt. Die Variablen die Du siehst kommen als Angaben aus dem Parsen.

Für eine direkte Anwendung einfach hier durch Zahlen ersetzen.

Gruss,
Tibor

Antworten