Seite 1 von 3

Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 14:08
von satmax
Hallo,

ich habe bisher mit ActivX noch nichts gemacht. kann man so etwas in Xbase++ einbinden: "Studio Controls for COM" http://www.dbi-tech.com/StudioControlsC ... reens.aspx

Gibt es ein Xbase - ActivX Tutorial?

Gruß
Markus

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 14:37
von Lewi
Ein xBase ActiceX-Tutorial?

Da ActiveX-Komponeten externe Tools oder Anwendungen sind, kann es von der Sache her schon kein (allgemeines) xBase-Tutorial geben. Allerdings gibt es bei Komponenten i.d.R. von Seiten der Anbieter eine Dokumentation bei der auch Beispiele für VB oder C++ enthalten sind.

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 15:07
von Tom

Code: Alles auswählen

kann man so etwas in Xbase++ einbinden
Kann man. Eine Alternative ist die "Xtreme Suite" von Codejock:

www.codejock.com

Oder man macht es per Ownerdrawing selbst. Nach Durchquerung der - zugegeben nicht eben flachen - Lernkurve ist das m.E. die feinste Möglichkeit. Was da in den Beispielen gezeigt wird, habe ich. Und sogar noch schöner (und sehr leicht und verlässlich anzusteuern).

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 16:00
von satmax
Gibt es zum Thema "Ownerdrawing" ein paar Beispiele? Ich habe nur das eine gefunden: OWNERDRW.prg

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 16:31
von Jan
Da ich weiß das Tom sehr bescheiden und zurückhaltend ist: Es gibt einen Vortrag von ihm, wo er sehr schön schrittweise verschiedene Stufen des Ownerdrawings an einem Browse gezeigt hat. Das war vor 2 Jahren auf der Mitgliederversammlung in Isernhagen. Ich glaube da gibt es ein Video von, auf jeden Fall aber den Code.

Jan

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 18:42
von AUGE_OHR
satmax hat geschrieben:Gibt es zum Thema "Ownerdrawing" ein paar Beispiele? Ich habe nur das eine gefunden: OWNERDRW.prg
suche mal bei den "native" Tools. Alle (!) Windows Controls können Ownerdraw bzw. Customdraw.

bei Ownerdraw geht es darum die beiden Windows Methoden o:measureItem und o:drawItem durch eigenen Xbase++ Code zu überschreiben.
siehe c:\ALASKA\XPPW32\Source\samples\basics\OWNERDRW\

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 19:04
von AUGE_OHR
satmax hat geschrieben:ich habe bisher mit ActivX noch nichts gemacht. kann man so etwas in Xbase++ einbinden: "Studio Controls for COM" http://www.dbi-tech.com/StudioControlsC ... reens.aspx
wie Tom schon sagte gibt es den Codejock Calender. Ich habe hier im Forum mal einen Thread drüber gemacht.
http://www.xbaseforum.de/viewtopic.php?f=41&t=5128
satmax hat geschrieben:Gibt es ein Xbase - ActivX Tutorial?
im Prinzip kann man solche Controls wie eine Xbase++ Class verwenden.
Das Problem ist meisten die Dokumentation der Methoden, Propertys und Events die nicht vorliegt.

Ich habe, per Ownerdraw, mir einen Outlook Xbase++ Clone gebaut. wenn man Listview (native) verwendet kann man auch ein Image als Hintergrund in einem Browse haben.
Ownerdraw_Calender.JPG
Ownerdraw_Calender.JPG (73.84 KiB) 16638 mal betrachtet
http://www.xbaseforum.de/viewtopic.php?f=62&t=5186
weitere Beispiele http://www.xbaseforum.de/viewtopic.php?f=23&t=5832

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 19:07
von Jan
AUGE_OHR hat geschrieben:Ich habe, per Ownerdraw, mir einen Outlook Xbase++ Clone gebaut. wenn man Listview (native) verwendet kann man auch ein Image als Hintergrund in einem Browse haben.
Jimmy,

kann es sein, das Du ein wenig zu viel Zeit hast und nicht ausgelastet bist? :D

