Seite 1 von 2

ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Mo, 18. Aug 2014 21:20
von satmax
Ich habe heute ActiveX Controls gefunden, wo sogar Hilfebeispiele für Xbase++ enthalten sind. Es gibt da jede Menge verschiedener Controls. Mir angetan hat es das Grid-Gantt Control. Demo gibt es Gratis, auch ein Helper Programm wird installiert wo man sich einiges zusammenklicken kann, auch für Xbase++

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 19. Aug 2014 3:41
von AUGE_OHR
satmax hat geschrieben:Ich habe heute ActiveX Controls gefunden, wo sogar Hilfebeispiele für Xbase++ enthalten sind.
WOW ... das ist aber selten :!:

interessant auch das kein o:subscribeEvent() verwendet wird sondern direkt auf den o:MouseMove Event zugegriffen wird.

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 19. Aug 2014 8:48
von brandelh
sieht gut aus, hast du auch einen LINK ? ;-)

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 19. Aug 2014 8:54
von satmax
brandelh hat geschrieben:sieht gut aus, hast du auch einen LINK ? ;-)
Dem kann geholfen werden: http://exontrol.com/index.jsp :D

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 19. Aug 2014 13:14
von Wolfgang Ciriack
Sehr erstaunlich, dass man mal Beispielcode in XBase++ findet =D>

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 19. Aug 2014 13:28
von satmax
Wolfgang Ciriack hat geschrieben:Sehr erstaunlich, dass man mal Beispielcode in XBase++ findet =D>
Umso mehr hat es mich überrascht hier im Forum noch nichts darüber gelesen zu haben...

Möglicherweise gibt es sie ja doch, die große XUGG, also Xbase++ UnderGroundGroup. :lol: :lol:

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: So, 24. Aug 2014 9:41
von Rudolf
Hallo,
also mich würde das Grid Control sehr interessieren, sollten noch andere das Tool verwenden, wären Beispiele interessant.
Grüße
Rudolf

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Mo, 25. Aug 2014 14:00
von satmax
Hallo Rudolf,

das Grid habe ich mir noch nicht angesehen, das Gantt Modul sieht aber sehr vielversprechend aus. Lade Dir einfach das Grid Control runter. Mit dem ExHelper Tool kannst Du dir ganz einfach für viele Beispiele den Xbase++ Code generieren und damit sehr schnell experimentieren:

Code: Alles auswählen

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oColumns

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:DrawGridLines := -1/*exAllLines*/
		oGrid:SetProperty("BackColorLevelHeader",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oColumns := oGrid:Columns()
			oColumn := oColumns:Add("Photo")
				oColumn:AllowSizing := .F.
				oColumn:Width := 32
			oColumns:Add("Personal Info")
			oColumns:Add("Title")
			oColumns:Add("Name")
			oColumns:Add("First")
			oColumns:Add("Last")
			oColumns:Add("Address")
			oColumn1 := oColumns:Item("Name")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Mo, 25. Aug 2014 14:24
von Rudolf
Hallo Markus,
danke fürs Beispiel, schaut relativ einfach aus, werde das Grid mal testen ob es für mich passt.
Grüße
Rudolf

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Sa, 20. Sep 2014 10:48
von UliTs
Rudolf hat geschrieben:Hallo Markus,
danke fürs Beispiel, schaut relativ einfach aus, werde das Grid mal testen ob es für mich passt.
Grüße
Rudolf
Gibt es schon Erfahrungswerte?

Uli

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Sa, 20. Sep 2014 11:17
von Rudolf
Hallo,
also mir fehlt noch die Zuordnung zu einer DBF, ich muss in der Datenbank wie mit dem Xbase browser navigieren können, auch wenn es sehr viele Datensätze sind.
Grüße
Rudolf

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Mo, 22. Sep 2014 16:30
von AUGE_OHR
Rudolf hat geschrieben:also mir fehlt noch die Zuordnung zu einer DBF, ich muss in der Datenbank wie mit dem Xbase browser navigieren können, auch wenn es sehr viele Datensätze sind.
das ist ja nun auch der Part den "du" schreiben musst.
aber, ähnlich wie bei SQL, sollte man das Listen-Control nicht "mit allen Datensätzen" befüllen sondern nur so viel wie man "sehen" kann.
du musst dir also eine eigene Class schreiben für deinen "Skipper" und das o:Keyboard überlagern mit deinen neuen Method(en) die du für so eine (schnelle) Anzeige benötigst.

p.s. das ganze Control sieht mir aus wie ein ListView.

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 23. Sep 2014 9:35
von Rudolf
Hallo Jimmy,
genau so eine Klasse suche ich seit Jahren. Habe selbst mal begonnen für SQL eine zu schreiben, war aber zu langsam und kompliziert. Ich befürchte auch dass das neue XBase++ mit SQL für mich nicht verwendbar wird, da ich in den meisten Dialogen eine inkrementelle Suche für die Tabelle habe und das sicher mit vielen Datensätzen nicht gehen wird. Steffen hat zwar mal geschrieben dass sie das Problem gelöst haben, aber ich glaube es nicht wirklich.
Das Control wird leider dann für mich auch nicht verwandbar sein.
Grüße
Rudolf

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 23. Sep 2014 11:15
von satmax
SQL und inkrementelle Suche funktioniert mit TopDown, habe ich im Einsatz. Das mit dem ActiveX Control sollte ähnlich gehen, habe ich mir aber noch nicht angesehen und wird so schnell wohl auch nichts.

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 23. Sep 2014 11:43
von Rudolf
Hallo, dann werde ich mir Topdown nochmal genauer anschauen, habe eine Lizenz aber verwende lieber eXpress++

Grüße
Rudolf

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 23. Sep 2014 12:48
von satmax
Speziell bei TD <-> SQLExpress hat sich was getan. Ich hatte da vor ca. einem 1/2 Jahr viel Kontakt mit Clayton und er hat einiges angepasst bzw. übernommen, unter anderem auch SqlISearch.

Grob funktioniert das nun so:

Code: Alles auswählen

 oCursor:cargo:=Array(3)   // for Table, Searchfield and addional where....

               oCursor:cargo[1]:= "Mitarbeiter"       // Table
               oCursor:cargo[2]:= "Name1"             // Searchfield
               oCursor:cargo[3]:= " AND MitarbeiterHatSchulung=1"   // you can put anything more in this string (Where Clausel)


               tdSqlIsearch(oCursor,"Name1",13.60,65.2,aFlds,20,cLabel,'@!',,;
                '  Inkrementelle Suche  -  Stammdaten Mitarbeiter',;
                     0,0,,,,,,,tdSetFont('get'),,,.F.,;  // not Modal
                     ,,.T.,;                             // turn on mouse Wheel response
                       tdSetColor("nDlgBg2"),,.T.)       // Dlg color for 2nd level Demo windows

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Di, 23. Sep 2014 20:57
von AUGE_OHR
Rudolf hat geschrieben:dann werde ich mir Topdown nochmal genauer anschauen ...
du hast doch auch den Source zu Topdown :-"

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Do, 02. Okt 2014 19:37
von satmax
Ich habe mir nun vor ein paar Tagen das, vielmehr die Controls von eXontrol (http://www.exontrol.com) gekauft und muss sagen ich bin bisher sehr zufrieden damit. 2-3 mal den Support kontaktiert und immer innerhalb einer Stunde eine perfekte Antwort bekommen.

Warum DIE Controls? Eigentlich wollte ich nur G2antt, dann hatten die mir plötzlich ein Sonderangebot vorgeschlagen, 5 beliebige Tools, maximal €549,-

Da habe ich mich kurzfristig entschieden:

ExG2antt
ExSchedule
ExGrid
ExFileVw
ExList

Für all diese Controls gib es im ExHelper viele Xbase++ Beispiele!

Das G2Antt lauft schon ganz gut und ich konnte damit heute schon den ersten Kunden beeindrucken. :) Für die Ressourcenplanung finde ich dieses Modul nahezu perfekt: relativ einfach einzubinden und schnell im Betrieb, dazu auch noch ein fairer Preis. Und ja, natürlich arbeite ich inzwischen schon mit Xbase++ V2. :)

In Summe finde ich Xbase++, SQLExpress und List&Label eigentlich schon als ganz gute Lösung. Die ActiveX Controls von eXontrol sind dann das Sahnehäubchen oben drauf. :D

Auch noch ein Danke an die Forenmitglieder die mir bei ActiveX auf die Sprünge geholfen haben.

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Fr, 03. Okt 2014 10:09
von brandelh
Frage, kommt der "Xbase++ Zugang" als Quellcode oder braucht man gar keinen ?
Kann man also den Source Code der das Verwendet einfach mit jeder Version von Xbase++ kompilieren (die ActiveX unterstützt) ?

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Fr, 03. Okt 2014 10:18
von Rudolf
Hallo,
wie hast Du den Datenzugriff beim Grid gelöst ? Über ADO ?

Grüße
Rudolf

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Fr, 03. Okt 2014 11:22
von satmax
Braucht man nicht, einfach das ActiveX Control installieren. Läuft mit jeder Xbase Version. Optional kann man den Source der ActiveX Controls auch kaufen. IMHO braucht man den nicht.

grob geht das so:

Code: Alles auswählen

oG2antt:= XbpActiveXControl():new( oDa, , {11,20}, {bSize[1]-22,bSize[2]-165} )
oG2antt:CLSID := "{CD481F4D-2D25-4759-803F-752C568F53B7}"
oG2antt:license:="xxxxxxxxxxxx"  // Braucht man beim Demo nicht!
oG2antt:create()


// Dann diverse Einstellungen:
oG2antt:BeginUpdate()

oG2antt:OnResizeControl := 1/*exResizeChart*/
oG2antt:ColumnAutoResize := .t.

