AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Objecteigenschaften während der Laufzeit ändern

Objecteigenschaften während der Laufzeit ändern

Ein Thema von Torwein · begonnen am 8. Dez 2014 · letzter Beitrag vom 10. Dez 2014
Antwort Antwort
Seite 2 von 3     12 3   
Torwein

Registriert seit: 6. Dez 2011
11 Beiträge
 
#11

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 8. Dez 2014, 15:56
Ich habe die Screenshot angehängt.
Miniaturansicht angehängter Grafiken
unbenannt.png  
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#12

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 8. Dez 2014, 16:00
Hallo zusammen,


Was hast Du an Deinem Quellcode jetzt verändert?

Stell das ganze Projekt am besten nochmals ein.
  Mit Zitat antworten Zitat
Torwein

Registriert seit: 6. Dez 2011
11 Beiträge
 
#13

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 8. Dez 2014, 16:15
Delphi-Quellcode:
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.
Ich denke das der Teil des Programms nicht ganz in Ordnung ist
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:
SetLength(ExpanderArray,0);
    for i := 1 to 5 do begin
      createExpanderNeu(image6,Text[i], 222, -24, 125, 300,i);
    end;
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.
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#14

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 8. Dez 2014, 16:51
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;
  Mit Zitat antworten Zitat
Torwein

Registriert seit: 6. Dez 2011
11 Beiträge
 
#15

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 8. Dez 2014, 18:02
Das hat nichts geändert. Ich denke das ganze hat mit der Klassendeklaration was zu tun.
Delphi-Quellcode:
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;
Wenn ich hier constructor Create(AOwner: TComponent); override; den Teil (AOwner: TComponent); override; weglasse bekomme ich hier

Delphi-Quellcode:
constructor TExpanderNeu.Create;
begin
  inherited;
end;
eine Fehlermeldung "inkompatible Typen"

wenn ich das drin lasse weis ich nicht was ich hier

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;

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;
für einen Parameter für "image6" nehmen soll
  Mit Zitat antworten Zitat
Torwein

Registriert seit: 6. Dez 2011
11 Beiträge
 
#16

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 9. Dez 2014, 06:06
Ich habe es hinbekommen

Das Problem:
Delphi-Quellcode:
etLength(ExpanderArray,0);
    for i := 1 to 6 do begin
      createExpanderNeu(FlowLayout2,Text[1], 222, -24, 125, 300,i);
    end;
Die Lösung:
Delphi-Quellcode:
etLength(ExpanderArray,0);
    for i := 0 to 5 do begin
      createExpanderNeu(FlowLayout2,Text[i+1], 222, -24, 125, 300,i);
    end;
Das Füllen des Array muss mit 0 beginnen nicht mit 1
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#17

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 9. Dez 2014, 07:53
Zitat:
Delphi-Quellcode:
SetLength(ExpanderArray, 0);
for i := 1 to 6 do
  createExpanderNeu(FlowLayout2,Text[1], 222, -24, 125, 300,i);
Delphi-Quellcode:
SetLength(ExpanderArray, 0);
for i := 0 to 5 do
  createExpanderNeu(FlowLayout2,Text[i+1], 222, -24, 125, 300,i);
Warum nicht so?
Delphi-Quellcode:
SetLength(ExpanderArray, 0);
for i := 1 to 6 do
  createExpanderNeu(FlowLayout2,Text[i], 222, -24, 125, 300,i-1);
Bzw., stimmt der letzte Parameter überhaupt?
Zitat:
Delphi-Quellcode:
SetLength(ExpanderArray,Length(ExpanderArray)+1);
ExpanderArray[i] := TExpanderNeu.Create(AOwner);
Warum SetLength bezogen auf das Array, aber beim Zugriff auf das Array plötzlich ein anderer/fremder Index?

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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Dez 2014 um 12:50 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#18

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 9. Dez 2014, 09:00
Hallo zusammen,

und das ist natürlich genau so tötlich:
   ExpanderArray[i].Parent := Form1.FlowLayout2;
Wenn Du eine neue Instanz der Form anlegst, dann heisst diese nicht mehr "Form1".
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 9. Dez 2014, 09:03
Hallo zusammen,

und das ist natürlich genau so tötlich:
   ExpanderArray[i].Parent := Form1.FlowLayout2;
Wenn Du eine neue Instanz der Form anlegst, dann heisst diese nicht mehr "Form1".
Da sagen wir doch schon gar nichts mehr zu ... der große Teil der Variablen ist ja auch global deklariert. Mehr als eine Instanz darf es von der Form sowieso nicht geben, sonst zündet da die Saturn-Rakete
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Torwein

Registriert seit: 6. Dez 2011
11 Beiträge
 
#20

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 9. Dez 2014, 11:48
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 . Bei den globalen Variablen bin ich am bereinigen. Ich bräuchte da aber ein paar Tipps wie man das besser abbilden kann.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz