Parent(s) von modalen Fenster mitverschieben
Moderator: Moderatoren
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Parent(s) von modalen Fenster mitverschieben
Hi,
kennt jemand eine einfache Methode, um alle Parents (könnten geschachtelt mehrere sein) eines modalen Fensters mit zu verschieben, wenn das modale Fenster selbst verschoben wird?
Bei meiner Anwendung sind alle Dialoge (XbpDialog und XbpCrt) modale Fenster. Wenn nun ein solches geöffnet ist und der Anwender es "zur Seite" schieben will, kann er nur das modale Fenster verschieben, dann ist dessen Parent noch immer im Weg...
Gibt es da eine einfache Lösung?
kennt jemand eine einfache Methode, um alle Parents (könnten geschachtelt mehrere sein) eines modalen Fensters mit zu verschieben, wenn das modale Fenster selbst verschoben wird?
Bei meiner Anwendung sind alle Dialoge (XbpDialog und XbpCrt) modale Fenster. Wenn nun ein solches geöffnet ist und der Anwender es "zur Seite" schieben will, kann er nur das modale Fenster verschieben, dann ist dessen Parent noch immer im Weg...
Gibt es da eine einfache Lösung?
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Markus,
da wird es keine geben!
Wenn Du ein modales Fenster nimmst, sorgt das ja dafür, dass keinerlei Nachrichten an die anderen Fenster gelangen (Modalität).
Du könntest höchstens probieren, die Modalität selber abzubilden, indem Du Dein Fenster halt immer im Vordergrund hast und bei einem Klick in ein im Hintergrund liegendem Fenster wieder per SetAppFocus() das vordere Fenster anwählst (so in der Art). Dann könntest Du auch die im Hintergrund liegenden Fenster ansprechen (Größe und Position ändern...)
Viele Grüße,
Martin
da wird es keine geben!
Wenn Du ein modales Fenster nimmst, sorgt das ja dafür, dass keinerlei Nachrichten an die anderen Fenster gelangen (Modalität).
Du könntest höchstens probieren, die Modalität selber abzubilden, indem Du Dein Fenster halt immer im Vordergrund hast und bei einem Klick in ein im Hintergrund liegendem Fenster wieder per SetAppFocus() das vordere Fenster anwählst (so in der Art). Dann könntest Du auch die im Hintergrund liegenden Fenster ansprechen (Größe und Position ändern...)
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Dialog Fenster
Hi Markus,
ich habe meine Fenster nicht im Modal-Modus. Wenn du dies mit xbpdialog
machst und mit SetAppFocus immer den aktuellen Fenster-Dialog setzt
muß es gehen.
Ich habe dies allerdings ausgeschaltet, indem ich das Parent-Fenster
enable:(). Dies muß ich tun wegen bestimmter Programmabläufe.
ich habe meine Fenster nicht im Modal-Modus. Wenn du dies mit xbpdialog
machst und mit SetAppFocus immer den aktuellen Fenster-Dialog setzt
muß es gehen.
Ich habe dies allerdings ausgeschaltet, indem ich das Parent-Fenster
enable:(). Dies muß ich tun wegen bestimmter Programmabläufe.
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Günter,
Viele Grüße,
Martin
wie soll das gehen? Wenn das modale Fenster aktiv ist, kommt man doch an die anderen Objekte gar nicht ran, oder? Die Events werden doch geblockt.Günter Beyes hat geschrieben:Parent bzw. Owner können dann per :setPos() um die gleiche Positionsdifferenz verschoben werden.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Parent(s) von modalen Fenster mitverschieben
hi,
mit. Wenn du aber den Parent verschiebst und die "Child" Fenster ein
oSubWin:moveWithOwner := .T. (angedockt) hat so verschiebt du die mit
wenn der Parent verschoben wird.
Ansonsten kann du im "Child" Fenster mal probieren den Owner = Parent
zu setzten ob dir das hilft.
gruss by OHR
Jimmy
gruss by OHR
Jimmy
Wenn du ein "Child" Fenster verschiebst bekommt der Parent davon nichtsMarkus Walter hat geschrieben: kennt jemand eine einfache Methode, um alle Parents (könnten geschachtelt mehrere sein) eines modalen Fensters mit zu verschieben, wenn das modale Fenster selbst verschoben wird?
mit. Wenn du aber den Parent verschiebst und die "Child" Fenster ein
oSubWin:moveWithOwner := .T. (angedockt) hat so verschiebt du die mit
wenn der Parent verschoben wird.
Ansonsten kann du im "Child" Fenster mal probieren den Owner = Parent
zu setzten ob dir das hilft.
gruss by OHR
Jimmy
gruss by OHR
Jimmy
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hallo Günter,
der von Dir beschriebene Weg funktioniert soweit...
... bis ich die linke Maustaste loslasse!!!
Ich habe den move-Slot benutzt...
die zugewissene Funktion sieht so aus:
Anmerkung: Das ich den Owner statt dem Parent benutze, liegt daran, das bei meinen modalen Fenstern der AppDesktop() Parent ist...
Das Ganze funktioniert, solange ich das Child-Fenster verschiebe (linke Maustaste gedrückt). Sobald ich diese loslasse, schieben sich beide Fenster (Hauptfenster und Child) nach rechts aus dem Anzeigebereich raus. Ich habe mir die Koordinaten in eine Debug-Datei ausgeben lassen. Die Funktion wird permanent weiter aufgerufen und der X-Wert erhöht sich immer weiter...
Ich verstehe aber nicht warum. Ich dachte schon an eine Rekursion (nämlich das durch das setpos(...) ja wieder :move() ausgelöst wird, aber bei meinem Hauptfenster habe ich den move-Block nicht gesetzt...
Was könnte das sein?
der von Dir beschriebene Weg funktioniert soweit...
... bis ich die linke Maustaste loslasse!!!
Ich habe den move-Slot benutzt...
Code: Alles auswählen
oDlg:move := {| aOldPos, aNewPos, o | wGuiDCReadMove(o, aOldPos, aNewPos) }
Code: Alles auswählen
STATIC FUNCTION wGuiDCReadMove(o, aOldPos, aNewPos)
local oParent, aPosParent
local nDiffX, nDiffY
nDiffX := aOldPos[1] - aNewPos[1]
nDiffY := aOldPos[2] - aNewPos[2]
if !empty(nDiffX) .or. !empty(nDiffY)
oParent := o:setparent()
if oParent == AppDesktop()
oParent := o:setowner()
endif
aPosParent := oParent:currentPos()
aPosParent := {aPosParent[1]-nDiffX, aPosParent[2]-nDiffY}
oParent:setPos(aPosParent)
ddbg(var2char(oParent) + str(aPosParent[1]) + str(aPosParent[2]))
endif
RETURN NIL
Das Ganze funktioniert, solange ich das Child-Fenster verschiebe (linke Maustaste gedrückt). Sobald ich diese loslasse, schieben sich beide Fenster (Hauptfenster und Child) nach rechts aus dem Anzeigebereich raus. Ich habe mir die Koordinaten in eine Debug-Datei ausgeben lassen. Die Funktion wird permanent weiter aufgerufen und der X-Wert erhöht sich immer weiter...
Ich verstehe aber nicht warum. Ich dachte schon an eine Rekursion (nämlich das durch das setpos(...) ja wieder :move() ausgelöst wird, aber bei meinem Hauptfenster habe ich den move-Block nicht gesetzt...
Was könnte das sein?
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
Owner das "vorherige" XbpDialog (oder oCrt) dann verstehe ich dein
Problem nicht. Es funktioniert doch so mit "verschieben" !?
Gerade mit der Kombination arbeitet doch :moveWithOwner := .T.
wenn du es in den "Child" Dialog setzt.
zum oDlg:move erstmal die Frage ob das "der vorherige" XbpDialog ist
der als Owner für dein modales Fenster fungiert ?
Wenn Ja s.h. Anmerkung, wenn Nein und es ein "tieferer" (geschachtelt)
Parent ("Main") ist : versuche es mal mit dem :resize Block im "Main"
XbpDialog und mache auf die "Child" ein :SetPost()
Da ich :move nicht verwende, kann ich mich nur an :resize orientieren.
Hierbei muss jedes Fenster, das "size"bar sein soll, einen eigenen :resize
Block haben.
Wie beim :resize sollte man :move wohl nur im "Main" XbpDialog "anstossen"
und die Child´s "sollten" dann "merken" (OldSize,NewSize bzw Position)
ob ein :resize (:move) erforderlich ist.
gruss by OHR
Jimmy
zuerst zur Anmerkung : wenn dein Parent AppDeskTop() ist und derMarkus Walter hat geschrieben:Anmerkung: Das ich den Owner statt dem Parent benutze, liegt daran, das bei meinen modalen Fenstern der AppDesktop() Parent ist...Code: Alles auswählen
oDlg:move := {| aOldPos, aNewPos, o | wGuiDCReadMove(o, aOldPos, aNewPos) }
Owner das "vorherige" XbpDialog (oder oCrt) dann verstehe ich dein
Problem nicht. Es funktioniert doch so mit "verschieben" !?
Gerade mit der Kombination arbeitet doch :moveWithOwner := .T.
wenn du es in den "Child" Dialog setzt.
zum oDlg:move erstmal die Frage ob das "der vorherige" XbpDialog ist
der als Owner für dein modales Fenster fungiert ?
Wenn Ja s.h. Anmerkung, wenn Nein und es ein "tieferer" (geschachtelt)
Parent ("Main") ist : versuche es mal mit dem :resize Block im "Main"
XbpDialog und mache auf die "Child" ein :SetPost()
Da ich :move nicht verwende, kann ich mich nur an :resize orientieren.
Hierbei muss jedes Fenster, das "size"bar sein soll, einen eigenen :resize
Block haben.
Wie beim :resize sollte man :move wohl nur im "Main" XbpDialog "anstossen"
und die Child´s "sollten" dann "merken" (OldSize,NewSize bzw Position)
ob ein :resize (:move) erforderlich ist.
gruss by OHR
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Hallo Markus,
du hast völlig Recht.
Aber so geht's, frag im Moment bitte nicht, wieso SetAppWindow():setPos() den modalen Dialog mit sich zieht
Wohl ein implizites :MoveWithOwner
Eben getestet mit Modality.prg der Alaska-Samples ( SOURCE\samples\basics\WINDOWS\Modality.prg ),
Funktion Modaldialog().
MoveParent() steht im :move-Callbackslot des modalen Dialogfensters.
@Martin:
Heißt Modalität nicht lediglich, daß Tastatur- und Mausevents für den Owner blockiert werden? Alles andere läuft weiter. Beispiel Paint: Wenn du einen modalen Dialog über seinem Owner verschiebst, wird der zuvor verdeckte Bereich des Owners neu gezeichnet (wenn man nicht wie hier am Mechanismus herumschraubt )
Viele Grüße,
Günter
du hast völlig Recht.
Aber so geht's, frag im Moment bitte nicht, wieso SetAppWindow():setPos() den modalen Dialog mit sich zieht
Wohl ein implizites :MoveWithOwner
Code: Alles auswählen
PROCEDURE MoveParent(old,new,o)
LOCAL dX := new[1]-old[1]
LOCAL dY := new[2]-old[2]
LOCAL aParentPos
IF dX <> 0 .or. dY <> 0
aParentPos := SetAppWindow():currentPos()
aParentPos[1] += dX
aParentPos[2] += dY
SetAppWindow():setPos( aParentPos )
o:setPos(new) // DAS BRINGT'S
ENDIF
RETURN
Funktion Modaldialog().
MoveParent() steht im :move-Callbackslot des modalen Dialogfensters.
@Martin:
Heißt Modalität nicht lediglich, daß Tastatur- und Mausevents für den Owner blockiert werden? Alles andere läuft weiter. Beispiel Paint: Wenn du einen modalen Dialog über seinem Owner verschiebst, wird der zuvor verdeckte Bereich des Owners neu gezeichnet (wenn man nicht wie hier am Mechanismus herumschraubt )
Viele Grüße,
Günter
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Günter,
Ich hatte das andersrum betrachtet, da ja nur die Bereiche des überlagerten Fensters neugezeichnet werden, die durch das Verschieben des modalen Fensters wieder sichtbar werden.
Aber dazu muß natürlich das nicht-modale Fenster auf entsprechende Events reagieren...
Naja - jetzt bin ich die nächsten Tage erst mal wieder etwas zurückhaltender mit definitiven Aussagen
Viele Grüße,
Martin
Du hast recht und ich mal wieder was dazugelerntGünter Beyes hat geschrieben: Heißt Modalität nicht lediglich, daß Tastatur- und Mausevents für den Owner blockiert werden? Alles andere läuft weiter. Beispiel Paint: Wenn du einen modalen Dialog über seinem Owner verschiebst, wird der zuvor verdeckte Bereich des Owners neu gezeichnet (wenn man nicht wie hier am Mechanismus herumschraubt )
Ich hatte das andersrum betrachtet, da ja nur die Bereiche des überlagerten Fensters neugezeichnet werden, die durch das Verschieben des modalen Fensters wieder sichtbar werden.
Aber dazu muß natürlich das nicht-modale Fenster auf entsprechende Events reagieren...
Naja - jetzt bin ich die nächsten Tage erst mal wieder etwas zurückhaltender mit definitiven Aussagen
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Hallo Markus,
Viele Grüße,
Günter
Tatsächlich :moveWithOwner. Die Vorbelegung ist TRUE; das hatte ich in dem Moment nicht bedacht. Und schon nimmt das Pingpongspiel seinen Lauf...Markus Walter hat geschrieben: Das Ganze funktioniert, solange ich das Child-Fenster verschiebe (linke Maustaste gedrückt). Sobald ich diese loslasse, schieben sich beide Fenster (Hauptfenster und Child) aus dem Anzeigebereich raus.
Ich verstehe aber nicht warum. Ich dachte schon an eine Rekursion (nämlich das durch das setpos(...) ja wieder :move() ausgelöst wird, aber bei meinem Hauptfenster habe ich den move-Block nicht gesetzt...
Was könnte das sein?
Viele Grüße,
Günter
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hallo Günter,
tausend Dank. Es funktioniert jetzt wie gewünscht...
FAST
Ich verwende auch noch jede Menge XbpCrts. Da bleiben 1 (oder 2) Probleme:
Das Move-Ereignis ist/arbeitet anders als beim XbpWindow: es liefert die alte Position nicht (warum auch immer).
Da Ereignis wird offenbar auch beim Erzeugen des Crt einmal erzeugt, was beim XbpWindow auch nicht so ist.
Im Übrigen gibt es auch die Eigenschaft :MoveWithOwner bei XbpCrts nicht.
Schade, denn ich verwende noch jede Menge dieser Crts.
Ich habe mal eine Mail an Alaska geschickt...
tausend Dank. Es funktioniert jetzt wie gewünscht...
FAST
Ich verwende auch noch jede Menge XbpCrts. Da bleiben 1 (oder 2) Probleme:
Das Move-Ereignis ist/arbeitet anders als beim XbpWindow: es liefert die alte Position nicht (warum auch immer).
Da Ereignis wird offenbar auch beim Erzeugen des Crt einmal erzeugt, was beim XbpWindow auch nicht so ist.
Im Übrigen gibt es auch die Eigenschaft :MoveWithOwner bei XbpCrts nicht.
Schade, denn ich verwende noch jede Menge dieser Crts.
Ich habe mal eine Mail an Alaska geschickt...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Hallo Markus,
Du könntest auf jedem modalen Dialog eine Schaltfläche vorsehen, welche den/die Owner ganz aus dem sichtbaren Bildschirmbereich hinausschiebt bzw. sie wieder herstellt.
Im Prinzip ungefähr so:
Viele Grüße,
Günter
Ist es wichtig, daß man den Owner nach dem Verschieben zumindest teilweise noch auf dem Bildschirm sehen kann? Falls nein, gäbe es noch eine Möglichkeit, die bei XbpCrt und XbpDialog gleichermaßen funktionieren dürfte.Das Move-Ereignis ist/arbeitet anders als beim XbpWindow: es liefert die alte Position nicht (warum auch immer).
Das Ereignis wird offenbar auch beim Erzeugen des Crt einmal erzeugt, was beim XbpWindow auch nicht so ist.
Im Übrigen gibt es auch die Eigenschaft :MoveWithOwner bei XbpCrts nicht.
Du könntest auf jedem modalen Dialog eine Schaltfläche vorsehen, welche den/die Owner ganz aus dem sichtbaren Bildschirmbereich hinausschiebt bzw. sie wieder herstellt.
Im Prinzip ungefähr so:
Code: Alles auswählen
oBtn:activate := {||iif(oDlg:Cargo=NIL,HideOwner(oDlg),ShowOwner(oDlg))}
PROCEDURE HideOwner( oDlg )
// aktuelle Position des modalen Dialogs merken
LOCAL aDlgPos := oDlg:currentPos()
LOCAL oOwner := oDlg:setOwner()
IF oDlg:Cargo == NIL
// aktuelle Position des Owners merken
oDlg:Cargo := oOwner:currentPos()
// Owner beiseite schieben
oOwner:setPos({2000,2000})
// modaler Dialog ist mitgewandert;
// Position wieder herstellen
oDlg:setPos( aDlgPos )
ENDIF
RETURN
PROCEDURE ShowOwner( oDlg )
LOCAL aDlgPos := oDlg:currentPos()
LOCAL oOwner := oDlg:setOwner()
IF oDlg:Cargo != NIL
// Owner-Position wieder herstellen
oOwner:setPos( oDlg:Cargo )
oDlg:Cargo := NIL
oDlg:setPos( aDlgPos )
ENDIF
RETURN
Viele Grüße,
Günter
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hi Günter, hi Jimmy,
es geht mir wirklich um Verschieben, nicht um minimieren oder ganz ausblenden.
Ich möchte das so lösen, dass "normales" Verschieben mit der Maus nur das oberste (modale) Fenster verschiebt (damit der Anwender das dahinter liegende Fenster meiner Anwendung sehen kann).
Dann möchte ich, wenn beim Verschieben Strg gedrückt ist, meine ganze Anwendung verschieben können.
Aber da :move() bei XbpCrts anders arbeitet, wie bei XbpWindow sehe ich da wenig Möglichkeit. Wenn nur XbpWindows geöffnet sind (außer meinem Hauptfenster) klappt es ja schon wie gewünscht...
es geht mir wirklich um Verschieben, nicht um minimieren oder ganz ausblenden.
Ich möchte das so lösen, dass "normales" Verschieben mit der Maus nur das oberste (modale) Fenster verschiebt (damit der Anwender das dahinter liegende Fenster meiner Anwendung sehen kann).
Dann möchte ich, wenn beim Verschieben Strg gedrückt ist, meine ganze Anwendung verschieben können.
Aber da :move() bei XbpCrts anders arbeitet, wie bei XbpWindow sehe ich da wenig Möglichkeit. Wenn nur XbpWindows geöffnet sind (außer meinem Hauptfenster) klappt es ja schon wie gewünscht...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hi Jimmy,
nee, lass mal, ich will schon verschieben...
Auf das Wort "Vista" reagiere ich übrigens im Moment allergisch. Wegen Änderungen die ich wegen Vista an meiner Software machen muss, aber auch wegen Vista selbst...
Aber da müssen wir mal einen eigenen Thread auf machen.
Was das Verschieben-Problem angeht, bin ich mit Alaska in Kontakt. Mal sehen.
Aus der Hilfe von XbpCrt:
move := {| aNewPos, uNIL, self | ... }
Aus der Hilfe von XbpWindow:
:move := {| aOldPos, aNewPos, self | ... }
Das bei beiden Codeblöcken die Parameter-Übergabe nicht gleich ist, kann ich nun wirklich nicht nachvollziehen...
nee, lass mal, ich will schon verschieben...
Auf das Wort "Vista" reagiere ich übrigens im Moment allergisch. Wegen Änderungen die ich wegen Vista an meiner Software machen muss, aber auch wegen Vista selbst...
Aber da müssen wir mal einen eigenen Thread auf machen.
Was das Verschieben-Problem angeht, bin ich mit Alaska in Kontakt. Mal sehen.
Aus der Hilfe von XbpCrt:
move := {| aNewPos, uNIL, self | ... }
Aus der Hilfe von XbpWindow:
:move := {| aOldPos, aNewPos, self | ... }
Das bei beiden Codeblöcken die Parameter-Übergabe nicht gleich ist, kann ich nun wirklich nicht nachvollziehen...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Hallo Markus,
Viele Grüße,
Günter
Welche Xpp-Version verwendest du? Für 1.9 habe ich etwas in der Schublade, womit XbpCrt überredet werden kann, dem :move-Codeblock die alte und die neue Position zu übergeben.Markus Walter hat geschrieben: Was das Verschieben-Problem angeht, bin ich mit Alaska in Kontakt. Mal sehen.
Aus der Hilfe von XbpCrt:
move := {| aNewPos, uNIL, self | ... }
Aus der Hilfe von XbpWindow:
:move := {| aOldPos, aNewPos, self | ... }
Dass bei beiden Codeblöcken die Parameter-Übergabe nicht gleich ist, kann ich nun wirklich nicht nachvollziehen...
Viele Grüße,
Günter
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Hallo Markus,
in der Schublade (nee, seit 1.9 als DLL in der Werkzeugkiste) liegen C-Funktionen, die das Subclassing von Xbase++ - Fenstern und Controls ( im Sinne der "klassischen" Windows-API-Programmierung) mittels einer Xbase++ - Funktion ermöglichen.
In einer Alaska-Newsgroup habe ich mal den C-Sourcecode und das resultierende .obj gepostet, womit das geht.
XbpCrt:move() könnte man damit zum Beispiel so auf die Sprünge helfen.
Laß mir doch über PM deine E-Mail-Adresse zukommen, dann könnte ich dir das Teil auch zuschicken.
Viele Grüße,
Günter
in der Schublade (nee, seit 1.9 als DLL in der Werkzeugkiste) liegen C-Funktionen, die das Subclassing von Xbase++ - Fenstern und Controls ( im Sinne der "klassischen" Windows-API-Programmierung) mittels einer Xbase++ - Funktion ermöglichen.
In einer Alaska-Newsgroup habe ich mal den C-Sourcecode und das resultierende .obj gepostet, womit das geht.
XbpCrt:move() könnte man damit zum Beispiel so auf die Sprünge helfen.
Code: Alles auswählen
STATIC FUNCTION CrtWindowProc( hwnd, msg, wparam, lparam, oDlg )
STATIC aOldPos
#define WM_ENTERSIZEMOVE 0x0231
#define WM_EXITSIZEMOVE 0x0232
IF msg = WM_ENTERSIZEMOVE
aOldPos := oDlg:currentPos()
ELSEIF msg = WM_EXITSIZEMOVE
PostAppEvent( xbeP_Move, aOldPos, oDlg:currentPos(), oDlg )
aOldPos := NIL
ENDIF
// die ursprüngliche window procedure aufrufen
RETURN _CallPrevWindowProc( hwnd, msg, wparam, lparam )
Viele Grüße,
Günter
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland