Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Von Com-Port zum WinAmp-Player (https://www.delphipraxis.net/52547-von-com-port-zum-winamp-player.html)

Islay 30. Aug 2005 19:33


Von Com-Port zum WinAmp-Player
 
Hallo liebe Delphi-Programmierer,

ich oute mich jetzt mal als völliger Neuling.

Habe ein wenig Bascom und Internetkram (html, php, ...) Erfahrung, mehr nicht.

Üblicherweise Programmiere ich Microcontroller, aber mein neues Projekt benötigt auch ein Pc-Programm und zwar geht es um Folgendes:

Am Com-Port kommen Daten an, wie die aussehen kann ich beliebig verändern, jedenfalls so 15 Signale.

Die sind:

- Nichts :-D
- PC Boot
- PC Shut Down
- PC Reboot
- Volume up
- Volume down
- next track
- previous track
- Mute
- Shuffle On/Off
- Repeat On/Off
- Play/Pause
- Stop
- Standby
- next playlist

vielleicht kommen noch ein oder zwei Funktionen dazu...

Es geht nun darum, diese Befehle wie sie am Comport ankommen zu verarbeiten und umzusetzen.

Dazu schweben mir bisher zwei Lösungskonzepte vor:

1. das einfachere

Ich simuliere mit einem Delphiprogramm eine Tastatur und lege in Winamp Hotkeys fest, die dann die entsprechenden Funktionen ausführen.
Nachteil: Ich kann nur den Winamp steuern (und z.B. keine Reboot-Funktion) und Tastenkombinationen sind belegt...

2. Ich spreche aus dem Delphi-Programm die anderen Programme und Windows an.
Nachteil: hoher Programmieraufwand...



Also eure Meinungen sind gefragt:

a) Ist das möglich?
b) Schaff ich das?
c) mit welchem Zeitaufwand rechnet ihr bei mir?
d) Wieviel Zeit würde euch bzw. einen erfahrenen Programmierer sowas kosten?
e) Wieviel Systemleistung würde für dieses Hintergrundprogramm draufgehen?

Ich Glaub das waren erstmal alle Fragen :lol:

Danke schonmal im Vorraus!

Gruß Denis

edit: Delphi 2005 ist doch Delphi.NET oder?

[edit=Christian Seehase]Kategorisierung auf Delphi Win32 geändert, da es wohl doch Win32 ist. Mfg, Christian Seehase[/edit]

Aenogym 30. Aug 2005 19:41

Re: Von Com-Port zum WinAmp-Player
 
Zitat:

Zitat von Islay
a) Ist das möglich?
b) Schaff ich das?
c) mit welchem Zeitaufwand rechnet ihr bei mir?
d) Wieviel Zeit würde euch bzw. einen erfahrenen Programmierer sowas kosten?
e) Wieviel Systemleistung würde für dieses Hintergrundprogramm draufgehen?

edit: Delphi 2005 ist doch Delphi.NET oder?

hi und herzlich willkommen in der DelphiPRAXiS :hi:

zu deinen fragen:
a) definitiv möglich
b) schaffst du auch
c) zeitaufwand ist schwer zu bestimmen. komtm auf deine delphi-erfahrung an und darauf, ob du fertige dinge nehmen möchtest, oder lieber alles selber programmierst
d) ich schätze ich hätte das nach 5 bis 7 stunden fertig
e) systemleistung ist quasi zu vernachlässigen. garantiert weniger als winamp im leerlauf braucht

edit: delphi 2005 nennt sich das neueste delphi-produkt von borland, dass IDE, compiler und den ganzen kram beinhaltet.
delphi.NET heißt die sprache an sich ;)

aenogym

Islay 30. Aug 2005 19:49

Re: Von Com-Port zum WinAmp-Player
 
Vielen Dank für deine Antwort.

Wie gesagt, Delphi Erfahrungen gleich Null, aber ich Stufe mich als schnell lernfähig ein :mrgreen:

