AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Viele OnMouseMove Proceduren | elegantere Lösung
Thema durchsuchen
Ansicht
Themen-Optionen

Viele OnMouseMove Proceduren | elegantere Lösung

Ein Thema von daniel-h · begonnen am 29. Jun 2009 · letzter Beitrag vom 29. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von daniel-h
daniel-h

Registriert seit: 9. Sep 2008
Ort: b.
170 Beiträge
 
Delphi 7 Enterprise
 
#1

Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 18:04
Hay,
ich programmiere gerade eine Toolbar die sich öffnet, wenn der Mauszeiger ganz links am Rand ist.
Wenn der Zeiger in der Form bleibt, soll das Fenster angezeigt bleiben. Wenn es aus dem Fenster raus geht, soll es *wusch* machen und das Fenster ist wech. Das funzt auch wunderbar. Mein Problem ist, wenn der User auf einen Button geht ist das Fenster auch wech. Dass soll ja nicht sein. Es ist auch ein bisschen unschön wenn ich zig- tausend OnMouseMove Proceduren stehen habe.
Kann man das ein wenig eleganter lösen?

ps: Mir ist kein besserer Titel eingefallen.

mfG
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 18:07
Du kannst doch eine einzige MouseMove-Methode schreiben und diese mehreren Komponenten zuordnen (entweder im OI oder per Code).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von daniel-h
daniel-h

Registriert seit: 9. Sep 2008
Ort: b.
170 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 18:19
mmhm, nehmen wir mal an meine verstecken procedure ist so aufgebaut:
Delphi-Quellcode:
Procedure WegDamit;
begin
  //bla bla blupp (code)
end
was muss ich dann im OI bzw. im code schreiben?#
wenn ich im OI "WegDamit" schreibe passiert rein garnix.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 18:25
Ich sprach ja auch von Methoden. Methoden gehören zu einer Klasse (z.B. Deinem Hauptformular), so dass beispielsweise Folgendes ginge:
Delphi-Quellcode:
procedure TDeinForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  //Mausposition in einem Label anzeigen
  lblMousePos.Caption := Format('X: %d, Y: %d',[X,Y]);
end;
Diese Methode kannst Du im OI allen Komponenten im OnMouseMove zuweisen. Willst Du wissen, welche Komponente das Ereignis ausgelöst hat, musst Du dann den Sender-Parameter auswerten.

[edit] Ich kaufe ein "i" [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von daniel-h
daniel-h

Registriert seit: 9. Sep 2008
Ort: b.
170 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 18:34
manchmal sehe ich den wald vor lauter bäumen nicht?!
aber zum nächsten problem --> wenn ich die maus auf ein label, wo die Uhrzeit angezeigt wird bewege, ist das fenster wieder weg.
was läuft da schief?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 18:41
Ohne etwas Code kann ich Dir das auch nicht sagen, sondern könnte höchstens raten
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von daniel-h
daniel-h

Registriert seit: 9. Sep 2008
Ort: b.
170 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 18:43
alles klar:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Shape1: TShape;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseLeave(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure verstecken;
begin
    SetWindowLong(Application.Handle, GWL_EXSTYLE,

                GetWindowLong(Application.Handle, GWL_EXSTYLE)

                or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  verstecken;
  form1.Width := 1;
end;

procedure TForm1.FormMouseLeave(Sender: TObject);
begin
  form1.AlphaBlendValue := 1;
  form1.Width := 1;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  form1.Width := 200;
  form1.AlphaBlendValue := 255;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption := TimeToStr(time);
end;

end.
und:
Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas{Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

Re: Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 18:45
Wenn die Maus auf das Label kommt, wird MouseLeave des Formulars ausgeführt. Evtl. wäre es geschickter, die Screen-Koordinaten des Mauszeigers zu ermitteln und zu schauen, ob sich diese noch innerhalb Deines Formulars befinden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von daniel-h
daniel-h

Registriert seit: 9. Sep 2008
Ort: b.
170 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 19:03
mit
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  point: TPoint;
begin
  GetCursorPos(point);
 
end;
prüfe ich die koordinaten der maus. Wie muss ich das ergebnis jetzt in eine if abfrage einbinden?

ich würde das jetzt so machen

[pseudocode] if point.x <= //zahl
else if point.y <= //zahl
then fenster verstecken;
else fenster anzeigen [/pseudocode]

jetzt wäre es sehr nett, wenn es mir einer in delphi übersetzen würde.
weil ich es einfach nicht gebacken bekomme

mfg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

Re: Viele OnMouseMove Proceduren | elegantere Lösung

  Alt 29. Jun 2009, 19:17
Den Punkt hast Du ja jetzt (das sollte btw. Mouse.CursorPos entsprechen), nun könntest Du mit PtInRect prüfen, ob sich dieser innerhalb Deines Formulars befindet. Beispiel:
Delphi-Quellcode:
procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
  if PtInRect(BoundsRect{oder ClientRect, je nachdem},Mouse.CursorPos) then
    Color := clRed
  else
    Color := clBlue;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:49 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