![]() |
Opacity von Rectangle in Frame setzen zur Laufzeit geht nicht
Ich habe ein sehr merkwürdiges Problem, denn
Code:
funktioniert zwar auf einer Form, aber nicht in einem Frame und ich verstehe nicht warum. Ich nutze Delphi 10.4.2 Community Edition.
Frame3.Rectangle1.Opacity:=1/6;
An sich sollte der Code funktionieren, denn wenn ich im Objektinspektor den Opacity Wert modifiziere funktioniert die Darstellung problemlos, ebenso wie die Änderung auf einer Form problemlos funktioniert. Nur im Frame bekomme ich eine Zugriffsverletzung. Kann das jemand reproduzieren oder mir verraten, was ich falsch mache oder warum / wie es (oder auch nicht) geht? EDIT: Also genauer gesagt funktioniert auf einer Form
Code:
aber auf einem Frame halt nicht
Form3.Rectangle1.Opacity:=1/6;
Code:
Frame3.Rectangle1.Opacity:=1/6;
|
AW: Opacity von Rectangle in Frame setzen zur Laufzeit geht nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab euch mal eine .rar von einem Beispielprojekt erstellt. Der Button auf der Form macht was er soll, aber der auf dem Frame nicht. (zumindest bei mir)
|
AW: Opacity von Rectangle in Frame setzen zur Laufzeit geht nicht
Zitat:
Die Instanz in Form1 kannst du mit Form1.Frame21 erreichen. Allerdings ist die Verwendung der globalen Variablen Form1 eher nicht zu empfehlen. Besser in Button1Click direkt Rectangle1 bzw. Frame21.Rectangle1 ansprechen. |
AW: Opacity von Rectangle in Frame setzen zur Laufzeit geht nicht
Ok Frame2 wird nicht erzeugt? Verstehe ich nicht. In meinem Beispiel habe ich ja direkt schon einen Frame zur Designtime auf die Form gezogen, daher ging ich (zumal der Frame ja auch angezeigt wird) davon aus, dass er auch erzeugt wird.
Zum Testen habe ich ihn nun auch zur Laufzeit erzeugt:
Code:
was allerdings nichts an dem Problem ändert, dass ich eine Zugriffsverletzung bekomme.
procedure TForm1.Button2Click(Sender: TObject);
var MyFrame: TFrame; begin MyFrame := TFrame2.Create(Self); MyFrame.Parent := Self; MyFrame.Align := TAlignLayout.Client; if MyFrame is TFrame2 then begin TFrame2(MyFrame).Button1.OnClick(Self); end; end; Innerhalb des Frames habe ich nun aber etwas verändert:
Code:
Wenn ich dort nun im Button also self statt einer Variable nutze funktioniert das ganze. Wenn ich allerdings in meiner procedure "Dings" genau das gleiche machen will funktioniert es nicht mehr. Warum ist das so?
procedure Dings;
begin Frame2.rectangle1.Opacity:=1/6; end; procedure TFrame2.Button1Click(Sender: TObject); begin self.rectangle1.Opacity:=1/6; Dings; end; |
AW: Opacity von Rectangle in Frame setzen zur Laufzeit geht nicht
Zitat:
und nachsehn was dort drin steht? Vermutung: in Frame2 steht nicht das drin, was du denkst, weil DU es da nicht reingeschrieben hast. Was aber auch richtig ist, denn wenn z.B. man den Frame zweimal erstellt, was soll da denn dann drinsteht? Fazit: diese globalen Variablen sofort löschen und schauen wie man es richtig macht, ohne solchen globalen Mist. |
AW: Opacity von Rectangle in Frame setzen zur Laufzeit geht nicht
Hmm..
Zitat:
|
AW: Opacity von Rectangle in Frame setzen zur Laufzeit geht nicht
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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