oG2antt:Chart():OverviewVisible := -1/*exOverviewShowAll*/

oG2antt:DrawGridLines := -1/*exAllLines*/
oG2antt:GridLineStyle := 12/*exGridLinesDash*/
oG2antt:ScrollBySingleLine := .T.

oG2antt:DblClick := {|Shift,X,Y| OnDblClick(oG2antt,Shift,X,Y,oAppDlg, oAppMenu)} /*Occurs when the user dblclk the left mouse button over an object.*/

...

oChart           := oG2antt:Chart()
oChart:WeekDays  := "Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag"
oChart:UnitWidth := 24 // 350
oChart:UnitScale := 65536 // /* 4096 exDay */  /*65536 exHour*/ /* 1048576 exMinute*/
oChart:SetProperty("PaneWidth",.F.,128)
oChart:Bars:Item("Task"):OverlaidType := 4611 // 4611// 515/* 3 exOverlaidBarsStack*/ /* 4 exOverlaidBarsCascade*/

oChart:MarkTimeZone("Z1",date(),date()+1,12895487,";;<b>Heute</b>")
oChart:FirstWeekDay := 1/*exMonday*/
...


Was auch geht ist die eXcontrol eigene Scirptsprache. Folgender Code reicht völlig um das Gannt Diagramm zu drucken (Vorschau):

Code: Alles auswählen

// Laut Hilfe: oG2antt:Template := "Dim p;p = CreateObject(`Exontrol.Print`);p.PrintExt = Me;p.AutoRelease = False;p.Preview()

// Meine Lösung:
LOCAL Template := "dim p;p=CreateObject(`Exontrol.Print`);"+;
			  "p.AutoRelease=True;"+;
			  "p.PageOrientation = " + STR(exLandscape)+";"+; 
			  "p.PrintExt=Me;p.Preview()"
										  
			oG2antt:ExecuteTemplate(Template)
Das habe ich heute zum ersten mal versucht, könnte manches vereinfachen.
Ein kleines Problem dabei habe ich noch, die Vorschau wird hinter meinem Programm angezeigt. Ich muss das Fenster also noch in den Vordergrund holen.

Beinahe sämtliche Einstellungen kann man im exHelper ausprobieren und sich dann den Xbase Source anzeigen lassen. Alles ist als Demo verfügbar. einzige Einschränkung ist ein Copyright Hinweis.

Beim Ausliefern die DLL(s) mitgeben und mit
regsrv32 ExG2ann.dll
regsrv32 ExPrint.dll
...

registrieren. Fertig.

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Fr, 03. Okt 2014 11:27
von satmax
Rudolf hat geschrieben:Hallo,
wie hast Du den Datenzugriff beim Grid gelöst ? Über ADO ?

Grüße
Rudolf
Die Grid habe ich noch nicht im Einsatz. Der Plan ist aber, das ich die Grid vorerst nur zum Anzeigen der Daten Verwende. Da ich mit SQLExpress arbeite hole ich mir die Daten einfach per SQLSelect und verwende Sie dann ähnlich wie bei einem Array Browser. Solange man eine übersichtliche Menge an Spalten hat, kann man so auch 1000 Datensätze innerhalb einer Sekunde anzeigen. Aber auch das bearbeiten und speichern sollte so kein Problem sein.

Beim Gannt (Resourcenplanung) mache ich das so, funktioniert einwandfrei.

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Fr, 03. Okt 2014 11:39
von Rudolf
Hallo Markus,
danke für die Inof, ich verwende auch SQLEXPRESS, hast Du vielleicht ein paar Zeilen Code wie man die Tabelle im Control aufbauen kann ? Oder finde ich das im exHelper ?
Grüße
Rudolf

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Fr, 03. Okt 2014 11:41
von satmax
1:1 aus dem exHelper kopiert:

Code: Alles auswählen

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:Columns():Add("desc"):SortType := 3/*SortDateTime*/
		oItems := oGrid:Items()
			oItems:AddItem("1/1/2001 11:00")
			oItems:AddItem("1/1/2001 10:10")
			oItems:AddItem("1/3/2003")
			oItems:SortChildren(0,0,.F.)

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN

Re: ActiveX Controls auch für Xbase++ (+Beispiele)

Verfasst: Fr, 03. Okt 2014 11:51
von satmax
oder so:

Code: Alles auswählen

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:Columns():Add("desc"):SortType := 3/*SortDateTime*/
		oItems := oGrid:Items()
			oItems:AddItem("1/1/2001 11:00")
			oItems:AddItem("1/1/2001 10:10")
			oItems:AddItem("1/3/2003")
			oItems:SortChildren(0,0,.F.)

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
Aus

Code: Alles auswählen

oItems:AddItem("1/1/2001 11:00")
wird dann so etwas für SQLExpress:

Code: Alles auswählen

oItems:AddItem(::oCurs:FieldGet("TerminVon"))