Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi Ansteuern des Parallelports (https://www.delphipraxis.net/5152-ansteuern-des-parallelports.html)

Capable 20. Feb 2005 16:45

Re: Ansteuern des Parallelports
 
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.

Muetze1 20. Feb 2005 17:38

Re: Ansteuern des Parallelports
 
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

Capable 23. Feb 2005 12:46

Re: Ansteuern des Parallelports
 
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

Muetze1 23. Feb 2005 16:34

Re: Ansteuern des Parallelports
 
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

izzi 31. Mär 2005 11:55

Re: Ansteuern des Parallelports
 
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

Muetze1 31. Mär 2005 13:26

Re: Ansteuern des Parallelports
 
Moin!

Zitat:

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

dragi 23. Apr 2005 02:41

Re: Ansteuern des Parallelports
 
@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

mallowd 31. Mär 2006 13:05

Re: Ansteuern des Parallelports
 
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 :firejump: :corky: :hello:

Cyberbob 8. Okt 2006 21:01

Re: Ansteuern des Parallelports
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr.
Seite 4 von 4   « Erste     234   

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