Einzelnen Beitrag anzeigen

Vienesko

Registriert seit: 21. Mai 2017
Ort: Hamburg
13 Beiträge
 
#1

Eigene Klasse für Steuerungen

  Alt 28. Okt 2017, 16:26
Moin moin,

ich bräuchte mal wieder eure Hilfe.
Ich habe schon diverse Tutorials gelesen (unter anderem das von Luckie und Bertram Hafner) zur Erstellung eigener Klassen und auch hier im Forum gesucht aber irgendwie will der Funke nicht überspringen.

Kurze Erklärung was passieren soll:
Ich programmiere gerade an einer Oberfläche für eine eigene Haussteuerung. Diese Oberfläche ist nach Räumen unterteilt. Jeder Raum hat einen Kopf und einen Körper (ist mit Panels realisiert)und der ist dann nach Geräten unterteilt (siehe Anhang).

Wenn ich das so wie bisher machen würde, hätte ich danach einen ziemlich umfangreichen Code, durch den ich wahrscheinlich selbst nicht mehr durchblicken würde. Also habe ich mich entschieden, eigene eigene Unit (Steuerungen) mit einigen Klassen zu schreiben.

So soll es dann eine Klasse fürs Licht geben, eine für die Heizungen usw. die dann jeweils die Funktionen enthalten, die ich für die jeweiligen Geräte brauche.

So und nun zu meinem Problem:
Wenn ich meine Unit (Steuerungen) in das Hauptprogramm einbinde, finde ich diese auch. Also z.B. LichtEcke.LichtEinschalten; - führt dann aber zu einer Zugriffsverletzung.
LichtEcke := TLicht.Create; habe ich wahlweise bei OnCreate als auch bei ButtonClick schon probiert. Geht beides nicht. Das Problem muss also in der Unit "Steuerungen" liegen. So wie ich das verstanden habe, versuche ich da auf irgendwas zu zugreifen, was (in dem Moment) nicht existiert.

Hier erstmal der Code der Unit:
Delphi-Quellcode:
unit Steuerungen;

interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids,
  Vcl.Samples.Calendar, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.Menus, Vcl.StdActns,
  System.Actions, Vcl.ActnList, Data.DBXMySQL, Data.DB, Data.SqlExpr,
   Vcl.MPlayer, Vcl.OleCtrls, SHDocVw, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP, XmlIntf, Xml.xmldom, Xml.Win.msxmldom,
  Xml.XMLDoc, Data.FMTBcd, Vcl.DBCtrls, ShellApi, Xml.omnixmldom;


type TLicht = class
private
   FState:boolean;
   FPower:real;
   FEnergyCounter:real;
   FFrequency:real;
   FCurrent:real;
   FVoltage:real;
   FError:String;
   FSeriennummer:String;
   FKanal:String;
   HTTP1:TidHTTP;
public
  constructor create (Seriennummer, Kanal:string);
  procedure LichtEinschalten;
  procedure LichtAusschalten;
  function UpdateAll:string;
  function UpdateState:string;
end;


implementation
constructor TLicht.create(Seriennummer: string; Kanal: string);
begin inherited create;
  FSeriennummer:=Seriennummer;
  FKanal:=Kanal;
end;

procedure TLicht.LichtEinschalten;
begin
HTTP1.Get('http://192.168.178.10/config/xmlapi/statechange.cgi?ise_id=1732&new_value=1');
end;

procedure TLicht.LichtAusschalten;
begin

end;

function TLicht.UpdateAll;
begin

end;

function TLicht.UpdateState;
begin

end;

end.
Wundert euch bitte nicht über die vielen uses. Habe erstmal alles eingebunden, was auch die Hauptunit benutzt.
Wenn es bei der einen procedure klappt kann ich mir den Rest wieder auf eigene Faust herleiten.
Nach Stunden des hin und hers brauche ich mal einen Anstupser in die richtige Richtung.

Vielen Dank im Voraus
Miniaturansicht angehängter Grafiken
steuerungen.jpg  
  Mit Zitat antworten Zitat