resize per Maus ( nicht Dialog )
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
resize per Maus ( nicht Dialog )
wenn ich mit der Maus auf ein XbPart klicke, Maus-Taste festhalte, die Maus Position ändere und die Maus-Taste loslasse wird es gewöhnlich als DragDrop erkannt.
Diese Procedure kann ich auch in einem Browse durchführen und damit Termine verschieben.
nun möchte ich ein XbPart, auf der o:DrawingArea, oder eine/mehrere Cells in einem Browse "resizen" ... wie ?
... ich komme nicht drauf wie ich "DragDrop" von "resize" unterscheiden soll
Diese Procedure kann ich auch in einem Browse durchführen und damit Termine verschieben.
nun möchte ich ein XbPart, auf der o:DrawingArea, oder eine/mehrere Cells in einem Browse "resizen" ... wie ?
... ich komme nicht drauf wie ich "DragDrop" von "resize" unterscheiden soll
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: resize per Maus ( nicht Dialog )
Ich meine dazu gibt es ein Beispiel für eine Zelle in einem Browser ... ähnlich wie bei Excel, aus dem Gedächtnis:
1. Wenn MAUS auf den Rand kommt (1 oder 2 Pixel), dann Mauszeiger ändern und LB down als Anfang der Operation (Flag) merken, ansonsten normale Aktion.
2. Mausbewegung zu neuer Position mit FLAG - eventuell gleich die Größe ändern, ergibt sofortige Anzeige mit Flackern oder warten bis zum Ende.
3. LB up mit FLAG, Control auf die neue Größe berechnen und setzen, Flag löschen, Mauszeiger auf normal
1. Wenn MAUS auf den Rand kommt (1 oder 2 Pixel), dann Mauszeiger ändern und LB down als Anfang der Operation (Flag) merken, ansonsten normale Aktion.
2. Mausbewegung zu neuer Position mit FLAG - eventuell gleich die Größe ändern, ergibt sofortige Anzeige mit Flackern oder warten bis zum Ende.
3. LB up mit FLAG, Control auf die neue Größe berechnen und setzen, Flag löschen, Mauszeiger auf normal
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: resize per Maus ( nicht Dialog )
bei Excel wird bei einer Cell, statt DragDrop, ja erweitert/markiert.brandelh hat geschrieben:Ich meine dazu gibt es ein Beispiel für eine Zelle in einem Browser ... ähnlich wie bei Excel, aus dem Gedächtnis:
in einem Browse kann ich nur die gesamte Column Wide verändern, nicht eine einzelne Cell.
und woher weiss ich das ich auf dem Rand bin ?brandelh hat geschrieben:1. Wenn MAUS auf den Rand kommt (1 oder 2 Pixel), dann Mauszeiger ändern und LB down als Anfang der Operation (Flag) merken, ansonsten normale Aktion.
Code: Alles auswählen
:lbDown := {| aPos, uNIL, self | ... }
Code: Alles auswählen
METHOD DDCal:StartDragDrop( aPos )
...
LOCAL aRowCol := ::cellFromPos( aPos )
LOCAL aCellRect := ::cellRect( aRowCol[ 1 ], aRowCol[ 2 ], .F. )
LOCAL nHigh := ::getRowHeight() // ohne Frame ?
LOCAL nWide := ::getColWidth( aRowCol[ 2 ]
angenommen ich würde, per Ownerdraw, einen Rand um eine ( Reihe ) Cell legen ... der existiert ja nur im Bildschirm Speicher.
gruss by OHR
Jimmy
Jimmy
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: resize per Maus ( nicht Dialog )
Ich würde eines von beiden (Resizen oder Drag/Drop) nur zusammen mit gedrückter Strg-Taste ermöglichen.
Viele Grüße
Wolfgang
Wolfgang
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: resize per Maus ( nicht Dialog )
ich selbst habe das noch nicht gemacht, aber der xppFD nutzt solche Techniken.
Bei diesem Beispiel wird unterschieden zwischen "Klick in Header" (Sortierung) oder Maus auf Tabellenspalte (Breite ändern)
\XPPW32\source\samples\solution\SQBrowse
weiter Beispiele mit "nur Spaltenbreite ändern"
\XPPW32\source\samples\basics\GuiBrow
PS: automatisch ginge es nur, wenn es einen eigenen Event gäbe "Ich bin auf Rand", das gibt es aber nicht, man muss sich das Ausrechnen aus der Cursorposition.
Bei diesem Beispiel wird unterschieden zwischen "Klick in Header" (Sortierung) oder Maus auf Tabellenspalte (Breite ändern)
\XPPW32\source\samples\solution\SQBrowse
weiter Beispiele mit "nur Spaltenbreite ändern"
\XPPW32\source\samples\basics\GuiBrow
PS: automatisch ginge es nur, wenn es einen eigenen Event gäbe "Ich bin auf Rand", das gibt es aber nicht, man muss sich das Ausrechnen aus der Cursorposition.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: resize per Maus ( nicht Dialog )
Ja ... da legt sich ein "Rahmen" um den XbPart. Den Effekt möchte ich habenbrandelh hat geschrieben:ich selbst habe das noch nicht gemacht, aber der xppFD nutzt solche Techniken.
das Verzeichnis gibt es nicht bei mir ?brandelh hat geschrieben:Bei diesem Beispiel wird unterschieden zwischen "Klick in Header" (Sortierung) oder Maus auf Tabellenspalte (Breite ändern)
\XPPW32\source\samples\solution\SQBrowse
hm ... das ist doch das Standard verhalten ... oder was meinst dubrandelh hat geschrieben:weiter Beispiele mit "nur Spaltenbreite ändern"
\XPPW32\source\samples\basics\GuiBrow
hm ... einen eine Button, mit Manifest, hätte man doch eine HOVER Function.brandelh hat geschrieben:PS: automatisch ginge es nur, wenn es einen eigenen Event gäbe "Ich bin auf Rand", das gibt es aber nicht, man muss sich das Ausrechnen aus der Cursorposition.
es gibt ja diese Maus Events
Code: Alles auswählen
#define WM_MOUSEACTIVATE 0x0021
#define WM_MOUSEHOVER 0x02a1
#define WM_MOUSELEAVE 0x02a3
#define WM_MOUSEMOVE 0x0200
#define WM_MOUSEWHEEL 0x020a
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: resize per Maus ( nicht Dialog )
Ja gute Idee !Wolfgang Ciriack hat geschrieben:Ich würde eines von beiden (Resizen oder Drag/Drop) nur zusammen mit gedrückter Strg-Taste ermöglichen.
hm ... das funktioniert zwar aber ich "sehe" nichts ... erst wenn ich die Maus wieder los lasse
beim DragDrop habe ich ein Snapshot gemacht und zeige den beim moven an. Ich müsste die Grösse live verändern ...
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: resize per Maus ( nicht Dialog )
HOVER kenne ich nur von HTML Seiten, aber es gibt bei "normalen" controls die callbacks
:enter()
:leave()
:motion()
SortedQuickBrowse (das erste Beispiel) habe ich von der Prof. Sub. CD, dort gibt es auch den Browser Quellcode.
Im Prinzip geht es doch nur darum bei einem :lbDown() Event eines Kontrols festzustellen, ob die Maus auf dem RAND des Controls liegt und dann daraus eine Aktion zu machen.
:enter()
:leave()
:motion()
SortedQuickBrowse (das erste Beispiel) habe ich von der Prof. Sub. CD, dort gibt es auch den Browser Quellcode.
Im Prinzip geht es doch nur darum bei einem :lbDown() Event eines Kontrols festzustellen, ob die Maus auf dem RAND des Controls liegt und dann daraus eine Aktion zu machen.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: resize per Maus ( nicht Dialog )
so nun hab ich mal ein wenig probiert und das ist bislang raus gekommen.
zum moven muss man den mittleren Marker nehmen.
zuerst muss man auf das XpPart klicken um es zu aktivieren.
dann kommen die 9 Marker.zum moven muss man den mittleren Marker nehmen.
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: resize per Maus ( nicht Dialog )
hier nun ein Zeit Planer wo ich solche move-/resize-bare Controls verwendet habe.
mit der Demo kann man schon mit den Kalender (benötigt DXE.DLL / ot4XB.DLL ) spielen und die Controls verschieben / resizen. Tip : die mittlere Markierung dient zum "moven" und für "leave" (Markierungen schliessen )gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: resize per Maus ( nicht Dialog )
das sieht ja schon mal gut aus, aber du solltest alle 7 Tage eine feine Linie von oben einziehen (grau ?) ...
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: resize per Maus ( nicht Dialog )
Ja ... leider klappt das mit der Transparenz und dem "Grid" noch nicht so wie gewollt ...brandelh hat geschrieben:das sieht ja schon mal gut aus, aber du solltest alle 7 Tage eine feine Linie von oben einziehen (grau ?) ...
am liebsten hätte ich beim moven/sizen eine Linie nach oben zur Scala ... oder die Farbe der Scala ändert sich zur Position ... hm
Der Planer soll nur ein Beispiel sein was man mit resize-baren Controls machen könnte.
gruss by OHR
Jimmy
Jimmy