Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Label unter Mausposition (https://www.delphipraxis.net/53293-label-unter-mausposition.html)

Mr_G 13. Sep 2005 19:58

Re: Label unter Mausposition
 
@ Hagen:
Du hast dich nur leicht verrannt wenn du mich fragst. FindDragTarget ist nämlich imho gar nicht nötig da du doch als Parameter den Sender bekommst! Außerdem würde ich die Funktion schon rein vom Namen her in die Sparte Drag & Drop einsortieren.
Außerdem versuchst du das gefundene Element in eine Variable vom Typ TControl zu zwengen... Nach meiner Meinung (korregiert mich wenn ich falsch liege) kann das gar nicht gehen, denn Falls du ein Label übergeben bekommst ist es eben vom Typ TLabel und da hilfts auch nicht wenn es von einem TControl abstammt.

P.S.: Ich schließ mich voll und ganz Marabu an: Ich denke wir wollen/sollen helfen die beste Lösung für ein Problem zu finden.

negaH 13. Sep 2005 20:01

Re: Label unter Mausposition
 
Zitat:

Andererseits besteht aber auch jederzeit die Gefahr, dass der Helfer für intelligentes Mitdenken abgewatscht wird.
Sehe ich auch so, intelligent ist es erstmal exakt auf die Fragestellung einzugehen und die verschiedenen Möglichkeiten der Lösung erstmal darzulegen und dann abzuwägen was die beste davon ist.

Unintelligent ist es von vornherein, ohne die Lösungsvorschläge der anderen zu diskretitieren geschweige denn sie zu verstehen ein Flamwar vom Zaun zu brechen.

Faux, wurde in keinsterweise abgewascht, nicht von mir und auch nicht von Sharky.



@Faux:

Zitat:

Ich hab ja nix gegen komplexen Code Aber wenns einfacher geht, und das selbe bewirkt, dann bevorzuge ich das einfachere.
Dein Code "kann" zwar mehr, in diesem Fall, ist es aber (du hast es selbst gesagt), egal, welchen Code man verwendet...
Ich habe nicht gesagt das es "egal" ist welchen Code man verwendet, du legst mir damit Worte in den Mund.

Ich habe klipp und klar gesagt das es zum besseren Verständnisses des Fragestellers es besser ist deinen offensichtlichen und allgemein sinnvollen Vorschlag zu befolgen. Dies tat ich nur aus einem Grunde: dein Vorschlag ist wensentlich einfacher umzusetzen und schneller für einen Anfänger zu begreifen.

Deinen Vorschlag ansich halte ich aus meiner Erfahrung aber für viel weniger Supportfreundlich, besonders wenn die Aufgabenstellung es verlangt das ALLE TLabels eines TForms angesprochen werden sollen. Dies beinhaltet auch die TLabels die erst viel später durch zb. einen anderen Programierer auf das TForm platziert werden. In diesem Moment bezahlt sich mein Vorschlag, denn man muß keinerlei Events mehr setzen, geschweige denn darüber überhaupt nachdenken ob man was setzen muß !

Egal: es nervt mich das man in letzter Zeit für eine gutgemeinte Hilfe immer wieder angezählt wird, statt sie einfach als sinnvollen Hinweis zu akzeptieren.

Nochwas: was hat .NET mit der Sache zu tuen ??

Gruß Hagen

negaH 13. Sep 2005 20:04

Re: Label unter Mausposition
 
@M_Gr:

Zitat:

Du hast dich nur leicht verrannt wenn du mich fragst. FindDragTarget ist nämlich imho gar nicht nötig da du doch als Parameter den Sender bekommst! ..... nicht wenn es von einem TControl abstammt.
Uff, lies die Hilfe bitte und dann urteile neu. Was kann ICH dafür das Borlands Entwickler die Funktion die ein beliebiges von TControl abgleitetes Control unter einer gegebenen Koordinate FindDragTarget() genannt haben.
Sie heist einfach nunmal so, sie zu ignorieren um ein Problem zu lösen nur weil sie SO heist ist doch noch dümmer.

Bitte schau dir die Objekthierarchie der VCL genauer an und überlege mal wer die Mutter aller Controls IST !

Gruß Hagen

faux 13. Sep 2005 20:09

Re: Label unter Mausposition
 
Zitat:

Zitat von negaH
Egal: es nervt mich das man in letzter Zeit für eine gutgemeinte Hilfe immer wieder angezählt wird, statt sie einfach als sinnvollen Hinweis zu akzeptieren.

Das hat auch niemand getan. Es wurde lediglich gesagt (das hast du sogar selbst gesagt (jetzt aber wirklich.. :D)), dass deine Möglichkeit für einen Anfänger schwerer zu verstehen ist.

Zitat:

Zitat von negaH
Nochwas: was hat .NET mit der Sache zu tuen ??

Nichts. Deswegen auch das Suffix "Aber egal..."... ;)

@Lilo:
Und hast du das Problem gelöst?

hanselmansel 13. Sep 2005 20:12

Re: Label unter Mausposition
 
HiHo,

