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.
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
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.
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.
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 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.
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.
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)
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;
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.
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.
@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.