Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [Achtung Anfänger ^^] Färben von Panels mit gedrückter Maus (https://www.delphipraxis.net/129031-%5Bachtung-anfaenger-%5E%5E%5D-faerben-von-panels-mit-gedrueckter-maus.html)

Darkdavos 11. Feb 2009 13:04


[Achtung Anfänger ^^] Färben von Panels mit gedrückter Maus
 
Erstmal hallo Forum =)

Ich bin erst neu hier und arbeite mich erst in die Marterie von Delphi ein und versteh sie noch nicht ganz. Ich mach gerade ein Praktikum von der Schule aus wo ich einen Kalender in Delphi erstellen soll. Mein Chef wünscht sich von mir ein Kalender mit einigen Funktionen drin, die ich eigentlich noch alle gut hinbekommen habe, bis auf eine.

Ich soll (ich denke mal es ist eine) eine Draging Funktion bauen mit der ich Panels markieren kann. Ab diesem Panel soll man anfangen können zu ziehen und über die nächsten drüber...
Diese sollen dann einfach die Farbe wechseln....
Das Problem an der Sache ist das mein Chef auch nicht genau weiß wie es in Delphi funktionieren soll, ich soll es jetzt mal selbst schauen ob ich dazu was hinbekomme

Ich hab das jetzt schon per Mousemove probiert und eine Variable mit Mousedown immer je nach maus 0 und 1 wechseln lassen...
Per Mousemove lässt sich aber nur in einem Feld drinen mit gedrückter Maustaste die Farbe wechseln, funktioniert aber nicht für die nebenstehenden Panels beim darüber fahren...

Die Frage ist jetzt, ist Drag and DragOver das richtige dafür? Und wie funktioniert es?

Ich besitze verschiedene Panels die z. B. J2P1 heißen und J+1 ... also J2P1 J3P1 J4P1 ... so weiter

Ein Code wie ich es Versucht habe:

Delphi-Quellcode:
procedure TFormJanuar.J2P1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
    if Button=mbLeft then
    J2P1.BeginDrag(true);
end;

procedure TFormJanuar.J2P1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
    J2P1.color:=clred;
end;

procedure TFormJanuar.J2P1DragOver(Sender: TObject; Source: TDragDockObject; X,
      Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept:= true;
  J2P1.color:=clred;
  J2P1.DragCursor:=CrDrag;
end;

procedure TFormJanuar.J3P1DragOver(Sender: TObject; Source: TDragDockObject; X,
      Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept:= true;
  J2P1.color:=clred;
  J2P1.DragCursor:=CrDrag;
end;
.
.
.
.
Ich bin nicht wirklich gut in Delphi, deswegen entschuldige ich mich dafür, dass ich so etwas "Lowes" hier frag ... aber ich hab echt kein Peil...

Ich sitz schon seit Montag über 3 verschieden Delphibüchern und such auch in verschiedenen Foren nach Antworten, finde aber nur Codeschnipsel die ich nicht verstehe. ='(
(Die Suchfunktion hat einige Ergebnisse zu Drag and Drop bei euch herausgebracht, die ich brav durchgelesen habe, aber ich schaff nicht sie selbst zu verwenden und werde auch nicht wirklich schlau aus ihnen. Die Themen sind meist schon so hoch gestellt das ich nicht nachkomme...) :freak:

Für Antworten würde ich euch sehr danken
Greet David

nuclearping 11. Feb 2009 13:08

Re: [Achtung Anfänger ^^] Färben von Panels mit gedrückter M
 
Warum benutzt du dafür Panels?

Schau dir mal den Virtual Tree View an -> http://www.soft-gems.net/

Darkdavos 11. Feb 2009 13:14

Re: [Achtung Anfänger ^^] Färben von Panels mit gedrückter M
 
An der Gundstruktur von dem Programm möchte ich bitte nichts mehr ändern, es kommt jetzt schon auf ungefähr 100.000 Zeilen, weil schon wirklich viele Funktionen drin stecken....

Jetzt an dem Grundaufbau etwas zu ändern wäre nicht umbedingt hilfreich ^-^

nuclearping 11. Feb 2009 13:25

Re: [Achtung Anfänger ^^] Färben von Panels mit gedrückter M
 
Das Problem ist afaik, dass der Event, bzw. die Message-Verarbeitung, wenn die Maus auf einem Panel gedrückt wurde, von diesem Panel auch "behalten" und nicht weiter dispatcht wird.

Da gabs aber einen Befehl, den du im MouseOver (oder MouseDown?) aufrufen konntest, der das wieder freigibt. War hier glaube sogar in einem der letzten Beiträge.

xy124 11. Feb 2009 16:24

Re: [Achtung Anfänger ^^] Färben von Panels mit gedrückter M
 
ein Glück, das Panels Rechteckig sind...
An die Mausposition kommst du noch heran?
dann kannst du ja ganz einfach Auswerten, ob die Maus in einem anderen Panel ist!
Delphi-Quellcode:
if ( (panel.left<mouse_x) and (mouse_x < panel.left+panel.width) ) and
   ( (panel.top<mouse_y) and (mouse_y < panel.top+panel.height) ) then
  //die Maus ist drin!

Helmi 11. Feb 2009 16:28

Re: [Achtung Anfänger ^^] Färben von Panels mit gedrückter M
 
Hallo,

was wäre, wenn beim Fahren mit der Maus festgestellt wird, welches Control unter der Maus ist und dann dementsprechend reagieren?

Einen Code dafür gäbe es bei den Schweizern um das Control festzustellen.

(Ist jetzt einfach nur mal so ein Gedankengang)

himitsu 11. Feb 2009 16:31

Re: [Achtung Anfänger ^^] Färben von Panels mit gedrückter M
 
wenn Maustaste gedrückt wird (OnMouseDown), dann mit ReleaseCapture die Maus freigeben und des Status "Taste gedrückt" in einer Variable speichern ... in OnMouseUp diesen Status dann wieder löschen.

nun kannst du im OnMouseMove der Panels prüfen ob dieser Status gesetzt ist und dementsprechend darauf reagieren. ( if teste_gedrückt then ... )

PS: wenn du die Umfärbung nur im OnMouseMove ausführst, dann solltest du am Ende von OnMouseown am Besten OnMouseMove einmal direkt aufrufen ... falls mal wer nur klicken und nicht Ziehen will

Darkdavos 12. Feb 2009 09:30

Re: [Achtung Anfänger ^^] Färben von Panels mit gedrückter M
 
Vielen dank euch allen =) jetzt funktioniert das Programm! :P

Thread kann von meiner Seite aus Geschlossen werden :D

_frank_ 12. Feb 2009 20:59

Re: [Achtung Anfänger ^^] Färben von Panels mit gedrückter M
 
Liste der Anhänge anzeigen (Anzahl: 2)
willst du wirklich das panel während des drag-vorgangs verschieben?

ich hab mal 2 Alternativ-Methoden angehängt :)
einmal mit einem dynamisch erzeugten Cursor und einmal mit dragimages.

Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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