resize per Maus ( nicht Dialog )

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

resize per Maus ( nicht Dialog )

Beitrag von AUGE_OHR »

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 :?:
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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 )

Beitrag von brandelh »

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
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: resize per Maus ( nicht Dialog )

Beitrag von AUGE_OHR »

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:
bei Excel wird bei einer Cell, statt DragDrop, ja erweitert/markiert.
in einem Browse kann ich nur die gesamte Column Wide verändern, nicht eine einzelne Cell.
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.
und woher weiss ich das ich auf dem Rand bin ?

Code: Alles auswählen

:lbDown := {| aPos, uNIL, self | ... } 
gibt mir ja nur aPos zurück

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 ]
womit ich die Cell (ohne Frame ?) bestimmen kann.

angenommen ich würde, per Ownerdraw, einen Rand um eine ( Reihe ) Cell legen ... der existiert ja nur im Bildschirm Speicher.
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
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 )

Beitrag von Wolfgang Ciriack »

Ich würde eines von beiden (Resizen oder Drag/Drop) nur zusammen mit gedrückter Strg-Taste ermöglichen.
Viele Grüße
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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 )

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: resize per Maus ( nicht Dialog )

Beitrag von AUGE_OHR »

brandelh hat geschrieben:ich selbst habe das noch nicht gemacht, aber der xppFD nutzt solche Techniken.
Ja ... da legt sich ein "Rahmen" um den XbPart. Den Effekt möchte ich haben :)
brandelh hat geschrieben:Bei diesem Beispiel wird unterschieden zwischen "Klick in Header" (Sortierung) oder Maus auf Tabellenspalte (Breite ändern)
\XPPW32\source\samples\solution\SQBrowse
das Verzeichnis gibt es nicht bei mir ?
brandelh hat geschrieben:weiter Beispiele mit "nur Spaltenbreite ändern"
\XPPW32\source\samples\basics\GuiBrow
hm ... das ist doch das Standard verhalten ... oder was meinst du
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.
hm ... einen eine Button, mit Manifest, hätte man doch eine HOVER Function.
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
hm ...
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: resize per Maus ( nicht Dialog )

Beitrag von AUGE_OHR »

Wolfgang Ciriack hat geschrieben:Ich würde eines von beiden (Resizen oder Drag/Drop) nur zusammen mit gedrückter Strg-Taste ermöglichen.
Ja gute Idee !
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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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 )

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: resize per Maus ( nicht Dialog )

Beitrag von AUGE_OHR »

so nun hab ich mal ein wenig probiert und das ist bislang raus gekommen.
SizePart.zip
(22.51 KiB) 210-mal heruntergeladen
zuerst muss man auf das XpPart klicken um es zu aktivieren.
SizePart.JPG
SizePart.JPG (18.73 KiB) 5153 mal betrachtet
dann kommen die 9 Marker.
zum moven muss man den mittleren Marker nehmen.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: resize per Maus ( nicht Dialog )

Beitrag von AUGE_OHR »

hier nun ein Zeit Planer wo ich solche move-/resize-bare Controls verwendet habe.
DXEPLAN1.JPG
DXEPLAN1.JPG (66.52 KiB) 5105 mal betrachtet
mit der Demo kann man schon mit den Kalender (benötigt DXE.DLL / ot4XB.DLL ) spielen und die Controls verschieben / resizen.
DXEPLAN1.zip
incl. DXE.DLL / ot4XB.DLL
(781.13 KiB) 184-mal heruntergeladen
Tip : die mittlere Markierung dient zum "moven" und für "leave" (Markierungen schliessen )
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
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 )

Beitrag von brandelh »

das sieht ja schon mal gut aus, aber du solltest alle 7 Tage eine feine Linie von oben einziehen (grau ?) ...
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: resize per Maus ( nicht Dialog )

Beitrag von AUGE_OHR »

brandelh hat geschrieben:das sieht ja schon mal gut aus, aber du solltest alle 7 Tage eine feine Linie von oben einziehen (grau ?) ...
Ja ... leider klappt das mit der Transparenz und dem "Grid" noch nicht so wie gewollt ...
am liebsten hätte ich beim moven/sizen eine Linie nach oben zur Scala ... oder die Farbe der Scala ändert sich zur Position ... hm :-k

Der Planer soll nur ein Beispiel sein was man mit resize-baren Controls machen könnte.
gruss by OHR
Jimmy
Antworten