![]() |
AW: Objecteigenschaften während der Laufzeit ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe die Screenshot angehängt.
|
AW: Objecteigenschaften während der Laufzeit ändern
Hallo zusammen,
Was hast Du an Deinem Quellcode jetzt verändert? Stell das ganze Projekt am besten nochmals ein. |
AW: Objecteigenschaften während der Laufzeit ändern
Delphi-Quellcode:
Ich denke das der Teil des Programms nicht ganz in Ordnung ist
unit Haupfenster;
interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls, FMX.Layouts, FMX.Ani, FMX.Objects, Contnrs; type TForm1 = class(TForm) StyleBook1: TStyleBook; ProduktMeneu: TPanel; Oben: TPanel; Seite: TPanel; FlowLayout2: TFlowLayout; Waermepumpe: TExpander; Solar: TExpander; Expander3: TExpander; Lueftung: TExpander; Start: TPanel; Unten: TPanel; ImageControl7: TImageControl; Image1: TImage; FloatAnimation1: TFloatAnimation; FloatAnimation2: TFloatAnimation; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Image2: TImage; Image3: TImage; Label13: TLabel; Label14: TLabel; Image4: TImage; Image5: TImage; Image6: TImage; Label15: TLabel; Image7: TImage; Label16: TLabel; Image8: TImage; Label17: TLabel; Label18: TLabel; Menue: TPanel; FloatAnimation3: TFloatAnimation; FloatAnimation4: TFloatAnimation; Image9: TImage; Label19: TLabel; Image11: TImage; Label21: TLabel; Image12: TImage; Label22: TLabel; Image13: TImage; Label23: TLabel; Image10: TImage; Label20: TLabel; Image14: TImage; Label24: TLabel; Image15: TImage; Label25: TLabel; ImageControl1: TImageControl; ImageControl2: TImageControl; ImageControl3: TImageControl; ImageControl4: TImageControl; ImageControl5: TImageControl; Image16: TImage; Image17: TImage; Label26: TLabel; Expander1: TExpander; Image18: TImage; procedure FormResize(Sender: TObject); procedure ImageControl7Click(Sender: TObject); function panelzoom():boolean; function buttonzoom():boolean; function buttonzoomout():boolean; procedure Image4Click(Sender: TObject); procedure Image8Click(Sender: TObject); procedure ImageControl1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; TExpanderNeu = class(TExpander) private public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure groß(Sender: TObject); procedure klein(Sender: TObject); end; var Form1: TForm1; y, i,j,x,test: integer; progPfad,datei2 : string; ExpanderArray: array of TExpanderNeu; implementation {$R *.fmx} constructor TExpanderNeu.Create; begin inherited; end; destructor TExpanderNeu.Destroy; begin inherited; end; procedure TExpanderNeu.groß(Sender: TObject); begin StyleLookup := 'expanderstyle'; Width := 300; end; procedure TExpanderNeu.klein; begin BeginUpdate; StyleLookup := 'expanderstyleneu'; Width := 125; EndUpdate; end; procedure createBild(AOwner: TFmxObject); var newBild :Timage; begin newBild := TImage.Create(AOwner); with newBild do begin parent := AOwner; Bitmap.CreateFromFile(Pchar(Progpfad+'Bilder\Lueftung.png')); position.X := 222; position.Y := -24; height := 125; width := 78; end; end; procedure createExpanderNeu(AOwner: TFmxObject; labelText : String; posX, posY, hoehe, breite,i : integer); var Expander : TExpanderNeu; begin SetLength(ExpanderArray,Length(ExpanderArray)+1); ExpanderArray[i] := TExpanderNeu.Create(AOwner); with Expander do begin ExpanderArray[i].Parent := Form1.FlowLayout2; ExpanderArray[i].HitTest := true; ExpanderArray[i].Text := labelText; ExpanderArray[i].Cursor := crHandPoint; ExpanderArray[i].height := hoehe; ExpanderArray[i].width := breite; end; createBild(ExpanderArray[i]); end; function TForm1.panelzoom():boolean; begin if y <> 99 then begin i := 1; y := 99; end; if i = 1 then begin FloatAnimation2.Enabled := false; FloatAnimation1.Enabled := true; imagecontrol7.LoadFromFile(Progpfad+'Bilder\Icons\Pfeil_links_schwarz.png'); i := 0; end else begin FloatAnimation1.Enabled := false; FloatAnimation2.Enabled := true; imagecontrol7.LoadFromFile(Progpfad+'Bilder\Icons\Pfeil_Rechts_schwarz.png'); i := 1; end; end; function TForm1.buttonzoom():boolean; var panel : TExpanderNeu; begin Waermepumpe.StyleLookup := 'expanderstyleneu'; Waermepumpe.Width := 125; solar.StyleLookup := 'expanderstyleneu'; solar.Width := 125; expander3.StyleLookup := 'expanderstyleneu'; expander3.Width := 125; lueftung.StyleLookup := 'expanderstyleneu'; lueftung.Width := 125; end; function TForm1.buttonzoomout():boolean; begin Waermepumpe.StyleLookup := 'expanderstyle'; Waermepumpe.Width := 300; solar.StyleLookup := 'expanderstyle'; solar.Width := 300; expander3.StyleLookup := 'expanderstyle'; expander3.Width := 300; lueftung.StyleLookup := 'expanderstyle'; lueftung.Width := 300; end; procedure TForm1.FormCreate(Sender: TObject); var i : integer; text: array[1..10]of string; AOwner: TFmxObject; begin ProgPfad := ExpandFileName('KPN.exe'); delete(ProgPfad,length(ProgPfad)-6,256); text[1]:= 'Wärmepumpe'; text[2]:= 'Solar'; text[3]:= 'Lüftung'; text[4]:= 'Heizkessel'; text[5]:= 'Speicher'; SetLength(ExpanderArray,0); for i := 1 to 5 do begin createExpanderNeu(image6,Text[i], 222, -24, 125, 300,i); end; label26.Text := IntToStr(Flowlayout2.ChildrenCount); end; procedure TForm1.FormResize(Sender: TObject); var zaehler : integer; begin if y <> 99 then begin i := 1; y := 99; end; if Form1.Width < 300*2.2 then begin for zaehler := 0 to Length(ExpanderArray) - 1 do begin ExpanderArray[zaehler].klein(ExpanderArray[zaehler]) end; buttonzoom; if (ProduktMeneu.Width > 200) and (i = 1) then begin panelzoom(); Label18.Visible := false; i := 0; end; end else begin buttonzoomout; if (ProduktMeneu.Width < 200) and (i = 0) then begin panelzoom(); Label18.Visible := true; i := 1; end; end; end; procedure TForm1.Image4Click(Sender: TObject); begin start.Enabled :=false; start.Visible := false; end; procedure TForm1.Image8Click(Sender: TObject); begin if x <> 99 then begin j := 1; x := 99; end; if j = 1 then begin FloatAnimation4.Enabled := false; FloatAnimation3.Enabled := true; j := 0; end else begin FloatAnimation3.Enabled := false; FloatAnimation4.Enabled := true; j := 1; end; end; procedure TForm1.ImageControl1Click(Sender: TObject); var Expander : TExpanderNeu; begin if test <> 1 then begin imagecontrol1.LoadFromFile(Progpfad+'Bilder\Icons\icon-biomasse-xl.png'); waermepumpe.Visible := true; solar.Visible := false; ExpanderArray[i].Destroy; // solar.Destroy; // expander3.Enabled := false; lueftung.Visible := false; // lueftung.Destroy; test :=1; flowlayout2.Width :=0; end else begin imagecontrol1.LoadFromFile(Progpfad+'Bilder\Icons\icon-biomasse-weiss-xl.png'); waermepumpe.Visible := true; solar.Visible := true; // expander3.Enabled := false; lueftung.Visible := true; test :=2; flowlayout2.Width :=0; end; end; procedure TForm1.ImageControl7Click(Sender: TObject); begin panelzoom() end; end.
Delphi-Quellcode:
procedure createExpanderNeu(AOwner: TFmxObject; labelText : String; posX, posY, hoehe, breite,i : integer);
var Expander : TExpanderNeu; begin SetLength(ExpanderArray,Length(ExpanderArray)+1); ExpanderArray[i] := TExpanderNeu.Create(AOwner); with Expander do begin ExpanderArray[i].Parent := Form1.FlowLayout2; ExpanderArray[i].HitTest := true; ExpanderArray[i].Text := labelText; ExpanderArray[i].Cursor := crHandPoint; ExpanderArray[i].height := hoehe; ExpanderArray[i].width := breite; end; createBild(ExpanderArray[i]); end;
Delphi-Quellcode:
Das Programm lässt sich compilieren und funktioniert außer dem Problem mit dem ändern der Eigenschaften. Wenn ich das Programm schließe kommt aber eine Exeption. Kommentiere ich den Teil createExpanderNeu(image6,Text[i], 222, -24, 125, 300,i); aus kommt keine Exeption. Ich vermute das das alles miteinander zusammenhängt. Ich bin echt ratlos.
SetLength(ExpanderArray,0);
for i := 1 to 5 do begin createExpanderNeu(image6,Text[i], 222, -24, 125, 300,i); end; |
AW: Objecteigenschaften während der Laufzeit ändern
Mach das einmal so:
Delphi-Quellcode:
procedure createExpanderNeu(AOwner: TFmxObject; labelText : String; posX, posY, hoehe, breite,i : integer);
begin SetLength(ExpanderArray,Length(ExpanderArray)+1); ExpanderArray[i] := TExpanderNeu.Create(AOwner); ExpanderArray[i].Parent := Form1.FlowLayout2; ExpanderArray[i].HitTest := true; ExpanderArray[i].Text := labelText; ExpanderArray[i].Cursor := crHandPoint; ExpanderArray[i].height := hoehe; ExpanderArray[i].width := breite; createBild(ExpanderArray[i]); end; |
AW: Objecteigenschaften während der Laufzeit ändern
Das hat nichts geändert. Ich denke das ganze hat mit der Klassendeklaration was zu tun.
Delphi-Quellcode:
Wenn ich hier constructor Create(AOwner: TComponent); override; den Teil (AOwner: TComponent); override; weglasse bekomme ich hier
TExpanderNeu = class(TExpander)
private public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure groß(Sender: TObject); procedure klein(Sender: TObject); end; constructor TExpanderNeu.Create; begin inherited; end;
Delphi-Quellcode:
eine Fehlermeldung "inkompatible Typen"
constructor TExpanderNeu.Create;
begin inherited; end; wenn ich das drin lasse weis ich nicht was ich hier
Delphi-Quellcode:
für einen Parameter für "image6" nehmen soll
procedure createExpanderNeu(AOwner: TFmxObject; labelText : String; posX, posY, hoehe, breite,i : integer);
var Expander : TExpanderNeu; begin SetLength(ExpanderArray,Length(ExpanderArray)+1); ExpanderArray[i] := TExpanderNeu.Create(AOwner); with Expander do begin ExpanderArray[i].Parent := Form1.FlowLayout2; ExpanderArray[i].HitTest := true; ExpanderArray[i].Text := labelText; ExpanderArray[i].Cursor := crHandPoint; ExpanderArray[i].height := hoehe; ExpanderArray[i].width := breite; end; createBild(ExpanderArray[i]); end; procedure TForm1.FormCreate(Sender: TObject); var i : integer; text: array[1..10]of string; AOwner: TFmxObject; begin ProgPfad := ExpandFileName('KPN.exe'); delete(ProgPfad,length(ProgPfad)-6,256); text[1]:= 'Wärmepumpe'; text[2]:= 'Solar'; text[3]:= 'Lüftung'; text[4]:= 'Heizkessel'; text[5]:= 'Speicher'; SetLength(ExpanderArray,0); for i := 1 to 5 do begin createExpanderNeu(image6,Text[i], 222, -24, 125, 300,i); end; label26.Text := IntToStr(Flowlayout2.ChildrenCount); end; |
AW: Objecteigenschaften während der Laufzeit ändern
Ich habe es hinbekommen
Das Problem:
Delphi-Quellcode:
Die Lösung:
etLength(ExpanderArray,0);
for i := 1 to 6 do begin createExpanderNeu(FlowLayout2,Text[1], 222, -24, 125, 300,i); end;
Delphi-Quellcode:
Das Füllen des Array muss mit 0 beginnen nicht mit 1
etLength(ExpanderArray,0);
for i := 0 to 5 do begin createExpanderNeu(FlowLayout2,Text[i+1], 222, -24, 125, 300,i); end; |
AW: Objecteigenschaften während der Laufzeit ändern
Zitat:
Delphi-Quellcode:
Bzw., stimmt der letzte Parameter überhaupt?
SetLength(ExpanderArray, 0);
for i := 1 to 6 do createExpanderNeu(FlowLayout2,Text[i], 222, -24, 125, 300,i-1); Zitat:
Warum gibt es da soviele globale Variablen? Wenn die/einige wirklich global sein müssen, warum dann mit so nichtssagenden Namen? i und j scheinen an manchen Stellen nur zwei Werte zu haben (0 und 1). Sieht das nicht eher nach einem Boolean aus? |
AW: Objecteigenschaften während der Laufzeit ändern
Hallo zusammen,
und das ist natürlich genau so tötlich:
Delphi-Quellcode:
ExpanderArray[i].Parent := Form1.FlowLayout2;
Wenn Du eine neue Instanz der Form anlegst, dann heisst diese nicht mehr "Form1". |
AW: Objecteigenschaften während der Laufzeit ändern
Zitat:
|
AW: Objecteigenschaften während der Laufzeit ändern
Erst einmal vielen Dank für Die Anregungen. Wie schon erwähnt bin ich absoluter Neuling was Objektorientierung angeht. Ich weis nicht wie man das
ExpanderArray[i].Parent := Form1.FlowLayout2; besser abbildet :oops:. Bei den globalen Variablen bin ich am bereinigen. Ich bräuchte da aber ein paar Tipps wie man das besser abbilden kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 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