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
Thema durchsuchen
Ansicht
Themen-Optionen

Objecteigenschaften während der Laufzeit ändern

Ein Thema von Torwein · begonnen am 8. Dez 2014 · letzter Beitrag vom 10. Dez 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

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?
Ein Therapeut entspricht 1024 Gigapeut.

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

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

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
 
#3

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
 
#4

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
BadenPower

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

AW: Objecteigenschaften während der Laufzeit ändern

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

zuersteinmal setzt Du "procedure createExpanderNeu()" als procedure der TForm.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
   ....
   private
    FExpanderArray: array of TExpanderNeu;
    procedure createExpanderNeu(Parameterliste);
   public
Natürlich musst Du nun die Klasse TExpanderNeu vor die Deklaration von TForm1 setzen und die globale Variable ExpanderArray entfernen und durch FExpanderArray ersetzen.

Delphi-Quellcode:
procedure TForm1.createExpanderNeu(AOwner: TFmxObject; labelText : String; posX, posY, hoehe, breite : integer);
var
  liNewIndex: Integer;
begin

  liNewIndex := Length(ExpanderArray);
  SetLength(FExpanderArray, liNewIndex + 1);
  FExpanderArray[liNewIndex ] := TExpanderNeu.Create(AOwner);

  FExpanderArray[liNewIndex ].Parent := FlowLayout2;
  FExpanderArray[liNewIndex ].HitTest := true;
  FExpanderArray[liNewIndex ].Text := labelText;
  FExpanderArray[liNewIndex ].Cursor := crHandPoint;
  FExpanderArray[liNewIndex ].height := hoehe;
  FExpanderArray[liNewIndex ].width := breite;

  createBild(FExpanderArray[liNewIndex]);
end;
Ich habe in den Parametern der Prozedur das "i" herausgenommen, da es nun zu keinen Missverständnissen kommen kann.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Torwein

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

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 9. Dez 2014, 13:58
Danke für die Info, ich werde das mal testen und berichte ob ich damit klar gekommen bin
  Mit Zitat antworten Zitat
Torwein

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

AW: Objecteigenschaften während der Laufzeit ändern

  Alt 10. Dez 2014, 12:14
Hallo zusammen,

ich hätte hier noch eine Frage. Wie ist das gemeint "die globale Variable ExpanderArray entfernen und durch FExpanderArray ersetzen."?

Das habe ich nicht verstanden.
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:08 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