Ich wollte mir gar nicht groß in die Diskussion von euch einmischen, sondern nur zum Besten geben, dass ich die Lösungsvariante von Hagen supergut in einem Projekt von mir verwenden kann! Ich muss zwar noch daran rumdocktor'n, aber mit dynamisch erstellten Labels hat der Code echt was für sich!

viele Grüße,

hanselmansel

P.S.: Und bzgl. der Komplexität des Codes: Man kann nun wirklich nicht behaupten, dass ich kein Newbie wäre!

Lilo 13. Sep 2005 20:15

Re: Label unter Mausposition
 
hagens idee ist vom prinzip er genau das was ich brauche ^^

das problem, mal ein kleines bsp.:,

Delphi-Quellcode:
procedure TForm1.MausEnter(lbl:tlabel);
begin
    lbl.Font.Color:=clRed;
end;

procedure TForm1.MausLeave(lbl:tlabel);
begin
  lbl.Font.Color:=clBlack;
end;

procedure TForm1.Label1MouseEnter(Sender: TObject);
begin
     MausEnter(label1);
end;

procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
     MausLeave(label1);
end;

procedure TForm1.Label2MouseEnter(Sender: TObject);
begin
     MausEnter(label2);
end;
ich müsste dann ja bei allen 30 labeln mouseenter mouseleave jeweils 1 procedure machen... wenn ich aber den name bekommen kann wenn ich mit der maus über dem label in kann ich mir das alles sparen... und hab im endeffekt nur 3 proceduren ^^ kann sein das man sowas ganz elegant lösen kann aber diese lösung habe ich nicht gefunden deswegen mein weg hier her :) ^^

faux 13. Sep 2005 20:17

Re: Label unter Mausposition
 
Hast du es nun geschafft, oder war dein letzer post ein "Bitte Helft mir" Post? :gruebel:

marabu 13. Sep 2005 20:25

Re: Label unter Mausposition
 
Hi Lilo,

Zitat:

Zitat von Lilo
hagens idee ist vom prinzip er genau das was ich brauche

bevor du noch die 60 Prozeduren kodierst - sehe ich das auch so.

Ich nenne das jetzt mal eine wohldurchdachte Entscheidung, die auch Hagen versöhnen sollte...

marabu

faux 13. Sep 2005 20:29

Re: Label unter Mausposition
 
Passt zwar net ganz hier rein, aber einen neuen Thread braucht ma auch net:

Kann mir wer eine .NET kompatible Lösung zu Hangens Lösung geben/sagen/zu ihr verhelfen? Denn das ist manchmal sicherlich nützlich... ;)

Danke schon mal.

negaH 13. Sep 2005 20:35

Re: Label unter Mausposition
 
Zitat:

ich müsste dann ja bei allen 30 labeln mouseenter mouseleave jeweils 1 procedure machen...
Ok, Faux hat es dir schon gesagt, nun nochmal.

1.) du hast 30 labels auf deinem TForm.
2.) klicke in das OnMouseEnter im OI von Label1 und schreibe im Quelltext folgendes

Delphi-Quellcode:
procedure TForm1.Label1MouseEnter(Sender: TObject);
begin
  (Sender as TLabel).Font.Color := clRed;
end;
3.) nun wieder in de OI vom Label1 in OnMouseLeave() und doppelklick in der Methode schreibst du folgendes

Delphi-Quellcode:
procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
  (Sender as TLabel).Font.Color := clBlack;
end;
4.) jetzt arbeitet das Label1 auf deinem Form schon wie gewünscht.
5.) markiere alle anderen Labels von Label2 bis Label30 per Shift Taste
6.) gehe in den OI in OoMouseEnter() und wähle dort in der DropDown Liste die Methode .Label1OnMouseEnter() aus
7.) mache das gleiche mit OnMouseLeave()

Nun haben alle 30 Labels die gleichen beiden Methoden, wie oben codiert in ihren Events zugewiesen.

Du benötigst also KEINE 30*2 eigene Events um diese dann auf 2 Basismethoden umzudiregieren.

Das Problem mit meiner Funktion ist das du nicht erkennen kannst ob die Mausbewegung ein neues Label selektiert bzw. das alte selektierte Label verlassen hat. Benötigst du diese Funktionalität so müsstest du meine Methode umbauen, inetwaso

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...blabla
  private
    FCurrentLabel: TControl;
  ...blabla
  end.

procedure TForm1.MouseMove();
var
  C: TControl;
begin
  C := FindDragTarget(ClientToScreen(Point(X, Y)), False);
  if C <> FCurrentLabel then
  begin
    if (FCurrentLabel is TLabel) and (FCurrentLabel.Owner = Self) then
      TLabel(FCurrentLabel).Font.Color := clBlack;
    FCurrentLabel := C;
    if (FCurrentLabel is TLabel) and (FCurrentLabel.Owner = Self) then
      TLabel(FCurrentLabel).Font.Color := clRed;
  end;
end;
Wichtig ist nur eines, egal welche Lösung du benutzt, du musst sie verstanden haben.
Ich empfehle also erstmal den Vorschlag von Faux genau zu verstehen, denn sein Vorschlag ist die Standardvorgehensweise, die man begriffen haben sollte. Also arbeite obige Punkte einfach mal ab.

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 Uhr.
Seite 3 von 4     123 4      

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