nach Variablen "suchen"

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
DDKFM
Beiträge: 17
Registriert: Di 23. Sep 2014, 19:32

nach Variablen "suchen"

Beitrag von DDKFM »

Hallo,

ich baue gerade eine GUI-Anwendung. In dieser GUI-Klasse stehen einige Objekte(Beispiel siehe unten) in den public Attributen.
Jedem dieser Objekte muss ich einen X- und Y-Wert zuweisen. Diesen Wert möchte ich aus einem XML-Dokument laden.(Methode setPoints(...))

Meine Frage ist jetzt ob es eine Möglichkeit nach diesen Variablen über einen String zu suchen, das heißt das ich aus dem
XML-Dokument einen String rausbastel und anschließend nach dieser Variablen/Attribut suche und davon die entsprechenden Werte festlege.

Code: Alles auswählen

 
TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Timer1: TTimer;
    ToggleBox1: TToggleBox;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
  public
    OProgram:TProgram;
    Prog_Databus:TBundle;
    Prog_Addresbus:TBundle;
    Prog_Instructionbus:TBundle;
  end; 
...
...
...
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin  
Image1.Canvas.Clear;
  Image1.Canvas.Clear;
  for i := 0 to 3 do
      begin
        Prog_Addresbus[i]:=TDataLine.Create(nil,true,nil,false);
        Prog_Addresbus[i].setDrawPanel(Image1.Canvas);
        Prog_Addresbus[i].setPoints([Point(10,200),Point(10,220)]);
        Prog_Databus[i]:=TDataLine.Create(nil,true,nil,false);
        Prog_Instructionbus[i]:=TDataLine.Create(nil,true,nil,false);
      end; 
end;
MfG DDKFM

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: nach Variablen "suchen"

Beitrag von Komoluna »

Erstmal unabhängig von deiner Frage: Warum rufst du Image1.Canvas.Clear 2x auf?

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: nach Variablen "suchen"

Beitrag von Warf »

Du könntest dir dafür eine Funktion basteln a'la:

Code: Alles auswählen

function TForm1.GetObjectByKey(Key: String): TObject;
begin
  Result:=nil;
  if Key = 'OProgram' then Result:= OProgram
  else if Key = ...
end;

Socke
Lazarusforum e. V.
Beiträge: 3177
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: nach Variablen "suchen"

Beitrag von Socke »

DDKFM hat geschrieben:ich baue gerade eine GUI-Anwendung. In dieser GUI-Klasse stehen einige Objekte(Beispiel siehe unten) in den public Attributen.
Jedem dieser Objekte muss ich einen X- und Y-Wert zuweisen. Diesen Wert möchte ich aus einem XML-Dokument laden.(Methode setPoints(...))
Verschiebe die Variablen in den Bereich published und verwende die Funktionen aus der Unit typinfo.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

DDKFM
Beiträge: 17
Registriert: Di 23. Sep 2014, 19:32

Re: nach Variablen "suchen"

Beitrag von DDKFM »

Komoluna hat geschrieben:Erstmal unabhängig von deiner Frage: Warum rufst du Image1.Canvas.Clear 2x auf?
Zitat:http://wikis.zum.de/zum/Lazarus-Buch/Computer-Graphik

"Es kann sein, dass in Ausnahmefällen die Färbung stattdessen schwarz wird.
Möglicherweise handelt es sich dabei um einen Programmierfehler in Lazarus.
Abhilfe lässt sich dadurch schaffen, den clear-Befehl zweimal hintereinander auszuführen)."

Wenn ich Clear nur einmal aufrufe färbt sich das Canvas schwarz.

DDKFM
Beiträge: 17
Registriert: Di 23. Sep 2014, 19:32

Re: nach Variablen "suchen"

Beitrag von DDKFM »

Ich habe mir jetzt einmal die Unit typinfo angeschaut, aber bin noch nicht wirklich weitergekommen.

Beispiel:

Code: Alles auswählen

 
published
    OProgram:TProgram;
    Prog_Databus:TBundle;
    Prog_Addresbus:TBundle;
    Prog_Instructionbus:TBundle; 
...
...
for i := 0 to 3 do
      begin
        Prog_Addresbus := TBundle.Create;
        Prog_Addresbus.Lines[i]:=TDataLine.Create(nil,true,nil,false);
        Prog_Addresbus.Lines[i].setDrawPanel(Image1.Canvas);
        Prog_Addresbus.Lines[i].setPoints([Point(10,200),Point(10,220)]);
      end;
 
Ausschnitt XML:

Code: Alles auswählen

 
<TBundle name = "Prog_Addresbus">
         <Point id = "0" x = "10" y = "200"/>
         <Point id = "1" x = "10" y = "220"/>
</TBundle>
 
Nun möchte ich jetzt durch das XML-Dokument gehen und nach dem Name "Prog_Addresbus" in den Attributen des Formulars suchen.
Ich hoffe jemand weiß genauer wie man sowas bewerkstelligen könnte.

MfG DDKFM

Antworten