Jan

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 19:20
von Jan
Tom hat geschrieben:[Kann man. Eine Alternative ist die "Xtreme Suite" von Codejock:
Tom,

Welche Version benutzt Du? Die ActiveX?

Jan

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 19:20
von AUGE_OHR
Jan hat geschrieben:kann es sein, das Du ein wenig zu viel Zeit hast und nicht ausgelastet bist? :D
Das Demo hatte ich für die Devcon 2012 gebaut ... aber es wurde ja nicht mehr angenommen ( weil angeblich zu spät abgegeben )

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Fr, 08. Aug 2014 19:54
von Wolfgang Ciriack
Hallo Jan,
wenn dann die ActiveX Version. Ich benutze diese auch, aber nur noch einen kleinen Teil (Ribbonbar).
Ist jedoch nicht ganz trivial, durch die vielen verschachtelten Objecte durchzublicken, man muss sich einarbeiten.
Kalender habe ich mittlerweile (einfache Form) mit Ownerdrawing und Browses realisiert.

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Sa, 09. Aug 2014 7:53
von satmax
Jan hat geschrieben:Da ich weiß das Tom sehr bescheiden und zurückhaltend ist: Es gibt einen Vortrag von ihm, wo er sehr schön schrittweise verschiedene Stufen des Ownerdrawings an einem Browse gezeigt hat. Das war vor 2 Jahren auf der Mitgliederversammlung in Isernhagen. Ich glaube da gibt es ein Video von, auf jeden Fall aber den Code.

Jan
Das wäre für mich natürlich mal hochinteressant, TOM, kann man (ich) da irgendwie rankommen, Video und /oder Code?

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Sa, 09. Aug 2014 7:56
von satmax
Tom hat geschrieben:

Code: Alles auswählen

kann man so etwas in Xbase++ einbinden
Kann man. Eine Alternative ist die "Xtreme Suite" von Codejock:

http://www.codejock.com

Oder man macht es per Ownerdrawing selbst. Nach Durchquerung der - zugegeben nicht eben flachen - Lernkurve ist das m.E. die feinste Möglichkeit. Was da in den Beispielen gezeigt wird, habe ich. Und sogar noch schöner (und sehr leicht und verlässlich anzusteuern).
Für mich würden die Studio Controls wesentlich besser passen, Stichwort Ressourcenplanung. Das Demo verspricht genau das was ich suche...

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Sa, 09. Aug 2014 8:03
von Jan
satmax hat geschrieben:Für mich würden die Studio Controls wesentlich besser passen, Stichwort Ressourcenplanung. Das Demo verspricht genau das was ich suche...
... aber der Preis. Das ist doch eine ganz andere Liga als Codejock.

Jan

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Sa, 09. Aug 2014 8:15
von satmax
Jan hat geschrieben:aber der Preis. Das ist doch eine ganz andere Liga als Codejock.
Jan
Ich finde der Preis ist meist sekundär, die (fast perfekte) Lösung ist wichtig. :)

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Sa, 09. Aug 2014 8:23
von Wolfgang Ciriack
Stichwort Ressourcenplanung
Ich weiss, dass Tom dieses in seiner Anwendung per Browse und Ownerdrawing realisiert hat.
Wenn man erst einmal einigermaßen verstanden hat, wie das Ownerdrawing funktioniert, kann man solche Sachen damit realisieren. Beim Ownerdrawing bist du bzw. deine eigene Funktion dafür verantwortlich, was im Moment, wenn eine Zelle gezeichnet werden muss, passiert. Du musst eben nur die Daten bereitstellen, dann kannst du Icons, grafische Elemente, Textzeilen etc. in dieser Zelle frei anordnen.
Ich setze mal Toms Einverständis vorraus und hänge hier die Beispiele seines Vortrages von vor einigen Jahren ran.

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Sa, 09. Aug 2014 8:27
von Wolfgang Ciriack
Noch ein schönes Beispiel für ein Browse mit Ownerdrawing, in dem der eingegebene Suchtext hervorgeboben wird:

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Sa, 09. Aug 2014 8:30
von satmax
Danke, werde ich mir ich mal ansehen.

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: Sa, 09. Aug 2014 13:49
von satmax
Ich bin gerade dabei die ersten Schritte mit ActiveX zu unternehmen.

Ich habe das ctSchedule.ocx registriert und ein minimales Beispielprogramm erstellt:

Code: Alles auswählen

#pragma library( "ascom10.lib" )
PROCEDURE MAIN
   LOCAL oScheduler

   oScheduler := GetObject( NIL, "{CE02C22A-8AB8-4F58-9921-C57DE0E67678}" ) 

   IF NIL == oScheduler
      ? "Error"
      ? ComLastError()
      ? ComLastMessage()
   ELSE
     ? "OK"
     ? ComLastError()
     ? ComLastMessage()
   ENDIF

   WAIT

