Autor |
Beitrag |
Terra23
      
Beiträge: 872
Win 8
Delphi 7
|
Verfasst: Sa 10.04.10 19:22
Hi!
Ich würde gern wissen, ob es einen ganz simplen Code gibt, der es möglich macht, dass ein Button seine Position verändert, sobald der Mauszeiger in dessen Nähe kommt.
Ich möchte damit niemanden belästigen sondern das nur nutzen, um die Kids auf meiner Gruppe ein wenig zu ärgern. Es steckt also keine illegale Absicht dahinter.
Über die Suche habe ich nichts passendes gefunden.
MfG
Terra
_________________ Hasta La Victoria Siempre
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 10.04.10 19:29
Du könntest im OnMouseMove der Form (oder des Panels/Groupbox/... wo der Button drauf liegt) abfragen, ob die Maus in der Nähe ist, und dann den Button umsetzen.
_________________ We are, we were and will not be.
|
|
Terra23 
      
Beiträge: 872
Win 8
Delphi 7
|
Verfasst: Sa 10.04.10 19:31
Soweit ist mir das Prinzip schon klar. Wenn ich mich jedoch dransetze (nicht, dass ich es nicht versuchen wollen würde), kommt ewig langer Code raus und das geht sicherlich mit ein paar Zeilen.
Zudem habe ich gerade 24-Stunden-Schicht und leider keine Möglichkeit, an mein Delphi zu kommen.
Terra
_________________ Hasta La Victoria Siempre
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 10.04.10 19:35
Naja, das ist so ne längliche If-Abfrage
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| if ((x > Button.left - 20) and (x < Button.Left + Button.Width + 20)) and ((y > Button.Top - 20) and (y < Button.Top + Button.Height + 20)) then ... |
_________________ We are, we were and will not be.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 10.04.10 20:46
Dann zeig uns doch mal deinen Code.
|
|
Terra23 
      
Beiträge: 872
Win 8
Delphi 7
|
Verfasst: Sa 10.04.10 23:58
@Luckie: Das werde ich tun, wenn ich den Code fertig habe. Wie gesagt, ich habe heute eine 24-Stunden-Schicht und die endet erst morgen (Sonntag) um 08:00 Uhr morgens. Und ich darf auf dem Gruppenrechner keine Software installieren, d.h. kein Delphi, kein Sacred, kein Need For Speed Most Wanted.
Daher muss ich warten, bis ich daheim am Laptop sitze.
@Gausi: Ich habe mir das mal aufgezeichnet. Ich danke dir für deinen Code, aber ich bin mir recht sicher, dass zwischen die Abfragen bei X und Y ein OR gehört, sprich:
Wenn X sowieso ODER X sowieso
UND
Wenn Y sowieso ODER Y sowieso
Aber das muss ich halt erstmal am Laptop probieren.
Werde mich dann wieder melden.
THX erstmal @ all.
Terra
_________________ Hasta La Victoria Siempre
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 11.04.10 00:07
nein das mit den ands passt schon. du willst ja das es nur in einem gewissen radius passiert.  rechne es dir aus mit einer Wahrheitstabelle.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Sa 17.04.10 10:55
Entschuldigt mal Leute,
mir ging gerade solch eine Möglichkeit durch den Kopf, dass man den Button mittig auf ein Panel legt, das die Größe des Mindestabstands hat, dieses dann visible=false macht und dann eine OnMouseOver-Procedure dafür schreibt.
Ich kann es nur im Moment leider nicht ausprobieren, also weiß ich nicht, ob es mit einem unsichtbaren Panel so geht, aber ich denke, dass diese Möglichkeit sonst doch noch einfacher wäre.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 17.04.10 11:53
Wenn das Panel unsichtbar ist, ist es der Button darauf auch. Und von einem MouseOver bekommt das unsichtbare Panel auch nichts mit. 
_________________ We are, we were and will not be.
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 17.04.10 11:56
Ein(sichtbares) Frame könnte gehen.
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 17.04.10 15:05
Ich dachte auch solche Scherzprogramme würden hier nicht unterstützt?
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 17.04.10 15:24
Ich seh das hier eher als "Test".
Aufgabe: Klick den Button.
Lösung: Tabtaste und Enter.
Das Programm dürfte weder Schaden anrichten, noch den User sonstwie wirklich ärgern. 
_________________ We are, we were and will not be.
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 17.04.10 15:36
TabStop := false;  (auch das wird niemanden von Taskleistenbutton oder Task-Manager abhalten)
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: So 25.04.10 10:41
Zu meiner Panel-Möglichkeit:
Man müsste doch nur dem Panel die Option BorderStyle:=bsNone geben,
oder irgendwie in dieser Art heißt das doch.
Wenn das Panel dann die gleiche Farbe wie der Fensterhintergrund hat, dann dürfte man es doch nicht sehen, wenn es normal sichtbar ist.
Eine weitere Möglichkeit wäre doch aber auch, wenn man das Panel unsichtbar haben möchte, dass man das dann so macht, indem beide den Owner Form haben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure Panel.OnMouseOver(Sender) begin Panel.Left:=random(Form.Width-Panel.Width); Panel.Top:=random(Form.Height-Panel.Height); Button.Left:=Panel.Left+((Panel.Width div 2)-(Button.Width div 2)); Button.Top:=Panel.Top+((Panel.Height div 2)-(Button.Height div 2)); end; |
Ich denke zumindest, dass das so klappen müsste, kann es aber gerade nicht ausprobieren.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 25.04.10 13:10
Ja, klappen müsste es, aber es ist ungefähr genauso programmiertechnisch richtig, wie eine unsichtbare Memo-Komponente zum speichern von Variablen zu verwenden.
Oder anders gesagt: Ich kann auch auf Rollerskates ne Achterbahn fahren. Nur weils Machbar ist, ist es nicht sinnvoll.
Theoretisch könntest du dir aber auch ein TRect definieren und dann im MouseMove PtInRect() zusammen mit einer If-Abfrage verwenden.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|