Also bei diesem Projekt geht es mir erstmal nur um die Funktion, Grundlagen werd ich dann später nachholen :angel2:

Darum würde ich auch auf fertige Codeschnippsel zurückgreifen, aber ein Programm so wie ich es möchte gibt es glaube ich nicht...

Also ein Freund von mir hat Delphi 2005, bei dem könnte ich Programmieren, aber der kann das auch nicht :wall:

Jetzt ist die Frage, wie finde ich den Anfang?

Gibt's so'ne Art Tutorials für Com-Ansteuerung etc.?

Gruß Denis

Aenogym 30. Aug 2005 19:56

Re: Von Com-Port zum WinAmp-Player
 
also wenn du null ahnung hast, würde ich dir empfehlen, erstmal ein delphi grundlagen tutorial zu absolvieren.
>> http://dsdt.info/grundlagen/ einfach mal anschauen und nicht nur die bilder bestaunen ;)

wenn du die grundlagen drauf hast, sollte der rest kein problem sien (im zweifelsfall immer die delphi-hilfe konsultieren)

tutorials zum com-port gibts garantiert hunderte. dieses hübsche board hier hat eine mega tolle suchfunktion, die dir gleich oben interessante treffer bietet. dort einfach mal nachlesen: Hier im Forum suchencom port

aenogym

Islay 30. Aug 2005 20:42

Re: Von Com-Port zum WinAmp-Player
 
Das ähnelt Bascom ja enorm...

Werde mich da mal durchlesen und wenn Fragen auftauchen hier wieder melden.

Danke!

Gruß Denis

Islay 3. Sep 2005 23:30

Re: Von Com-Port zum WinAmp-Player
 
Hallo,

danke für diene Hilfe.

Hab nun nach einem Taschenrechner, mal das halbe Programm geschrieben.
Lese noch nicht den Comport aus, sondern erstelle erstmal Virtuelle Tastaturkommandos, die mit den Standart Winamp Hotkeys übereinstimmen.

Die jetzigen Buttons sollen dann im fertigen Programm durch die Befehle des Comports ersetzt werden,

Gruß Denis

Download

Islay 7. Sep 2005 20:44

Re: Von Com-Port zum WinAmp-Player
 
So, ich nähere mich dem Com-Port, habe aber fast nur Misserfolge :-D

Kann mir einer sagen warum ich immer ein "undefinierter Bezeichner" zurückgeworfen bekomme?

Über try and error komm ich langsam nicht mehr weiter...

Gruß Denis

Delphi-Quellcode:
unit rs232;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  SerialNG, StdCtrls;

type
  TForm1 = class(TForm)
    SerialPortNG1: TSerialPortNG;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Label2Click(Sender: TObject);
    procedure machwas2(port: TSerialPortNG);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure machwas;    
var
  port: TSerialPortNG;    
begin
  // schnittstelle aufmachen
  port := TSerialPortNG.Create(nil); // objekt kerstellen
  try    
    port.CommPort := 'COM1'; // comport einstellen
    port.BaudRate := 9600; // baud-rate einstellen
    port.Active := true; // schnittstelle öffnen

    if 1 = 1 then machwas2(port: TSerialPortNG);

  finally
    // schnittstelle zumachen
    port.Active := false;    
    freeandnil(port);
  end;
end;

 procedure machwas2(port: TSerialPortNG);
var
  text: String;
