Gemischtes / mishmash

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

User avatar
Chris
Posts: 4898
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

Gemischtes / mishmash

Post by Chris »

Hi Horst,

Right click with the mouse in the line somewhere inside the { and } and then from the context menu select "Display parameters". Alternatively, put the cursor with the keyboard inside there and press CTRL+K. This will show you a list with all the constructors available and as you can see this logic param stands for "append" (if you want to append if there's an already existing file, or just truncate it).
Chris Pyrgas

XSharp Development Team
chris(at)xsharp.eu
User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post by Horst »

Danke Chris und Wolfgang
User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post by Horst »

Hallo
Habe da ein Problem mit dem Round ()
nMaxRow := Round (33.25,0) - funktoniert
nMaxRow := Round ((25/768*900),0) - Ausgabe = 0 falsch
nMaxRow := Round (25/768*gnBildhoehe,0) - Ausgabe = 0 falsch
nMaxRow := Round (gnBildhoehe,0) - funktioniert
Ist das ein Bug ?
Gruss
Horst
User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post by Horst »

hmmm
nZwei := 25/768*900

nZwei ist Float und gibt 0 aus.
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gemischtes / mishmash

Post by wriedmann »

Hallo Horst,
was macht 25.0/768.0*900.0?
Das führt auch in VO zu komischen Ergebnissen....
Mit dem .0 zwingst Du den Compiler, float anzunehmen, sonst sind das integer.
Und mit Integer Division On gibt 25/768 ganz einfach 0 und das kannst Du dann multiplizieren womit Du willst, kommt immer 0 raus.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post by Horst »

Hallo Wolfgang
Musste deine Post 2mal lesen. :-)
In VO hatte das immer geklappt.
Danke für den Tipp.
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gemischtes / mishmash

Post by wriedmann »

Hallo Horst,
auch in VO hängt das von den Compiler-Optionen ab
Deshalb schreibe ich numerische Literalein VO IMMER mit .0, außer ich will sie wirklich als Ganzzahl haben.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post by Horst »

Hallo
Function Start ()
oCgi := CgiKlasse {} -> Construtor lädt self:cCSS_File := "c:blabla"
oCgi:TuEtwas ()

Method TuEtwas()
oHtml := HtmlKlasse {a,b,c}

Method Constructor (a,b,c) class HtmlKlasse
Vorher -> cBuffer := StrTran (cBuffer, "{CSSFILE}" , gcCssFile)

Wie kann ich nun sauber auf die Variable cCSS_File von der CgiKlasse zugreifen ? Globals kann ich nicht nehr verwenden.

Gruss Horst
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Gemischtes / mishmash

Post by wriedmann »

Hallo Horst,
bitte fang für jedes dieser Dinge einen neuen Thread mit einem aussagekräftigen Betreff an, dann tun sich auch andere leichter.

Aber nun zu Deinem Problem: in .NET kannst Du das mit einem sogenannten Singleton lösen, d.h. einem Objekt, das es nur einmal gibt.

Als Beispiel mal hier folgende Klasse (einfach so reingeschrieben):

Code: Select all

class GlobaleWerte
static protect _oCurrent as GlobaleWerte
protect _cDataPath as string
static constructor()
  _oCurrent := GlobaleWerte{}
  return
protected constructor()
  return
static property DataPath as string get _oCurrent:_cPath set _oCurrent::cPath := value
Zugreifen kannst Du dann von überall her zum Lesen und Schreiben (wenn nur Lesen erwünscht ist, nur den get-Teil des Property implementieren):

Code: Select all

GlobaleWerte.DataPath := "c:ProgDaten
oder

Code: Select all

cPath := GlobaleWerte.DataPath
Zur Erklärung: der Constructor der statischen Klasse wird bei der ersten Verwendung der Klasse aufgerufen und initialisiert _oCurrent.
Da der "normale" Constructor als protected definiert ist, kann er nur innerhalb der Klasse selber aufgerufen werden, Du kannst also ein Objekt dieser Klasse gar nicht erzeugen.
Die statischen Properties dieser Klasse sind die einzigen, die auf die Klassen-Interna Zugriff haben und damit arbeiten können, bzw, sie nach außen weiterleiten können.
Das ist jetzt eine vereinfachte Version - bei mir intern definiere ich da nur ein Dictionary, und spare mir die einzelnen Protect-Variablen - das Property ist dann der einzige Code, den ich schreiben muss. Das habe ich aber hier der einfacheren Verständlichkeit halber weggelassen.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Horst
Posts: 336
Joined: Tue Oct 13, 2015 3:27 pm

Gemischtes / mishmash

Post by Horst »

Hallo Wolfgang
Sorry das kapier ich nicht. Das geht so ?

class GlobaleWerte
static protect _oCurrent as GlobaleWerte
protect _cDataPath := "" as string
static constructor()
_oCurrent := GlobaleWerte{}
return
protected constructor()
return
static property DataPath as string get _oCurrent:_cPath set _oCurrent::cPath := value
end class

Function Start ()
oCurrent := Globalewerte {}
oCgi := CgiKlasse {} ->
Construtor () class CgiKlasse
GlobaleWerte.DataPath := "c:ProgDaten
oCgi:TuEtwas ()

Method TuEtwas()
oHtml := HtmlKlasse {a,b,c}

Method Constructor (a,b,c) class HtmlKlasse
cBuffer := StrTran (cBuffer, "{CSSFILE}" , GlobaleWerte.DataPath)

und die Werte sind dann wieder default/leer wenn die Function Start () aufgerufen wird ?

Gruss Horst
Post Reply