AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Panel verschieben

Offene Frage von "Kullerkeks"
Ein Thema von Kullerkeks · begonnen am 24. Feb 2009 · letzter Beitrag vom 30. Mär 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#11

Re: Panel verschieben

  Alt 8. Mär 2009, 13:41
Zitat von Kullerkeks:
ja das ist so ähnlich, aber wieder mit klassen und mit images auf panels... der quelltext verwirrt mich
welchen Quelltext meinst du? den mit dem MouseOver/Down/Up? was genau ist da unklar?

Zitat von Kullerkeks:
könntest du vllt. einfach ein beispiel schreiben, wie ich ein panel auf ein anderes "legen" kann?
(ich weiß nicht, ob es wichtig ist, dass da noch etwas drunter liegt!? also eine "scheibe" soll auf einen "stab" [türme von hanoi])
naja, du musst halt beim Ablegen prüfen, ob an der position (bzw. etsprechend versetzt) das andere Panel liegt und entweder das ablegen erluben oder zurückspringen an die alte Position. für die Reihenfolge der "Scheiben" kannst du das Tag-Property verwenden und entsprechend darauf prüfen.

@larsi: bitte delphi-tags verwenden

Gruß Frank
  Mit Zitat antworten Zitat
Kullerkeks

Registriert seit: 24. Feb 2009
Ort: Berlin
9 Beiträge
 
#12

Re: Panel verschieben

  Alt 10. Mär 2009, 18:43
also das von Larsi funktioniert erst mal - d.h. ich kann das Panel bewegen (danke!!!)

jetzt müsste ich noch wissen, wie ich einschränken kann, wo es abgelegt wird, also dass man das panel nicht überall hinlegen kann sondern nur an eine bestimmte position.
und was bedeutet das hier genau: "(WM_SYSCOMMAND,$F012,0)" ?

(danke schon mal)
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#13

Re: Panel verschieben

  Alt 10. Mär 2009, 21:08
machst du es genauso wie larsi geschrieben hat? (also nur bewegen, wenn Shift-taste gedrückt ist)
oder per Mousedown/MouseUp?
bei ersterem wird es schwierig, den Ablegezeitpunkt zu ermitteln (timer u.ä. wäre in meinen Augen zu sehr gebastelt).
man könnte es evtl. noch mit onKeyUp probieren und beim loslassen der shift-taste die aktuelle position prüfen und ggf. an die alte (vor dem verschieben gesicherte) Position zurücksetzen.
MouseDown/MouseUp (egal ob mit ht-Caption,WM_SYSCOMMAND+$F012 oder manuell) finde ich eleganter und intuitiver, dort prüfst du einfach beim MouseUp und setzt wie oben bei nicht erlaubter position auf die alte zurück.

zu der Frage mit dem $F012 und WM_SYSCOMMAND (welche ich für ungünstig halte, da man nicht gleich sieht, was man da eigentlich mit der Sendmessage bezwecken will)...

schau mal da ist das ganz gut erklärt:
http://support.microsoft.com/kb/114593

Gruß Frank
  Mit Zitat antworten Zitat
Kullerkeks

Registriert seit: 24. Feb 2009
Ort: Berlin
9 Beiträge
 
#14

Re: Panel verschieben

  Alt 11. Mär 2009, 19:04
Zitat:
Wenn Sie auf die Titelleiste klicken, wird der Wert, der von WM_SYSCOMMAND gesandt wird, von WM_SYSCOMMAND gesandt und HF012.
---> das ist aber unlogisch xD

naja und bei dem anderen muss ich gar nicht die shift-taste gedrückt halten.
ich habe den quelltext genau so übernommen (natürlich die panel-nummern geändert) und kann sie per mausklick frei bewegen.
habe dann auch versucht, eine "einschränkung" zu schreiben, indem ich festgelegt habe, dass z.b. panel1 nicht bewegt werden darf, wenn sich panel2 an einer bestimmten position (genau darüber) befindet

Delphi-Quellcode:
procedure TForm1.Panel5MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if Panel6.left<>8 and if Panel6.top<>504
then begin
    if ssLeft in Shift then
    begin
      ReleaseCapture;
      Panel24.Perform(WM_SYSCOMMAND,$F012,0);
    end;
