Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Zugriff auf Steuerung und Anzeige im HTML (https://www.delphipraxis.net/160984-zugriff-auf-steuerung-und-anzeige-im-html.html)

zeras 10. Jun 2011 18:33

Zugriff auf Steuerung und Anzeige im HTML
 
Hallo,

ich habe wieder eine Idee und wollte euch fragen, ob das überhaupt umsetzbar ist.
Ziel ist es, Daten aus einer Steuerung mittels einer vom Hersteller gelieferten DLL auszulesen und per Internet zur Verfügung zu stellen.
Die Idee wäre wie folgt:
- Steuerung hängt am Internet
- Auf einem Server im Internet läuft mein Programm mit der DLL, die über TCP/IP auf die Steuerung zugreifen kann. Das Programm stellt dann eine HTML Seite mit den Daten zur Verfügung und ich kann mittels eines Browsers die Daten abfragen.

Was schon geht:
- Programm läuft auf meinem Windows Rechner zu Hause. Mittels der DLL kann ich auf die Steuerung zugreifen.

Was mir Fragen bereitet:
- Kann man günstig (oder kostenlos) einen Server mieten, wo ich mein Programm laufen lassen kann. Quellen habe ich, um die DLL ansprechen zu können.

Ich habe D2009 prof. Damit könnte ich doch auch HTML Seiten erzeugen oder?

himitsu 10. Jun 2011 20:47

AW: Zugriff auf Steuerung und Anzeige im HTML
 
Ja, man bekommt recht günstig Server/VServer, wo man Programme laufen lassen kann,
aber Server mit Windows drauf, sind recht teuer.
> Windows-Lizenzen kosten "etwas"
> Linux-Server sind darum meist günstiger (da es ja auch kostenlose/günstige Linux-Distributionen gibt)

Hier in der DP gibt gab es öfters schonmal Threads, mit Fragen nach Servern.

[DP]günstige Server[/DP]
[DP]günstiger Server[/DP]
PS: schau mal ganz weit oben in die K&T-Ecke

blackfin 10. Jun 2011 21:40

AW: Zugriff auf Steuerung und Anzeige im HTML
 
Um was für eine "Steuerung" handelt es sich denn da?

Meiner Meinung wäre der umgekehrte Weg der einfachere, und zwar ein Push-Verfahren von deinem lokalen PC auf einem kleinen Server / Webspace im Internet (und nicht umgekehrt).

1) Du liest die Daten lokal über die DLL (mit Delphi?) aus und gibst dem Programm einen mini HTTP Client (mit Indy oder dergleichen).

2) Du buchst einen günstigen Webspace mit mySQL-Datenbank (gibts ja echt günstig) und schreibst eine kleine php-Seite, die einen POST-HTTP-Request von deinem lokalen Client annnimmt und die Daten in die Datenbank speichert. Dazu noch eine kleine Anzeige-Seite, die die Daten aus der Datenbank anzeigt.
Fertisch. Das ganze natürlich dann noch ein bißchen absichern (SHA-Sign der POST-Daten oder dergleichen)

Oder habe ich dein Vorhaben falsch verstanden und einen Denkfehler drin? :-)

zeras 11. Jun 2011 11:56

AW: Zugriff auf Steuerung und Anzeige im HTML
 
Zitat:

Zitat von blackfin (Beitrag 1105761)

Oder habe ich dein Vorhaben falsch verstanden und einen Denkfehler drin? :-)

Ich muss halt die DLL nutzen, um an die Steuerung zu kommen. Das sollte nicht von meinem PC aus passieren, da der nicht immer an ist. Deshalb wollte ich das über einen Internetserver machen.
Die Abfrage muss immer von den Server aus gehen, aber könnte vielleicht auch durch einen Post Request ausgelöst werden.

Zur Zeit bin ich am Ideen sammeln, ob sowas machbar ist und welchen Nutzen mir das bringt.

Maik81ftl 14. Jul 2011 15:36

AW: Zugriff auf Steuerung und Anzeige im HTML
 
Moin Moin,

Habe in diesem Sinne auch mal eine Frage, da ich gerade ein kleines problem mit der LHTTPClientComponent habe.

Die gesamten Komonenten, welche ich verwende sind wie folgt.
Delphi-Quellcode:
    IpFileDataProvider1: TIpFileDataProvider;
    IpHtmlPanel1: TIpHtmlPanel;
    IPS1: TLTCPComponent;
    IPSHTTP1: TLHTTPClientComponent;
    SynMemo1: TSynMemo;
Hier mal der vollständige code.
Code:
unit main;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, lclintf,
  SynMemo, IpHtml, Ipfilebroker, lNetComponents, lhttp, lNet;

type

  { TForm1 }

  TForm1 = class(TForm)
    IpFileDataProvider1: TIpFileDataProvider;
    IpHtmlPanel1: TIpHtmlPanel;
    IPS1: TLTCPComponent;
    IPSHTTP1: TLHTTPClientComponent;
    SynMemo1: TSynMemo;
    procedure FormShow(Sender: TObject);
    procedure IpHtmlPanel1Click(Sender: TObject);
    procedure IPS1Connect(aSocket: TLSocket);
    procedure IPS1Disconnect(aSocket: TLSocket);
    procedure IPSHTTP1Disconnect(aSocket: TLSocket);
    procedure IPSHTTP1DoneInput(ASocket: TLHTTPClientSocket);
    procedure IPSHTTP1Error(const msg: string; aSocket: TLSocket);
    function IPSHTTP1Input(ASocket: TLHTTPClientSocket; ABuffer: pchar;
      ASize: integer): integer;
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

procedure HTMLStringToHtmlPanel(const HTMLString:String; var HTMLPanel:TIpHtmlPanel);
var
  html:TIpHtml;
  ms:TMemoryStream;
  StrList:TStringList;
begin
  StrList:=TStringList.Create;
  StrList.Text:=HTMLString;

  ms:=TMemoryStream.Create;
  StrList.SaveToStream(ms);
  ms.Position:=0; // Von entscheidender Bedeutung, sonst geht es nicht(Vielleicht ein BUG in der LCL bzw. von TStream bzw. von TStringList.

  html:=TIpHtml.Create;
  html.LoadFromStream(ms);
  HTMLPanel.SetHtml(html);
  ms.Free; StrList.Free;
end;

{ TForm1 }

procedure TForm1.Formshow(Sender: TObject);
var Port : integer;
    ServerIP : String;
    Verbindungsaufbau : boolean;
begin
  ServerIP := '192.168.178.100';
  Port    := 80;
  Verbindungsaufbau := IPS1.Connect(ServerIP,Port);
  if not Verbindungsaufbau then Close;
  IPSHTTP1.Host:= ServerIP;
  IPSHTTP1.Connect('192.168.178.100', 80);
//  if IPSHTTP1.Connect then caption:= 'ich Seh den IPS' else Caption:= 'wo ist der IPS?';
end;

procedure TForm1.IpHtmlPanel1Click(Sender: TObject);
begin
  IPSHTTP1.SendRequest;
end;

procedure TForm1.IPS1Connect(aSocket: TLSocket);
begin
  Synmemo1.Lines.LoadFromFile('ips.htm');
//  HTMLStringToHtmlPanel(SynMemo1.Lines.Text,IpHtmlPanel1);
end;

procedure TForm1.IPS1Disconnect(aSocket: TLSocket);
begin
  IPS1.Disconnect(True);
end;

procedure TForm1.IPSHTTP1Disconnect(aSocket: TLSocket);
begin
  IPSHTTP1.Disconnect(True);
  IPS1Disconnect(aSocket);
end;

procedure TForm1.IPSHTTP1DoneInput(ASocket: TLHTTPClientSocket);
begin
  Caption:= 'ich Bin es nicht :D :P';
end;

procedure TForm1.IPSHTTP1Error(const msg: string; aSocket: TLSocket);
begin
  Caption:= msg;         // Fehlermeldung wird ausgelöst.
end;

function TForm1.IPSHTTP1Input(ASocket: TLHTTPClientSocket; ABuffer: pchar;
  ASize: integer): integer;
begin
  Caption:= 'Aber ich Bin es nicht :D :P';
end;

end.
Bin auch dankbar, wenn ich irgendwo ein Demoprogramm finden könnte, welches die Komponente [ TLHTTPClientComponent] erläutert.

Info zu meinem System:

Ubuntu 10.04
Lazarus 0.9.30-0
Verwendung von lnet.

mfg Maik


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 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