RETURN
Das Programm wird auch ausgeführt und oScheduler als Object of Class AutomationObject angelegt. Im Prinzip kann ich mit diesem Objekt aber nichts machen da es laut Debugger nur 5 Eigenschaften enthält:

Cargo (NIL)
Interface (5927304)
InterfaceName ("_DctSchedule")
License ("")
Server ("")

Wie komme ich da weiter? Muss da noch etwas initialisiert werden? GetObject() wird ja offensichtlich korrekt ausgeführt.

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: So, 10. Aug 2014 8:05
von AUGE_OHR
satmax hat geschrieben:Ich bin gerade dabei die ersten Schritte mit ActiveX zu unternehmen.
das merkt man ;)

nachdem du das OCX registriert hast solltest du den Formdesigner (XppFD.EXE) verwenden.
Menue / XbParts / ActiveX Control
jetzt bekommst du eine Liste und suchst dein OCX
unter den Eigenschaften mal nachsehen ob eine License ermittelt wurde !
zum Schluss Class Code generieren und damit dann rumspielen.
satmax hat geschrieben:Im Prinzip kann ich mit diesem Objekt aber nichts machen da es laut Debugger nur 5 Eigenschaften enthält:
Cargo (NIL)
Interface (5927304)
InterfaceName ("_DctSchedule")
License ("")
Server ("")
Cargo Xbase++
Interface ist das API Handle.
InterfaceName entspräche grob einem ClassName
License meistens bei kommerziellen Versionen.
Server bei Local leer

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: So, 10. Aug 2014 11:09
von satmax
Danke Jimmy, das ist jetzt mal ein Anfang, ich bekomme schon etwas auf dem Bildschirm... :wink:

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: So, 10. Aug 2014 17:27
von satmax
Naja, weit bin ich nicht gekommen.

Dank Jimmys Hilfe kann ich zumindest das leere Control anzeigen, kann aber zB. nicht auf die Properties zugreifen, Beispiel:

Auszug aus der Hilfe:

Code: Alles auswählen

ColumnWidth

Description
Returns/sets the width of the column.
Property type
Read-write property
Syntax
Visual Basic 
Public Property ColumnWidth( _
   ByVal nIndex As Integer _
) As Integer
 
Parameters
nIndex 
The 1-based index value of the column. 
Return Type
An Integer value.
Example
[Visual Basic and Access]

Me.ctSchedule.ColumnWidth(1) = 50

[Visual FoxPro]

thisform.ctSchedule.ColumnWidth(1) = 50
Ich dachte nun, ich kann ganz einfach auf so eine Eigenschaft zugreifen:

Code: Alles auswählen

PROCEDURE Main

   LOCAL nEvent, oXbp, mp1, mp2
   LOCAL oTest

   oTest:=NewForm():New():Create()

   oTest:ActiveXControl1:ColumnWidth[1] := 50  // Line 57 -> Fehler

Ich erhalte aber nur die Fehlermeldung XPPERROR.LOG:
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "c:\dev\DevSrc\Test ActiveX\sample.exe" Datum: 10.08.2014 17:23:19

Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows 7 06.02 Build 09200
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: ColumnWidth
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter nicht optional.
Fehlender Parameter in Aufruf
oError:filename : NIL
oError:genCode : NIL
oError:operation : ColumnWidth
oError:osCode : -2147352561
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 1
oError:tries : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------

Called from MAIN(57)



Nachtrag: lesend kann ich mit

x:=oTest:ActiveXControl1:ColumnWidth(1)

zugreifen.

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: So, 10. Aug 2014 17:38
von Wolfgang Ciriack
oTest:ActiveXControl1:ColumnWidth[1]
vielleicht
oTest:ActiveXControl1:ColumnWidth(1)

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: So, 10. Aug 2014 17:41
von satmax
Lesen schon:

x:=oTest:ActiveXControl1:ColumnWidth(1)

aber nicht zuweisen:

oTest:ActiveXControl1:ColumnWidth(1):=80

Re: Studio Controls for COM via ActivX einbinden?

Verfasst: So, 10. Aug 2014 17:58
von Wolfgang Ciriack
Dann mal vielleicht:
oTest:ActiveXControl1:SetProperty("ColumnWidth",1,50)