begin
  text := 'Hallo';
  port.SendString(text + #11);

end;



end.

BenjaminH 7. Sep 2005 21:17

Re: Von Com-Port zum WinAmp-Player
 
Mh wo taucht den der Fehler auf, welche weiteren angaben gibt es denn?

JasonDX 7. Sep 2005 21:18

Re: Von Com-Port zum WinAmp-Player
 
Zitat:

Zitat von Islay
Kann mir einer sagen warum ich immer ein "undefinierter Bezeichner" zurückgeworfen bekomme?
Delphi-Quellcode:
procedure machwas;    
var
  port: TSerialPortNG;    
begin
//...
end;

 procedure machwas2(port: TSerialPortNG);
var
  text: String;
begin
  text := 'Hallo';
  port.SendString(text + #11);
end;

Ich denke mal, dass er port nicht kennt.
Dies liegt daran, dass port keine Globale Variable ist, sondern in machwas deklariert wurde, und somit it machwas2 keine gültigkeit hat.
Lösungsmöglichkeit: Falls du die Geschichte in eine Klasse kapselst, kannst du port als privates Member deklarieren. Ansonsten kannst du sie als globale Varibale deklarieren (ist aber nicht allzuschön), oder als Parameter übergeben.

BenjaminH 7. Sep 2005 21:20

Re: Von Com-Port zum WinAmp-Player
 
Zitat:

Zitat von Chimaira
Dies liegt daran, dass port keine Globale Variable ist, sondern in machwas deklariert wurde, und somit it machwas2 keine gültigkeit hat.

Das war auch mein erster Verdacht, aber:
Delphi-Quellcode:
procedure machwas2(port: TSerialPortNG);

JasonDX 7. Sep 2005 21:23

Re: Von Com-Port zum WinAmp-Player
 
Zitat:

Zitat von BenjaminH
Zitat:

Zitat von Chimaira
Dies liegt daran, dass port keine Globale Variable ist, sondern in machwas deklariert wurde, und somit it machwas2 keine gültigkeit hat.

Das war auch mein erster Verdacht, aber:
Delphi-Quellcode:
procedure machwas2(port: TSerialPortNG);

oh, oops :oops: wer lesen kann, is klar im vorteil :wall:
Tja, dann wären mehr infos oder Source echt hilfreich. (Wobei ich ersteres bevorzugen würde ;) )

Islay 7. Sep 2005 21:47

Re: Von Com-Port zum WinAmp-Player
 
Also, ich habe halt völlig ahnungslos den Code im Internet gesucht, der mir an einfachsten erschien.

Also habe ich von hier Klick mich! den Code genommen.

Dann noch diese Komponente installiert und soweit bin ich jetzt...

Ich suche halt nur die einfachste Möglichkeit den COM-Port abzufragen. An dem kommt alle 500ms eine Zahl zwischen 0-16 an, dahinter vielleicht noch was zum erkennen, dass die Nachricht zu Ende ist.

Diese Zahl hätte ich danach ganz gerne in einer Variable, mehr nicht... bin für alles offen :-D


Gruß Denis

JasonDX 7. Sep 2005 22:16

Re: Von Com-Port zum WinAmp-Player
 
Ich denke, wir haben uns falsch verstanden ;)
Relevante Informationen für das derzeitige Problem wären bspw. wo der Fehler auftritt, und welcher Bezeichner unbekannt ist.
Wenn ich mir den Code im DF angucke, denke ich, dass es sein könnte (ich bin vorsichtiger mit meinen Fehleranalysen geworden ^^), dass nicht Port selbst, sondern die Paramterübergabe das Problem darstellt.
Aber am besten einfach mal den Code posten, wo der Fehler auftritt ;)

Islay 8. Sep 2005 16:41

Re: Von Com-Port zum WinAmp-Player
 
Hallo,

also der Fehler tritt hier auf:
if 1 = 1 then machwas2(port: TSerialPortNG);

Das hat mir ein Feund so empfohlen, im Originaltext steht nur
machwas2(port: TSerialPortNG);

Ruft aber halt beides die selbe Fehlermeldung auf, obwohl es ja nur aus einem angeblich funktionierenden Quellcode kopiert wurde...

Gibt es vielleicht Probleme, weil ich noch Delphi 5 nutze?

Gruß Denis

JasonDX 8. Sep 2005 19:30

Re: Von Com-Port zum WinAmp-Player
 
