Klasse aus einer Datei laden ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Klasse aus einer Datei laden ?

Beitrag von pluto »

Hallo,
für mein paint2 Projekt würde ich gerne Die Komponenten leiste in einer Datei auslgaern mit folgenden aufbau:
[Standart]
33=Trechteck

das Lesen der Datei ist nicht mein Problem.
Wenn ich das jetzt so mache und ich klicke auf meine Paintbox(nagut in wirklichkeit ist es ein Panel auf was ich Zeichne *G*) .
erstelle ich je nach ID eine komponente:

if tag = 1 then TRechteck.Create
if Tag = 2 then TLine.Create
und so weiter
mein Ziel ist ist es den wert zu nehmen der in der INI Datei steht... ich hoffe ihr versteht wie ich das meine .

Mein Ziel ist es nur noch diese eine Datei zu ändern und schon soll alles laufen...
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Zwei Stringlisten, eine mit Ini.ReadSection(...) und eine mit IniReadSectionValues(...) einlesen.

Und dann kannst du ja deine Schalftächen in ner for-Schleife erstellen, und ihnen über den Index der beiden Stringlisten gleich den Tag und die Bezeichnung zuordnen.

Aber wahrscheinlich lieg ich mit meiner Interpretation völlig daneben :lol:

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ja. ich schriebt ja schon das das einlesen der INI Datei nicht das Problem ist !
Das bekomme ich locker hin(den ersten teil) nur der zweite teil...

mir geht es darum:
beim klicken auf das Zeichen Panel prüfe ich ja ob welche wert eine variabel hat !
Diese variable wird gesetzt wenn ich ein Speedbutton anklicke.
Variable:=(Sender as TSpeedbutton).tag

und jetzt muss ich jedesmal prüfen beim hinzufügen:
if Variable = 0 then Erstelle ein Rechteck
if Variable = 1 then Erstelle eine Line
und soweiter !
Das einlesen der Datei bekomme ich hin !
nur der zweite teil bekomme ich nicht hin !
ich hoffe jetzt verstehst du was ich meine !
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

abgesehen davon, das ich da case...of nehmen würde, du möchtest also, das beispielsweise das Rechteck TRechteck.Create so aus der Ini gelesen wird und automatisch als Objekt eingetragen wird.

Es ist also kurzum die Frage, wie setzt man einen string als Objektbezeichner ein?

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich glaube da hast du ins Schwarze getroffen.
Genau das ist meine Frage !
ich kann ja schlecht schreiben:
Class(Stringvariable).Create oder sowas !
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ich würde mir ne Klasse von TReader und TWriter ableiten dann kannst du die klassen direkt aus der Datei laden. Wenn du n neues Dateiformat willst musst nur ne neue Klasse ableiten die das Format lesen und schreiben kann.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

die Datei soll aber Ascci sein und soll änderbar sein mit jedem Editor !
Es muss doch irgenwie gehen.
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Neue Methode ReadFromFile einführen.

Code: Alles auswählen

procedure TMyObject.ReadFromFile;
var
  f: file;
  paramname,
  param: string;
  c: char;
begin
   // file öffnen
  paramname:= '';
  param:= '';
  while not(eof(f)) do begin
     read(f, c);
     if not(c in ['=',' ',';']) then paramname:= paramname + c
     else begin
        case c of
           '=':{blabla};
           ' ':{blabla};
           ';':{blabla};
        end; // of case
     end;
  end;
end;
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

anscheind verstehst du mein Problem nicht.
Das Problem ist jetzt nicht eine Datei zu öffnen und draus zu Lesen.... DAS SCHAFFE ICH.
Was ich nicht schaffe, weil ich nicht weißt wie das geht ist wie kann ich ein String als Klasse verwenden ?
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Versteh wirklich nicht warum ma nenh string als klasse verwenden will
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Ich auch nicht... :wink:

Wie oben gezeigt kannst du dir sogar den Klassen-Namen auslesen und je nach Paramter entsprechend casten. Was will man mehr?
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Ich komm auch nicht ganz mit. Oder meinst du etwa sowas in dieser Art:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var AClass:TControlClass;
 AControl:TControl;
begin
AClass:=TControlClass(GetClass('TButton'));
if AClass<>nil then
 begin
 AControl:=AClass.Create(Self);
 AControl.Name:='ButtonX';
 AControl.Caption:='OK';
 AControl.Parent:=Self;
 end;
end;   
 
 
initialization
  {$I unit1.lrs}
 
RegisterClasses([TButton, TMemo]);

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@theo

Geht in meine Richtung. ReadFromFile könnte auch als Utility gebaut werde:

Code: Alles auswählen

function GetObjectFromFile(AClassName, AFileName: string; AObject: TObject): boolean;
begin
  Result:= (AFileName <> '') and FileExists(AFileName);
  if Result then begin
 
  end;
end;
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ja theo sowas meinte ich !

Ich kann das nicht verstehen das ihr das nicht versteht !
also.
ich möchte gerne in meine Paint2 Projekt eine funktion einbauen mit der ich die PageControl aus einer Dateiladen kann also die komponenten leiste !

Um dies zu tuen muss ich die Klassen namen aus einer Datei lesen also TRECHTECK, TVIERECK, TKREIS und soweiter !

weil ich möchte nur noch dise eine Datei verändern weil beim hinzufügen wird dann geprüft was gewünscht wird ! und das möchte ich vereinfachen !
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

das geht mit TReader und TWriter ganz einfach wenns noch einfacher sein soll nimmst du einfach die Lazarus Form reader und writer aber dann musst du ja von deinem komischen ini format weg ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten