Variablen in Bezeichner integrieren

Für Fragen rund um die Ide und zum Debugger
Antworten
MTB1Leo
Beiträge: 32
Registriert: Do 20. Mär 2014, 18:00

Variablen in Bezeichner integrieren

Beitrag von MTB1Leo »

Hallo,

Ich würde gern in einen Bezeichner eine Variable einbauen, da je nach der Höhe des Variablenwerts ein anderes Objekt gewählt werden soll.

Code: Alles auswählen

 
begin
  if TW_ZB=10 then begin Info.Caption:='Das ist technisch nicht möglich.'; T_MEL.Enabled:=true; end
  else
  begin
  if TW_ZB<10 then begin
 
  TW_ZB_[TW_ZB].Left:=SpX;
  TW_ZB_[TW_ZB].Top:=SpY;
  TW_ZB_[TW_ZB].Top:=SpY;
  TW_ZB_[TW_ZB].Picture.LoadFromFile('gfx/stockboden.png');
 


Wenn ich die Variable wie oben einfach einklammere erhalte ich eine Fehlermeldung.

Als Alternative würde mir nur eine if-Verzweigung einfallen, welche immer den Wert der Variablen abfragt. Das ist aber relativ aufwendig.


Gibt es einen einfacheren Weg?


Danke!

MTB1Leo
750GB HDD CPU: i3 boost 3.6Ghz RAM: 12GB GPU: ASUS RADEON R7 270X DC II

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Variablen in Bezeichner integrieren

Beitrag von Socke »

Versuchs mal mit FindComponent(). Anstatt Form1 musst du natürlich das Formular verwenden, auf dem du die Komponenten platziert hast.

Code: Alles auswählen

var
  cmp: TComponent;
begin
  cmp := Form1.FindComponent('TW_ZB_'+IntToStr(TW_ZB));
  if cmp is TControl then
  begin
    TControl(cmp).Left := SpX;
    // usw.
  end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

MTB1Leo
Beiträge: 32
Registriert: Do 20. Mär 2014, 18:00

Re: Variablen in Bezeichner integrieren

Beitrag von MTB1Leo »

Vielen Dank!

MTB1Leo
750GB HDD CPU: i3 boost 3.6Ghz RAM: 12GB GPU: ASUS RADEON R7 270X DC II

MTB1Leo
Beiträge: 32
Registriert: Do 20. Mär 2014, 18:00

Re: Variablen in Bezeichner integrieren

Beitrag von MTB1Leo »

Die Prozedur selbst hat soweit funktioniert.
Wenn ich jedoch

Code: Alles auswählen

 
TControl(cmp).Picture.LoadFromFile('gfx/stockboden.png');
 

eingebe, bekomme ich folgende Fehlermeldung:
unit1.pas(926,17) Error: identifier idents no member "Picture"

Das Bild ist praktisch das Objekt, welches oben auf SpX und SpY gesetzt werden soll.

:(
750GB HDD CPU: i3 boost 3.6Ghz RAM: 12GB GPU: ASUS RADEON R7 270X DC II

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Variablen in Bezeichner integrieren

Beitrag von m.fuchs »

Wie kommst du darauf, dass TControl eine Eigenschaft namens Picture besitzt? Dafür musst du schon etwas anderes nehmen, ein TImage zum Beispiel.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

MTB1Leo
Beiträge: 32
Registriert: Do 20. Mär 2014, 18:00

Re: Variablen in Bezeichner integrieren

Beitrag von MTB1Leo »

Also ich habe TControl sowohl in TImage als auch in den Bezeichner des Bildes verändert. Es ging beides nicht.

Ich füge jetzt hier nochmal den gesamten Quelltext der Prozedur ein.

var cmp: TComponent; habe ich im oberen Teil eingefügt.

Code: Alles auswählen

 
procedure TForm1.IM_ASClick(Sender: TObject);
begin
 
  if SO_HO=0 then begin Info.Caption:='Du hast keine Äste!';T_MEL.Enabled:=true; end
 
else
 
 begin
 cmp := IM_AS.FindComponent('T_ZB_'+IntToStr(TW_ZB));
 
if cmp is TImage then
begin
 
TImage(cmp).Left:=SpX;
TImage(cmp).Top:=SpY;
TImage(cmp).Picure.LoadfromFile('gfx/stockboden.png'); //Hier kommt der Fehler beim kompilieren.
 
TW_ZB:=TW_ZB+1;
SO_HO:=SO_HO-1;
 
SO_INP;
Info.Caption:= 'Du hast diese Stelle markiert.';
T_MEL.Enabled:=true;
end
 
end;
end;
 


Ist da noch irgendwo ein Fehler drin? :|
750GB HDD CPU: i3 boost 3.6Ghz RAM: 12GB GPU: ASUS RADEON R7 270X DC II

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Variablen in Bezeichner integrieren

Beitrag von Michl »

Bei

Code: Alles auswählen

TImage(cmp).Picure.LoadfromFile('gfx/stockboden.png');
fehlt vor allem das "t" in Picture.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MTB1Leo
Beiträge: 32
Registriert: Do 20. Mär 2014, 18:00

Re: Variablen in Bezeichner integrieren

Beitrag von MTB1Leo »

Michl hat geschrieben:Bei

Code: Alles auswählen

TImage(cmp).Picure.LoadfromFile('gfx/stockboden.png');
fehlt vor allem das "t" in Picture.


Wie peinlich :oops:

Danke vielmals! :mrgreen:
750GB HDD CPU: i3 boost 3.6Ghz RAM: 12GB GPU: ASUS RADEON R7 270X DC II

Antworten