![]() |
[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:
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...
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 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 |
Re: [Achtung Anfänger ^^] Färben von Panels mit gedrückter M
|
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 ^-^ |
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. |
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! |
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 ![]() (Ist jetzt einfach nur mal so ein Gedankengang) |
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 |
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 |
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 01:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz