class from .....

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

class from .....

Beitrag von Manfred »

Hallo,

wenn ich das hier stehen habe:

class drucker from datenbank, xbpPrinter
....
endclass

wie muß ich eigentlich weiter vorgehen, um an die Methoden von xbpPrinter.

z.B.

oDrucker := drucker():new()

test := oDrucker:cDevname

zu kommen?
Ich denke ich habe die methoden und Membervar durch das from schon erreichbar gemacht? Stattdessen bekomme ich ein NIL zurück.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16511
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
hast Du es mal mit test := oDrucker:xbpPrinter:cDevname versucht?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

bei abgeleiteten Klassen kann man auf eindeutige Ivars und Methoden direkt zugreifen:

Code: Alles auswählen

CLASS Eins
   VAR EinsName
...
CLASS Zwei
   VAR ZweiName
...
CLASS Neu FROM Eins,Zwei
... 
   ::EinsName := "EinsName"
   ::ZweiName := "ZweiName"
...
oNeu := Neu():New()...
? oNeu:EinsName -> das geht
? oNeu:ZweiName -> das geht
wenn aber beide Klassen einen gleichen Namen (iVar oder Methode) haben, oder aber in der aktuellen ein gleicher Namen erneut belegt wird, muß man die SUPER Methode direkt ansprechen...

Code: Alles auswählen

CLASS Eins
   VAR Name
...
   ::Name := "EinsName"
...
CLASS Zwei
   VAR Name
...
   ::Name := "ZweiName"
...
CLASS Neu FROM Eins,Zwei
...

oNeu := Neu():New()...
? oNeu:Name -> hier steht immer EinsName
? oNeu:Zwei:Name -> das sollte ZweiName stehen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

oDrucker := drucker():new()

test := oDrucker:cDevname
Bei deinem Beispiel fällt mir noch auf, dass du cDevName schreibst,
laut Doku muss es aber einfach devName lauten...

Code: Alles auswählen

XbpPrinter():devName 
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

@martin,

das klappt so nicht.

@hubert,

stimmt, es ist devname. War aber ein schreibfehler. Der richtige Name klappt auch nicht.

hier mal mein Versuch:

Code: Alles auswählen

CLASS drucker FROM datenbank, XbpPrinter
// Speichervariablen
      EXPORTED:
// Feldvariablen in DB
      VAR funktion,;
          papier,;                                                              // Wenn Drucker Einzelblatt verarbeitet
          dez_1,;
          dez_2,;
          dez_3,;
          dez_4,;
          dez_5,;
          dez_6,;
          dez_7,;
          dez_8,;
          dez_9,;
          dez_10,;
          dez_11,;
          dez_12,;
          dez_13
      METHOD erzeugestruktur
      METHOD druck_fehler
      METHOD felder
      METHOD fett_ein
      METHOD fett_aus
      METHOD getdrucker
      METHOD schmal_druck
      METHOD normal_druck
      METHOD init
      METHOD maske
      METHOD pruef
      METHOD druckvkfuss
      METHOD druckvlfuss
ENDCLASS
********************************************************************************
METHOD drucker:druck_fehler()
       MEMVAR cPort

       cPort := self:XbpPrinter:devName
       SET DEVICE TO PRINTER
       SET PRINTER TO OBJECT self
RETURN(SELF)

Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,
cPort := self:XbpPrinter:devName
SET DEVICE TO PRINTER
SET PRINTER TO OBJECT self
RETURN(SELF)
das sieht mir aber stark nach drucken nach Clippermanier aus.
Hast du denn in der INIT auch einen XbpPrinter() erzeugt und einen physischen zugeordnet ?

Und die Zeile > SET PRINTER TO OBJECT self < gibt es zumindest in der 1.82 so nicht ... und auch in 1.90 kann set printer to nur ein 'LPTx' oder einen Dateinamen enthalten...

> cPort := self:XbpPrinter:devName

cPort würde hier nicht LPTx sondern höchstens den Namen des Druckerobjects (siehe Drucker in Systemsteuerung) enthalten.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hallo Manfred,

das sieht mir aber stark nach drucken nach Clippermanier aus.
ja, ist ein Programm was umgestrickt werden muß, aber langsam.
Hast du denn in der INIT auch einen XbpPrinter() erzeugt und einen physischen zugeordnet ?
nein.
Und die Zeile > SET PRINTER TO OBJECT self < gibt es zumindest in der 1.82 so nicht ... und auch in 1.90 kann set printer to nur ein 'LPTx' oder einen Dateinamen enthalten...
Du hast Recht, aber ab 1.90 geht das. Ob es so mit self klappt habe ich noch nicht probiert. Aber sollte eigentlich...
> cPort := self:XbpPrinter:devName

cPort würde hier nicht LPTx sondern höchstens den Namen des Druckerobjects (siehe Drucker in Systemsteuerung) enthalten.
Ich muß mit einem alten Programm über das Netzwerk drucken...
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

> ich muß mit einem alten Programm über das Netzwerk drucken ...

Entweder du programmierst die Druckausgabe komplett auf XbpPrinter(), dann muss dieser auch erzeugt werden (sieh dir hierzu auch meine HBPrinterX - Spezialanwendung an),

oder

du druckst wie bisher über das Netz, in altem Clipper style:

Windows ordnet Drucker zu

NET USE LPT3 \\SERVER\DRUCKER ...

in der Anwendung

set printer to lpt3
oder aber (wenn es jetzt geht - weiß ich nicht) den direkten UNC Namen (ohne NET USE)

set printer to \\SERVER\DRUCKER ...
set printer on - wenn du über ? drucken willst oder
set device to printer - wenn es über @ say geschehen soll...

? cSteuervar+cTextjeZeile... ist dabei meiner Meinung nach die einzig machbare Variante, da @ say beim Drucken auch die Steuerzeichen mitzählt...

Alles andere dazwischen, ist nicht nur umständlich, sonder auch kaum zu beherschen !

nun zu deinem Beispiel, ohne ein XbpPrinter():new():create() ... irgendwo in deiner Klasse, wirst du NIE ein XbpPrinter-Object haben, welches du abfragen kannst.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Moin Hubert,

ist mir auch jetzt alles bewußt geworden. Irgendwie habe ich gestern einen Denkfehler produziert. Manchmal hilft es einfach mal darüber zu schlafen.

Danke
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21189
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Wie ich gerade festgestellt habe, habe ich einen viel zu großen Aufwand getrieben. Das geht alles recht einfach über die Bühne.

oPrinter := xbpPrinter():new():create()

SEt PRINTER TO OBJCET oPrinter

SEt DEVICE TO PRINTER

blabla

SET PRINTER TO
SET DEVICE TO SCREEN

Und schon wird der aktuelle Drucker zur Ausgabe genommen.
Das genügt im Moment für die Umstellung.

Wichtig war/ist nur, dass ich einen freigegebenen Drucker eines anderen PC benutzen kann damit.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten