AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Lazarus Funktion als Baustein nutzen
Thema durchsuchen
Ansicht
Themen-Optionen

Lazarus Funktion als Baustein nutzen

Ein Thema von stay · begonnen am 5. Mär 2017 · letzter Beitrag vom 11. Mär 2017
Antwort Antwort
Seite 1 von 2  1 2      
stay

Registriert seit: 5. Mär 2017
20 Beiträge
 
#1

Lazarus Funktion als Baustein nutzen

  Alt 5. Mär 2017, 19:10
Hallo hoffe ich habe das richtige Forum getroffen.
Ich bin eher unerfahren und hätte eine Frage.
Bei der Programmierung einer SPS kann ich wiederholende Funktionen einmal Programmieren und dann als fertigen Baustein nutzen, mit veränderten Ein- und Ausgangswerten. Also z.B. eine Motorsteuerung, AN AUS NOTAUS LINKS- UND RECHTSlAUF...

Kann ich vergleichbares in Lazarus erstellen?

Als Beispiel:

procedure TForm1.NAME1Click(Sender: TObject);
begin

IF NAME3 > 12 then
NAME2.cells[0,1] := 'Pommes';
NAME2.cells[1,0] := 'Döner';
end;


Es soll so sein, dass ich die Funktion in sich geschlossen habe und von außen nur die Eingabe (NAME1,NAME2) und Ausgabe (NAME2) habe.
NAME1 = Button1 , Button2...
NAME2= Stringgrid1, Stringgrid2...
NAME3= 12,31,2...

Ist das möglich, was nehme ich dazu?

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Lazarus Funktion als Baustein nutzen

  Alt 5. Mär 2017, 20:41
Vielleicht hilft dir folgender Link weiter.

http://bergt.de/workshop/delphi/html/delphi39.htm
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
654 Beiträge
 
Delphi 12 Athens
 
#3

AW: Lazarus Funktion als Baustein nutzen

  Alt 5. Mär 2017, 20:58
Dies lässt sich problemlos umsetzen, allerdings empfehle ich Dir, dich vorgängig mit den allgemeinen Grundlagen zu befassen.

Den Motor starten kannst Du z.B. mit einer Function à la
Delphi-Quellcode:
function Motor_X_Achse(Drehrichtung : String; Geschwindigkeit : Integer) : String;
begin
...
  Result := Aktueller_Status_des_Motor;
end;
Die Logik der SPS kannst Du vermutlich vom Ansatz her übernehmen.
Roland
  Mit Zitat antworten Zitat
stay

Registriert seit: 5. Mär 2017
20 Beiträge
 
#4

AW: Lazarus Funktion als Baustein nutzen

  Alt 5. Mär 2017, 21:24
Hallo, danke für eure schnelle Antwort.
Die Motorsteuerung war nur ein Beispiel um meine Frage besser zu verstehen.

Es geht eigentlich um eine Liste, Stringgrid. Ich habe eine erzeugt, mit Inhalt und je nach integer die Größe bestimmt usw.. und nun würde ich gerne eine andere Steinggrid an anderer Stelle mit anderen Werten aber selber Logik benutzen.
Klar, ich könnte das ganze kopieren und stringgrid1 mit stringgrid2 tauschen, dachte voelleicht gibt es aber eine schönere Lösung.

Ich hoffe es ist einigermaßen verständlich was ich möchte.
Bei einer Funktion ändere ich ja eher das rechts vom :=
Ich würde gerne das linke ändern.

Variable := bleibt fest.
Variable := bleibt fest.
......

Variable soll dann stringgrid1.cells, steinggrid2.cells und so weiter sein.

Dankeschön schonmal.
Entschuldige wenn ich es etwas kompliziert schreibe, aber step7 funktion (nicht funktionsbaustein) trifft es vom Prinzip her am ehesten.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Lazarus Funktion als Baustein nutzen

  Alt 5. Mär 2017, 22:46
Vielleicht sowas in der Art:

