Unterstützung bei OOP
Moderator: Moderatoren
- Frank Grossheinrich
- Rekursionen-Architekt
- Beiträge: 147
- Registriert: Fr, 31. Mär 2017 15:06
- Wohnort: Eschborn
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 82 Mal
- Kontaktdaten:
Re: Unterstützung bei OOP
Bruno,
das kann man so aus der Hüfte nicht mal schnell auf OOP umschreiben. Dafür weiß ich zu wenig von deinem Code und was sich in welchem Objekt befindet.
OOP mag man oder mag man nicht. Es gibt keine Pflicht OOP zu programmieren. Da gehen die Meinungen sehr weit auseinander. Es gibt meiner Meinung nach auch kein richtig oder falsch. Man kommt funktional/prozedural genau so weit wie mit OOP. Es ist einfach eine andere Art der Programmierung.
Wenn es interessiert: gib das in Google ein "oop site:doc.alaska-software.com"
Ich habe das nur angemerkt, da man für Xbase++ kein OOP können muss und du explizit um Unterstützung bei OOP gebeten hast. Klassenfunktionen und Methoden gab es bereits bei Clipper.
Wenn dein Code funktioniert und das tut, was er soll, ist das guter Code (meistens jedenfalls). Obwohl mich fast wundert, wenn der gezeigte Code funktionieren würde. Denn einfach eine neue :caption zuzuweisen, zeigt in aller Regel noch nix Neues an. Dafür gibt es eigentlich die Methode :setCaption() oder man muss die Instanz durch den Lebenszyklus jagen und :configure() aufrufen.
Gruß
Frank
das kann man so aus der Hüfte nicht mal schnell auf OOP umschreiben. Dafür weiß ich zu wenig von deinem Code und was sich in welchem Objekt befindet.
OOP mag man oder mag man nicht. Es gibt keine Pflicht OOP zu programmieren. Da gehen die Meinungen sehr weit auseinander. Es gibt meiner Meinung nach auch kein richtig oder falsch. Man kommt funktional/prozedural genau so weit wie mit OOP. Es ist einfach eine andere Art der Programmierung.
Wenn es interessiert: gib das in Google ein "oop site:doc.alaska-software.com"
Ich habe das nur angemerkt, da man für Xbase++ kein OOP können muss und du explizit um Unterstützung bei OOP gebeten hast. Klassenfunktionen und Methoden gab es bereits bei Clipper.
Wenn dein Code funktioniert und das tut, was er soll, ist das guter Code (meistens jedenfalls). Obwohl mich fast wundert, wenn der gezeigte Code funktionieren würde. Denn einfach eine neue :caption zuzuweisen, zeigt in aller Regel noch nix Neues an. Dafür gibt es eigentlich die Methode :setCaption() oder man muss die Instanz durch den Lebenszyklus jagen und :configure() aufrufen.
Gruß
Frank
We love Xbase++, and you?
- Bruno
- Rekursionen-Architekt
- Beiträge: 103
- Registriert: So, 16. Apr 2023 23:11
- Wohnort: Lauterbach
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 4 Mal
Re: Unterstützung bei OOP
Hi Frank,
das ändern der Caption hat eigentlich nur einen Grund, wie bekomme ich warum die Caption als Anzeige in die Statusbar. Rein zum experimentellen Umgang mit Objekten, so lerne ich am schnellsten AHA. Diese kleine Funktion gibt bei genauem Betrachten einen Teil der Möglichkeiten wieder. Stück für Stück kommt man sich näher, Jimmy hat ja schon die Methode kurz erklärt, genau das worauf ich raus wollte, nur das ich den Vergleich ncht mehr brauche, versteh ich noch nicht.
das ändern der Caption hat eigentlich nur einen Grund, wie bekomme ich warum die Caption als Anzeige in die Statusbar. Rein zum experimentellen Umgang mit Objekten, so lerne ich am schnellsten AHA. Diese kleine Funktion gibt bei genauem Betrachten einen Teil der Möglichkeiten wieder. Stück für Stück kommt man sich näher, Jimmy hat ja schon die Methode kurz erklärt, genau das worauf ich raus wollte, nur das ich den Vergleich ncht mehr brauche, versteh ich noch nicht.
Gruss Bruno
Xbase++ 1.9.355 ohne eExpress
Xbase++ 1.9.355 ohne eExpress
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Unterstützung bei OOP
wir sind ja auch NICHT das offizielle und ausschließliche Alaska Xbase++ Forum
Aber Alaska legt zurecht Wert auf die richtige Schreibweise deren Kompilers
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Unterstützung bei OOP
Bruo,
krieg Dich doch mal wieder ein. Ich hatte Dir geschrieben, wie Xbase++ korrekt geschrieben wird. Du hattest dann noch mal nachgefragt ob mit großem B oder nicht - obwohl ich das ja schon alles geschrieben hatte. Also habe ich als Beispiel auf das Forenbanner hingwiesen.
Jan
krieg Dich doch mal wieder ein. Ich hatte Dir geschrieben, wie Xbase++ korrekt geschrieben wird. Du hattest dann noch mal nachgefragt ob mit großem B oder nicht - obwohl ich das ja schon alles geschrieben hatte. Also habe ich als Beispiel auf das Forenbanner hingwiesen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Bruno
- Rekursionen-Architekt
- Beiträge: 103
- Registriert: So, 16. Apr 2023 23:11
- Wohnort: Lauterbach
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 4 Mal
Re: Unterstützung bei OOP
Hi Jan, hast Du den letzten Satz übersehen?Jan hat geschrieben: ↑Sa, 06. Mai 2023 22:55 Bruo,
krieg Dich doch mal wieder ein. Ich hatte Dir geschrieben, wie Xbase++ korrekt geschrieben wird. Du hattest dann noch mal nachgefragt ob mit großem B oder nicht - obwohl ich das ja schon alles geschrieben hatte. Also habe ich als Beispiel auf das Forenbanner hingwiesen.
Jan
Gruss Bruno
Xbase++ 1.9.355 ohne eExpress
Xbase++ 1.9.355 ohne eExpress
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Unterstützung bei OOP
hi Frank,
probiere mal das (ENDE klicken)
wieso soll die Syntax falsch seinFrank Grossheinrich hat geschrieben: ↑Fr, 05. Mai 2023 12:00 Obwohl mich fast wundert, wenn der gezeigte Code funktionieren würde. Denn einfach eine neue :caption zuzuweisen, zeigt in aller Regel noch nix Neues an. Dafür gibt es eigentlich die Methode :setCaption() oder man muss die Instanz durch den Lebenszyklus jagen und :configure() aufrufen.
Code: Alles auswählen
METHOD AenderCaption(cNeuCaption)
::Status:Caption := cNeuCaption
RETURN self
Code: Alles auswählen
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "DLL.CH"
#include "NLS.ch"
PROCEDURE APPSYS
LOCAL cTitle := "DispoEingabe"
LOCAL hWndDlg := DllCall( "User32.dll", DLL_STDCALL, "FindWindowA", 0, cTitle )
IF !( hWndDlg == 0 )
DllCall( "User32.dll", DLL_STDCALL, "SetForegroundWindow", hWndDlg )
DllCall( "User32.dll", DLL_STDCALL, "BringWindowToTop", hWndDlg )
DllCall( "User32.dll", DLL_STDCALL, "ShowWindow", hWndDlg, 1 )
DllCall( "User32.dll", DLL_STDCALL, "UpdateWindow", hWndDlg )
*** It is a second instance.... Bye Bye
QUIT
ENDIF
RETURN
******************************************************************************
* Main procedure to test a form
******************************************************************************
PROCEDURE Main
LOCAL nEvent, oXbp, mp1, mp2
LOCAL oDlg
SET EXCLUSIVE OFF // Netzwerk SHARE
SET EPOCH TO YEAR( DATE() ) - 50
SET CENTURY OFF
SET DATE GERMAN
SETLOCALE( NLS_ICURRENCYEURO, "1" )
SETLOCALE( NLS_SCURRENCY, CHR( 213 ) )
oDlg := DispoEingabe():New():Create()
oDlg:Button1:activate := {|| MsgBox("Hello 1") }
oDlg:Button2:activate := {|| MsgBox("Hello 2") }
oDlg:Button3:activate := {|| MsgBox("Hello 3") }
oDlg:Button4:activate := {|| oDlg:AenderCaption("hallo Frank") }
oDlg:AenderCaption("das geht oder nicht")
nEvent := xbe_None
WHILE nEvent != xbeP_Close
nEvent := AppEvent ( @mp1, @mp2, @oXbp )
oXbp:HandleEvent ( nEvent, mp1, mp2 )
IF nEvent == xbeP_Quit
QUIT // AppQuit()
ENDIF
ENDDO
RETURN
******************************************************************************
* This class is derived from the implementation-level class of the form.
* Instance variables are declared in the _DispoEingabe class.
******************************************************************************
CLASS DispoEingabe FROM _DispoEingabe
EXPORTED:
METHOD init
METHOD create
METHOD AenderCaption()
ENDCLASS
******************************************************************************
* Initialize form
******************************************************************************
METHOD DispoEingabe:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
* Execute method of the super class
::_DispoEingabe:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
RETURN self
******************************************************************************
* Request system resources
******************************************************************************
METHOD DispoEingabe:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
* Execute method of the super class
::_DispoEingabe:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
* Display the form
::show()
RETURN self
METHOD AenderCaption(cNeuCaption)
::Status:Caption := cNeuCaption
RETURN self
* Include program code for the implementation-level class of the form
#include "_DISPOEINGABE.PRG"
//EOF
Code: Alles auswählen
#ifndef _DISPOEINGABE_
#define _DISPOEINGABE_
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"
#PRAGMA LIBRARY( "ascom10.lib" )
CLASS _DispoEingabe FROM XbpDialog
EXPORTED:
VAR editControls
* Contained control elements
VAR Button2
VAR Button4
VAR Button1
VAR Status
VAR Button3
METHOD init
METHOD create
ENDCLASS
******************************************************************************
* Initialize form
******************************************************************************
METHOD _DispoEingabe:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
DEFAULT oParent TO AppDesktop(), ;
aPos TO {-4,550}, ;
lVisible TO .F. , ;
aPP TO {}
AAdd ( aPP, { XBP_PP_BGCLR, GRA_CLR_DARKCYAN } )
AAdd ( aPP, { XBP_PP_FGCLR, GRA_CLR_BLACK } )
AAdd ( aPP, { XBP_PP_COMPOUNDNAME, "24.Arial" } )
IF Empty(aSize) == .T.
IF IsMemberVar(self,"ClientSize") == .T.
aSize := {0,0}
ELSE
aSize := {441,527}
ENDIF
ENDIF
::XbpDialog:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
IF aSize[1] == 0 .AND. aSize[2] == 0
::XbpDialog:ClientSize := {425,488}
ENDIF
::XbpDialog:drawingArea:ColorBG := GRA_CLR_DARKCYAN
::XbpDialog:taskList := .T.
::XbpDialog:title := "DispoEingabe"
::editControls := {}
::Button2 := XbpPushButton():new( ::drawingArea, , {56,160}, {300,120}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
::Button2:caption := "EINGABE"
::Button2:tabStop := .T.
::Button2:activate := {|| NIL }
::Button4 := XbpPushButton():new( ::drawingArea, , {284,8}, {132,60}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
::Button4:caption := "ENDE"
::Button4:tabStop := .T.
::Button4:activate := {|| NIL }
::Button1 := XbpPushButton():new( ::drawingArea, , {56,300}, {300,120}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
::Button1:caption := "DISPOLISTE"
::Button1:tabStop := .T.
::Button1:activate := {|| NIL }
::Status := XbpStatusBar():new( ::drawingArea, , {12,440}, {400,40} )
::Button3 := XbpPushButton():new( ::drawingArea, , {56,80}, {300,60}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
::Button3:caption := "Daten bertragen"
::Button3:tabStop := .T.
::Button3:activate := {|| NIL }
RETURN self
******************************************************************************
* Request system resources
******************************************************************************
METHOD _DispoEingabe:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
::XbpDialog:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
::Button2:create()
::Button4:create()
::Button1:create()
::Status:create()
::Status:Caption := "Arbeitsjahr:"
::Button3:create()
RETURN self
#endif
//EOF
/////
gruss by OHR
Jimmy
Jimmy
- Bruno
- Rekursionen-Architekt
- Beiträge: 103
- Registriert: So, 16. Apr 2023 23:11
- Wohnort: Lauterbach
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 4 Mal
Re: Unterstützung bei OOP
Hi Jimmy,AUGE_OHR hat geschrieben: ↑So, 07. Mai 2023 20:47Code: Alles auswählen
IF !( hWndDlg == 0 ) DllCall( "User32.dll", DLL_STDCALL, "SetForegroundWindow", hWndDlg ) DllCall( "User32.dll", DLL_STDCALL, "BringWindowToTop", hWndDlg ) DllCall( "User32.dll", DLL_STDCALL, "ShowWindow", hWndDlg, 1 ) DllCall( "User32.dll", DLL_STDCALL, "UpdateWindow", hWndDlg ) *** It is a second instance.... Bye Bye QUIT ENDIF
nur mit diesem DllCall ???
Für was werden diese benötigt ?
Gruss Bruno
Xbase++ 1.9.355 ohne eExpress
Xbase++ 1.9.355 ohne eExpress
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Unterstützung bei OOP
hi Bruno.
sucht nach einem "Fenster" was den Title hat
SetForegroundWindow
https://learn.microsoft.com/de-de/windo ... oundwindow
BringWindowToTop
https://learn.microsoft.com/de-de/windo ... indowtotop
ShowWindow
https://learn.microsoft.com/de-de/windo ... showwindow
UpdateWindow
https://learn.microsoft.com/de-de/windo ... datewindow
es funktioniert auch wenn das Fenster / App "minimiert" wurde das es "nach vorne" geholt wird
die DLL Aufrufe sind um zu "prüfen" ob eine App bzw. Fenster schon läuft, deshalb am Anfang der AppSys
Code: Alles auswählen
hWndDlg := FindWindowEx(,,, cTitle )
IF !( hWndDlg == 0 )
SetForegroundWindow
https://learn.microsoft.com/de-de/windo ... oundwindow
BringWindowToTop
https://learn.microsoft.com/de-de/windo ... indowtotop
ShowWindow
https://learn.microsoft.com/de-de/windo ... showwindow
UpdateWindow
https://learn.microsoft.com/de-de/windo ... datewindow
es funktioniert auch wenn das Fenster / App "minimiert" wurde das es "nach vorne" geholt wird
gruss by OHR
Jimmy
Jimmy