AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Ansteuern des Parallelports
Tutorial durchsuchen
Ansicht
Themen-Optionen

Ansteuern des Parallelports

Ein Tutorial von flomei · begonnen am 25. Mai 2003 · letzter Beitrag vom 8. Okt 2006
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von flomei
flomei
Registriert seit: 17. Jan 2003
Hallo liebe DP-User!

Immer wieder wird gefragt, wie man den Parallelport ansteuern kann. Also dachte ich mir: Fängste mal an und schreibst ein Tutorial. Ich hoffe, dass wird mir gelingen.
Ich werd gleich erstmal mit nem bisschen Theorie anfangen. Zum Aufwärmen!

Also: Ab geht´s!


MfG Florian



P.S.: Ich werde gelegentlich aus einer meiner Technik-Arbeiten zitieren.

[EDIT] Ich übernehme keinerlei Garantie für die Richtigkeit der von mir gemachten Angaben. Große Teile des Codes stammen aus dem I-Net und aus diesem Forum. Ich danke allen, die durch ihre Beiträge geholfen haben dieses Tutorial zu vervollständigen! [/EDIT]
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
 
Capable
 
#31
  Alt 20. Feb 2005, 16:45
hallo muetze,

kannst du mir vielleicht noch mal helfen?

ich verstehe nicht, wieso die variablen control, data und status nicht von den anderen prozeduren erkannt werden.

ich hab sie doch deklariert und auf unter private reingeschrieben. trotzdem kommt bei showmessage für alle drei "0".

ich suche schon seit stunden nach dem fehler, stehe aber auf dem schlauch. bitte bemühe dich doch noch mal kurz. danke!

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    RadioGroup1: TRadioGroup;
    RadioGroup2: TRadioGroup;
    procedure Button1Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure RadioGroup2Click(Sender: TObject);
  private
    { Private declarations }
  j:byte;
  Data,Status,Control:Word;
  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.RadioGroup1Click(Sender: TObject);

var Data,Status,Control:Word;

begin

  case RadioGroup1.ItemIndex of 0 : begin
                                    Data := $378;
                                    Status := $379;
                                    Control := $37A;
                                    end;

                                1 : begin
                                    Data := $278;
                                    Status := $279;
                                    Control := $27A;
                                    end;

  end;
end;

procedure TForm1.RadioGroup2Click(Sender: TObject); //j sei die Fahrregleradresse

begin

  case RadioGroup2.ItemIndex of 0 : begin
                                    j:=$E0;
                                    end;

                                1 : begin
                                    j:=$E1;
                                    end;

                                2 : begin
                                    j:=$E2;
                                    end;

                                3 : begin
                                    j:=$E3;
                                    end;
  end;
end;



procedure ControlOut;

var Control:word;

begin

    asm //erklärt dem Compiler, dass Assembler Code anfängt
    mov dx,Control
    mov al,4
    out dx,al
    end;

end;

procedure DataOut(j:byte);

var Data:word;

  begin
    asm //erklärt dem Compiler, dass Assembler Code anfängt
    mov dx,Data
    mov al,j
    out dx,al
    end;

end;



procedure TForm1.Button1Click(Sender: TObject);

 begin

 ControlOut;
 DataOut(j);
 showmessage(inttostr(j));
 showmessage(inttostr(Control));
 showmessage(inttostr(Status));
 showmessage(inttostr(Data));

 end;

end.
  Mit Zitat antworten Zitat
Muetze1
 
#32
  Alt 20. Feb 2005, 17:38
Moin!

Es ist schön deklariert im private Abschnitt der Form, aber wenn du die Variablen mit gleichen Namen nochmals deklarierst in der RadioGroup1Click(), dann nutzt der Compiler natürlich diese. Diese Variablen sind aber lokal in der Procedure definiert und haben nix mit denen in der Klasse zu tun.

Mit anderen Worten: Lösche die Deklaration der Variablen in der RadioGroup1Click() Methode.

MfG
Muetze1
  Mit Zitat antworten Zitat
Capable
 
#33
  Alt 23. Feb 2005, 12:46
hallo muetze,

also folgendes: ich möchte den variablen data, status und control einfach die verschiedenen adressen, entsprechend, ob der programmbenutzer lpt1 oder lpt2 nutzen will, zuordnen.

wie bekomme ich es also hin, dass die werte, die ich den drei variablen zuordne im ganzen form erkannt werden?

oder ist da eine ganz andere vorgehensweise zu empfehlen? vielleicht indem ich einfach in den einzelnen prozeduren schreibe

if radiogroup1.itemindex = 1 do begin... ?

danke dir noch einmal
  Mit Zitat antworten Zitat
Muetze1
 
#34
  Alt 23. Feb 2005, 16:34
Moin!

Lese dir erstmal ein Grundlagen Tutorial durch und eins über Klassen, sonst kommen wir hier nicht weiter...