Delphi-Quellcode:
procedure TForm1.FillGrid(Grid: TStringGrid);
begin
  Grid.Cell[0, 1] := 'Cell 1';
  Grid.Cell[0, 2] := 'Cell 2';
  Grid.Cell[0, 3] := 'Cell 3';
  Grid.Cell[0, 4] := 'Cell 4';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FillGrid(StringGrid1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FillGrid(StringGrid2);
end;
Die zu füllenden Werte könntest du theoretisch als zweiten Parameter in einem (zweidimensionalen) Array übergeben.
  Mit Zitat antworten Zitat
stay

Registriert seit: 5. Mär 2017
20 Beiträge
 
#6

AW: Lazarus Funktion als Baustein nutzen

  Alt 6. Mär 2017, 09:57
Guten Morgen, dass wäre auch eine Idee.
Nur nochmal für mich als Sicherheit, ich kann in einem Array keine “Objekte“ speichern?
Also in etwa so.verzeihe mir die Form, aber ich bin grade am Handy.

Array = label1 , label2..'

Button.click

Array1 := “hallo“;

Buttonxy.click
Array2 := “huhu“;
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Lazarus Funktion als Baustein nutzen

  Alt 6. Mär 2017, 10:41
Ein Array kann für alle möglichen Datentypen erstellt werden. Du kannst dir auch deine Objekte in die etwas reingeschrieben werden soll in einer TObjectList speichern.

Delphi-Quellcode:
type
  MyComponentsArray = array of TComponent; // Oder auch array of TObject oder array of TStringGrid


  // Oder als ObjectList
  MyComponentsList = TObjectList<TComponent>; // Oder TObjectList<TStringGrid> oder einfach nur TObjectList --> Dann bist du für das Casten selbst verantwortlich

implementation

procedure ArrayTest;
begin
  SetLength(MyComponentsArray, 2);
  MyComponentsArray[0] := StringGrid1;
  MyComponentsArray[1] := StringGrid2;
end;

procedure ObjectListTest;
begin
  MyComponentsList.Add(StringGrid1);
  MyComponentsList.Add(StringGrid2);
end;
Da du deine Delphi Version nicht genannt hast kann ich nicht sagen, ob es bei dir bereits Generics gibt oder nicht. Es gäbe also viele Möglichkeiten Objekte zu speichern. Hier kommt es auf den Anwendungsfall an und wie sinnvoll dann das Ganze ist.
  Mit Zitat antworten Zitat
stay

Registriert seit: 5. Mär 2017
20 Beiträge
 
#8

AW: Lazarus Funktion als Baustein nutzen

  Alt 6. Mär 2017, 19:10
Gute Frage, ich nutze es auf dem Pi, Raspbian Jessy. Lazarus 1.2.x .
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Lazarus Funktion als Baustein nutzen

  Alt 6. Mär 2017, 20:16
Gute Frage, ich nutze es auf dem Pi, Raspbian Jessy. Lazarus 1.2.x .
Sorry. Auf Lazarus hätte ich auch selbst kommen können.

Hast es ja schließlich auch im richtigen Unterforum gepostet.

Allerdings kenne ich mich mit Lazarus überhaupt nicht aus und kann daher auch nicht sagen ob es diese Typen gibt oder nicht.
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
532 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Lazarus Funktion als Baustein nutzen

  Alt 7. Mär 2017, 16:51
Da Aviator hat bestimmt ein sehr guten Zugang aufgezeigt in dem praktisch das Grid als View nimmt und nicht die Logik in das Grid einbaut. An das halte ich mich auch.

Mit Objekten im Array.

Du hast vermutlich ein Free Pascal Compiler 2.6.4 oder einen 2.6.2. Sieht du im help/about oder auf der Kommandozeile fpc.

Ich kann mir nicht vorstellen, dass in den hohen Version vom FPC Generics noch limitiert wären auf Basisdatentypen ... Offiziell ist der Support seit 2.2 da

http://wiki.freepascal.org/Generics

---

Brauchst du aber gar nicht.

Du hast 2 Möglichkeiten in 2 Richtungen.

a) Soll das Array eine fixe Anzahl von Elementen halten oder eine unlimitierte/dynamische Anzahl
b) Was ist die beste Basisklasse die du brauchst oder machst du je Art von Control ein eigenes Array

Im Falle a) und die Länge sei dynamisch, dann arbeite mit SetLength
b= Suche dir ein Basisklasse die genug kann. Wenn du 2 Grids verwaltest bspw. weißt du eh, dass ein Grid hast...

Garbage Collector hast du keinen. Tupel Notation gehen nicht. Ob die Tupel die 2013 andiskutiert wurden jemals ins Fliegen kamen ...

Guten Morgen, dass wäre auch eine Idee.
Nur nochmal für mich als Sicherheit, ich kann in einem Array keine “Objekte“ speichern?
Also in etwa so.verzeihe mir die Form, aber ich bin grade am Handy.

Array = label1 , label2..'

Button.click

Array1 := “hallo“;

Buttonxy.click
Array2 := “huhu“;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:23 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