Hi Denis

Zitat:

Zitat von Islay
Delphi-Quellcode:
also der Fehler tritt hier auf:
 if 1 = 1 then machwas2(port: TSerialPortNG);
//Das hat mir ein Feund so empfohlen, im Originaltext steht nur
machwas2(port: TSerialPortNG);
Gibt es vielleicht Probleme, weil ich noch Delphi 5 nutze?

Delphi5 ist hier definitiv nicht das Problem, es fehlt einfach nur an den Grundlagen ;)
Wenn du eine Prozedur/Funktion deklarierst, schreibst du das mit procedure Name(Parameter: Typ; Parameter: Typ);
Hingegen beim Aufrufen einer Prozedur/Funktion müssen nur mehr die Parameter übergeben werden: Name(Variable, Variable);
Damit brauchst du nur noch aufzurufen:
Delphi-Quellcode:
machwas2(port);
Natürlich musst du port irgendwo als Variable vom Typ TSerialPortNG definiert haben :)

Islay 9. Sep 2005 16:27

Re: Von Com-Port zum WinAmp-Player
 
Klar liegt der Fehler bei mir, hät ich nicht anders erwartet, Programme sind schließlich perfekt ;-)

Also, ich kann deinen Erläuterungen folgen, muss sie aber falsch verstanden haben, denn ich bekomme kein Ergebnis zustande.

Nochmal mein kompletter Code, könnt mir vielleicht jemand mit Rotstift editieren was falsch ist, die Fehlermeldung ist immer noch die gleiche in Zeile 41 "undefinierter Bezeichner"

Tut mir Leid das ich mich so blöd anstelle...

Gruß Denis

Delphi-Quellcode:
unit rs232;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  SerialNG, StdCtrls;

type
  TForm1 = class(TForm)
    SerialPortNG1: TSerialPortNG;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Label2Click(Sender: TObject);
    procedure machwas2(port: TSerialPortNG);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  port: TSerialPortNG;

implementation

{$R *.DFM}

procedure machwas;    

begin
  // schnittstelle aufmachen
  port := TSerialPortNG.Create(nil); // objekt kerstellen
  try    
    port.CommPort := 'COM1'; // comport einstellen
    port.BaudRate := 9600; // baud-rate einstellen
    port.Active := true; // schnittstelle öffnen

    machwas2(port:);

  finally
    // schnittstelle zumachen
    port.Active := false;    
    freeandnil(port);
  end;
end;

 procedure machwas2(port: TSerialPortNG);
var
  text: String;
begin
  text := 'Hallo';
  port.SendString(text + #11);


end;


end.

JasonDX 9. Sep 2005 16:47

Re: Von Com-Port zum WinAmp-Player
 
Einmal das:
Zitat:

Zitat von Islay
machwas2(port:);

und zum anderen, das mir grad durch zufall aufgefallen ist:
Du hast keine forward-deklaration deiner Funktionen, soll heißen:
Der Compiler kennt die funktion erst, ab wann sie deklariert wurde.
soll heißen:
Delphi-Quellcode:
procedure machwas;
//code....
//Hier ist aber machwas2 noch unbekannt

procedure machwas2(port: TSerialPortNG); //erst ab hier ist sie dem compiler bekannt
Was man dagegen tun kann?
2 Möglichkeiten
  1. die machwas2-prozedur über die machwas-prozedur schieben, ist allerdings nicht die allerbeste möglichkeit
  2. den Funktionskopf im Interface-Teil der Unit bereits deklarieren ->
    Delphi-Quellcode:
    var
      Form1: TForm1;
      port: TSerialPortNG;

    procedure machwas;
    procedure machwas2(port: TSerailPortNG);

    implementation
    Damit kennt der Compiler nun die Funktionen immer und sollte damit das Problem lösen ;)

PS:
Zitat:

Zitat von Islay
Programme sind schließlich perfekt

na ja, fast :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz