Seite 1 von 3

oop Plugin

Verfasst: 11.04.2006 12:35
von edel
Moin ,

hier > OOPPlugin.rar < gibt es einen kleinen Parser der den
Umgang mit Klassen etwas vereinfachen soll.

Da es wohl noch viele Fehler gibt, bitte ich euch das ganze mal zu testen
und Bugs hier zu posten.
Im Archiv befindet sich das jaPBe / PBIDE Plugin , eine angepasste jaPBe Version, und 3 Beispiele .

Die jaPBe Version braucht man nicht unbedingt , sieht nur besser aus :
Automatisches einruecken nach Class bzw nach Endclass , Folding und
die paar zusaetzlichen Woerter.

Das Plugin kommt ungesehen in den Plugin Ordner von jaPBe und kann
nach einem Neustart von jaPBe ueber das Menu Tools aufgerufen werden.


Aufbau einer Klasse

Code: Alles auswählen

EnableOOP
Damit das ganze funktioniert muss am Anfang einmal EnableOOP
geschrieben werden.

Code: Alles auswählen

  class cTest
    set(val.l)
    get.l()
    val.l
  endclass
Das sollte sich wohl selbst erklaeren.

Code: Alles auswählen

  Procedure cTest::cTest()
    *this\val = 10
  EndProcedure
Der Konstruktor ist Optional, ein Destruktor gibt es noch nicht.
EDIT : Der Konstruktor darf keinen Wert zurueck liefern (also kein ProcedureReturn!)

Code: Alles auswählen

  Procedure cTest::set(val.l)
    *this\val = val
  EndProcedure
  
  Procedure.l cTest::get()
    ProcedureReturn *this\val
  EndProcedure

  DISABLEOOP
Mir ist bei den Methoden gerade aufgefallen das man hier auf Gross- und
Kleinschreibung achten muss.
Jede Variable (der Klasse) kann in den Methoden oder im Konstruktor mit
*this\ angesprochen werden. DisableOOP ist optional, beschleunigt das
ganze aber etwas.

Code: Alles auswählen

  *a.cTest = cTest()

   DEBUG *a\val
  
  *a\set(1234)
  
  DEBUG *a\get()
Sollte auch klar sein. ;-)


Falls mal etwas nicht geht, liegt es mit grosser Wahrscheinlichkeit am
regulaeren Ausdruck. Da hab ich Schwierigkeiten mit dem Ende einer Zeile.
Fuer die "schlimmen" Faelle wird ein log + umgewandelten Quellcode
im selben Ordner gespeichert.


Dann bedanke ich mich schonmal fuers testen :-)


Bugs :
"Declare" muss vor "Class" geschrieben werden.

Verfasst: 11.04.2006 13:22
von ts-soft
:allright: gut gemacht soweit

Folgende Wünsche, bzw. Verbesserungsvorschläge:
1. Plugin speichert Einstellung nicht, Händling sehr umständlich
2. Eine Version für die IDE! Dort wäre durch die Trigger-Unterstützung
ein wesentlich einfacheres Händling möglich.(Man würde garkeinen Unterschied zu normallem Source erfahren!)

Verfasst: 11.04.2006 13:53
von edel
Danke .

Ich war immer so begeistert von der jaPBe Pluginschnittstelle, musste
gestern aber feststellen das es alles andere als bequem ist. Werde mir
das mit dem kleinen Fenster nochmal ueberlegen.

Das Tool fuer die PBIDE ist auch fertig , habe es allerdings "vergessen"
dabei zu legen. Upload koennte aber noch was dauern, da ich das
Passwort heute morgen verloren habe.

Verfasst: 11.04.2006 14:06
von ts-soft
Wie wäre es, wenn das jaPBe-Plugin den konvertierten Source reloaded, so
das man dann debuggen, compilieren oder sonst was machen kann? (ohne
dieses kleine Fensterchen)

>> Upload koennte aber noch was dauern, da ich das Passwort heute morgen verloren habe
Kein Problem, nimm dies:
************
:lol:

Verfasst: 11.04.2006 14:27
von edel
Bei groesseren Projekten koennte das aber auch schnell in die Hose gehen,
der Code sieht aber auch alles andere als toll aus, zumindest wird das
lesen extrem schwierig , naja mal schaun .
ts-soft hat geschrieben:[...]
>> Upload koennte aber noch was dauern, da ich das Passwort heute morgen verloren habe
Kein Problem, nimm dies:
************
:lol:

Hey, das scheint zu klappen ... ;-)

Hab es hochgeladen OOPPlugin.rar

Verfasst: 11.04.2006 14:51
von ts-soft
XInclude bzw. Test_2.pb funktioniet nicht!
Vielleicht solltest Du den Source zusammenführen,
siehe auch hier: http://www.purebasic.fr/german/viewtopic.php?t=7352
Source ist mit bei, kannste verwenden bzw. ausschlachten :mrgreen:

Verfasst: 11.04.2006 17:04
von edel
Vielen Dank.

Funktioniert jetzt , dank CheckIncludePath() :-)

Verfasst: 11.04.2006 17:12
von ts-soft
hallodri hat geschrieben:Vielen Dank.

Funktioniert jetzt , dank CheckIncludePath() :-)
Schön, funzt :allright:
Falls Du noch fehler in CheckIncludePath() findest, sag mir bitte Bescheid,
bin mir nicht so sicher, ob das so immer richtig ist und es wurde leider
kaum getestet.

// Nachtrag:
BUG: UTF-8 Dateien werden nicht unterstützt. Gibt Fehlermeldung in erster Zeile!

//Nachtrag2:
Optionale Parameter werden nicht unterstützt :(
der size Parameter muß als erster generiert werden!

Verfasst: 14.04.2006 00:12
von edel
ts-soft hat geschrieben: // Nachtrag:
BUG: UTF-8 Dateien werden nicht unterstützt. Gibt Fehlermeldung in erster Zeile!
Habe noch nie etwas mit UTF-8 gemacht , werde es das naechste mal aber mit einbauen .
ts-soft hat geschrieben: //Nachtrag2:
Optionale Parameter werden nicht unterstützt :(
der size Parameter muß als erster generiert werden!
Kannst du mir ein Beispiel geben ?

Verfasst: 14.04.2006 00:27
von ts-soft
>> Kannst du mir ein Beispiel geben ?

Code: Alles auswählen

Procedure Button::Button(Id.l, X.l, Y.l, Height.l, Width.l, Text.s, Flags.l = 0); Flags soll optional sein!
  *this\X = X
  *this\Y = Y
  *this\Height = Height
  *this\Width = Widht
  *this\Text = Text
  If Id = #PB_Any
    *this\Id = ButtonGadget(#PB_Any, X, Y, Height, Width, Text, Flags)
    *this\hWnd = GadgetID(*this\ID)
  Else
    *this\ID = Id
    *this\hWnd = ButtonGadget(Id,  X, Y, Height, Width, Text, Flags)
  EndIf
EndProcedure
geht nicht, weil du 0 bzw. size ranhängst, davorsetzen wäre günstiger!

Code: Alles auswählen

Procedure _createButton(Id.l, X.l, Y.l, Height.l, Width.l, Text.s, Flags.l,size.l) ; <---------
  If size<SizeOf(Button)
    size = SizeOf(Button)
  EndIf
  *this.Button = _createGadget(size)
*this\X = X
*this\Y = Y
*this\Height = Height
*this\Width = Widht
*this\Text = Text
If Id = #PB_Any
*this\Id = ButtonGadget(#PB_Any, X, Y, Height, Width, Text, Flags)
*this\hWnd = GadgetID(*this\ID)
Else
*this\ID = Id
*this\hWnd = ButtonGadget(Id,  X, Y, Height, Width, Text, Flags)
EndIf

ProcedureReturn *this
EndProcedure
Procedure.l Button(Id.l, X.l, Y.l, Height.l, Width.l, Text.s, Flags.l)
ProcedureReturn _CreateButton(Id.l, X.l, Y.l, Height.l, Width.l, Text.s, Flags.l,0) ; <---------
EndProcedure