![]() |
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. |
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 |
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 |
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 |
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 |
Re: Ansteuern des Parallelports
Moin!
Zitat:
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 |
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 |
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:
|
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 01:15 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 by Thomas Breitkreuz