Ein letzter Versuch, dann gebe ich auf:

RadioGroup1Click() ist eine Methode der TForm1 und hat damit Zugriff auf die Variablen und Eigenschaften der Klasse TForm1. Wenn also nun die Klasse TForm1 Variablen Namens Data, Status und Control definiert hat, dann sind sie in der Methode gültig. Wenn du nun aber auf die durchaus witzige Idee kommst Variablen mit gleichen Namen nochmals lokal in der Procedure zu deklarieren, dann haben diese eine höhere Wertigkeit im Scope (Bereich) der lokalen Funktion und Zugriffe auf Variable mit den Namen werden dann auf die lokalen Variablen ausgeführt anstatt auf die Klassenvariablen.

Also zum zweiten Male: entferne die Deklaration der Variablen Data, Status und Control aus der RadioGroup1Click().

MfG
Muetze1
  Mit Zitat antworten Zitat
izzi

 
Delphi 6 Personal
 
#35
  Alt 31. Mär 2005, 11:55
Hallo erstmal an alle!

Der Zugriff unter WIN XP ist wie schon alle mitbekommen haben nicht so ohne weiteres möglich.
Das Problem hatte ich auch.

Unter WIN XP gibt es aber die möglichkeit, das Programm im Kompalibitätsmodus laufen zu lassen.

Das heißt: Man klickt mit der rechten Maustaste auf die *.exe die man im Kompabilitätsmodus laufen lassen will. Danach auf Registerkarte Kompabilität und anschließend den Modus einstellen.

Nun läuft das Programm wie unter WIN 95, 98 oder 2000 oder eben XP.

Das alles übernehmen und das Programm starten.

Keine Fehlermeldung mehr von wegen PREVILIGIERTE ANWEISUNG:

Viel Spaß beim Ansteuern des LPT.

BYE
  Mit Zitat antworten Zitat
Muetze1
 
#36
  Alt 31. Mär 2005, 13:26
Moin!

Zitat von izzi:
Hallo erstmal an alle!

Der Zugriff unter WIN XP ist wie schon alle mitbekommen haben nicht so ohne weiteres möglich.
Das Problem hatte ich auch.

Unter WIN XP gibt es aber die möglichkeit, das Programm im Kompalibitätsmodus laufen zu lassen.

Das heißt: Man klickt mit der rechten Maustaste auf die *.exe die man im Kompabilitätsmodus laufen lassen will. Danach auf Registerkarte Kompabilität und anschließend den Modus einstellen.

Nun läuft das Programm wie unter WIN 95, 98 oder 2000 oder eben XP.

Das alles übernehmen und das Programm starten.

Keine Fehlermeldung mehr von wegen PREVILIGIERTE ANWEISUNG:

Viel Spaß beim Ansteuern des LPT.

BYE
Super! Toll! Und? Was haben wir nun? eine immernoch illegale Anwendung die illegalerweise direkt auf die Hardware versucht zu zu greifen, Windows dazwischenfunkt, etc.

Also, wenn, dann nutze die WinAPI die einem die Möglichkeiten bietet um die parallele Schnittstelle ordentlich anzusprechen. Nutze die Routinen und es läuft auf allen 32bit Windowsversionen, du machst dir nicht dein ZIP am Parellelport kaputt und der Drucker druckt auch keine komischen Zeichen. Auch das Bus System wie es das ZIP Laufwerk benutzt am Parallelport wird ordentlich unterstützt.

Warum versuchen immer alle am Problem drumherum zu manschen anstatt das Problem an der Wurzel zu packen und dort zu lösen?

MfG
Muetze1
  Mit Zitat antworten Zitat
dragi

 
Delphi 2005 Personal
 
#37
  Alt 23. Apr 2005, 02:41
@Muetze1 und auch sonst alle die sich auskennen:

Gibt es denn irgendwo ein Beispiel wie man dn Parallelport mit der WinApi anspricht? Ich habe leider noch nicht das Wissen die sachen aus dem SDK nach Delphi zu übertragen und bin nun auch an dem Punkt an dem ich den Parallelport ansprechen möchte

Gruss

Dragi
  Mit Zitat antworten Zitat
mallowd

 
Delphi 5 Professional
 
#38
  Alt 31. Mär 2006, 13:05
io.dll ist echt supi ^^ habe mich auch zuerst gewundert, warum der assemblercode nicht unter xp läuft, aber dann die erklärung und erlösung
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

 
Delphi XE7 Architect
 
#39
  Alt 8. Okt 2006, 21:01
Sorry, das ich das Thame nochmal hervorhole...

Ich habe einen Laptop ohne Parallele Schnittstelle. Ich habe allerdings einen USBtoLPT-Adapter, unter welchem Port, muss ich den ansprechen. Ich habe alle hier genannten ausprobiert, doch er reagiert in keinster weise!
Geht das überhaupt?

Gruss
Christian
Christian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 19:42 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