end;
end;
aber da kommt immer das hier: [Fehler](470): Operator ist auf diesen Operandentyp nicht anwendbar
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#15

Re: Panel verschieben

  Alt 11. Mär 2009, 21:59
automatische Übersetzung und ihre tücken

damit ist gemeint, dass beim klick auf die Titelleiste an das zugehörige Control (das Fenster) eine WM_Syscommand-Message geschickt wird mit dem wert $F012.

appropos ist meiner Auffassung nach das MouseMove-Event falsch für den zweck. gehört eigentlich ins Mousedown, wenn man schon das komische $F012 nimmt.
dein Fehler kommt daher, dass der compiler folgendes versucht:

8 and if geht natürlich nicht...was hilft sind klammern und das zweite if weg
if (Panel6.left<>8) and (Panel6.top<>504) then dürfte aber in jedem Tutorial stehen...

HTH Frank
  Mit Zitat antworten Zitat
Kullerkeks

Registriert seit: 24. Feb 2009
Ort: Berlin
9 Beiträge
 
#16

Re: Panel verschieben

  Alt 12. Mär 2009, 19:01
oh wow, jetzt funktionierts
danke!!
aber wieso ist "onmousemove" nicht geeignet? es funktioniert doch und das zählt doch (jedenfalls bei dem, was ich machen will)
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#17

Re: Panel verschieben

  Alt 12. Mär 2009, 20:47
Zitat von Kullerkeks:
aber wieso ist "onmousemove" nicht geeignet? es funktioniert doch und das zählt doch (jedenfalls bei dem, was ich machen will)
weil onMouseMove immer aufgerufen wird, wenn die maus innerhalb des Controls bewegt wird. die eigenschaft mit dem perform muss aber nur 1x gesetzt werden (intuitiv im Mousedown) und nix zig 1000 mal

haue den Code einfach mal ins Mousedown und du wirst sehen das reicht.

Delphi-Quellcode:
procedure TForm1.PanelMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
// if ssLeft in Shift then
// begin
  ReleaseCapture;
  (Sender as TPanel).Perform(WM_SYSCOMMAND,$F012,0); //jetzt kannst du die event-methode auch für alle panels nehmen
// end;
end;
Gruß Frank
  Mit Zitat antworten Zitat
Kullerkeks

Registriert seit: 24. Feb 2009
Ort: Berlin
9 Beiträge
 
#18

Re: Panel verschieben

  Alt 14. Mär 2009, 09:55
verstehe ich nicht so ganz aber ich lass es einfach mit OnMouseMove - ist der quelltext zwar ziemlich lang aber es funktioniert soweit...
schönes wochenende!
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#19

Re: Panel verschieben

  Alt 14. Mär 2009, 15:54
Zitat von Kullerkeks:
verstehe ich nicht so ganz aber ich lass es einfach mit OnMouseMove - ist der quelltext zwar ziemlich lang aber es funktioniert soweit...
schönes wochenende!
was genau ist unklar? mousemove wird viel zu oft aufgerufen für diesen Zweck. probiers halt einfach mal im Mousdown aus...
die geänderte Zeile ist einfach nur dafür da, dass du für alle Panels die gleiche Methode verwenden kannst. weise die einfach deinen ganzen panels zu...

allerdings musste ich feststellen, dass es mit der perform-variante scheinbar nicht möglich ist, das ende der drag-Operation mitzubekommen (onMouseup wird nicht gecallt), und somit dann auf die position zu prüfen.
daher wird man das wohl doch manuell machen müssen (wie im von mir verlinkten thread).

Gruß Frank
  Mit Zitat antworten Zitat
Kullerkeks

Registriert seit: 24. Feb 2009
Ort: Berlin
9 Beiträge
 
#20

Re: Panel verschieben

  Alt 30. Mär 2009, 10:24
facharbeit war nicht optimal aber hab insgesamt immerhin 11 punkte (entspricht zensur 2) gekriegt
danke an alle, die geantwortet haben
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz