AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Transparente Clicks

Ein Thema von shebang · begonnen am 7. Feb 2020 · letzter Beitrag vom 7. Feb 2020
Antwort Antwort
shebang

Registriert seit: 7. Feb 2020
124 Beiträge
 
Delphi 11 Alexandria
 
#1

Transparente Clicks

  Alt 7. Feb 2020, 10:41
Ich habe ein TImage auf dem ein TLabel liegt.

Gibt es eine Einstellung um den Click auf das Label zu ignorieren, so dass immer das OnClick des darunter liegenden Images ausgelöst wird?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Transparente Clicks

  Alt 7. Feb 2020, 10:44
ist mir jetzt nicht bekannt,
Du könntest aber im onClick des Tlabels das onClick des TImage aufrufen.

Grüße
Klaus
Klaus

Geändert von Klaus01 ( 7. Feb 2020 um 11:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Transparente Clicks

  Alt 7. Feb 2020, 11:00
Ich würde es exakt so machen wie Klaus es schrieb.
Dem Label im Onclick das Onclick des TImage eintragen und der Effekt ist 1:1 das Gleiche, so lange du darin nicht die angeklickte Komponente abfragst/benötigst.

Ansonsten müsstest du im Onclick des Labels folgendes eintragen wenn ich mich nicht irre:

ImageClick(Imagename); also z.B.
Image1Click(Image1);
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 7. Feb 2020 um 11:09 Uhr)
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
124 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Transparente Clicks

  Alt 7. Feb 2020, 11:33
Das hab ich befürchtet.
Das Problem ist, dass es ca. 2 Dutzend dieser Kombinationen gibt und ich wissen muss, welches Image angeklickt wurde.
Schöner Code wird das dann nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Transparente Clicks

  Alt 7. Feb 2020, 11:52
Also letztens hatte ich eine ähnliche Situation und da hat es geholfen im WndProc der Komponente für die WM_NCHITTEST Message HTTRANSPARENT zurückzugeben.

Ich hab das allerdings grad für ein Label getestet und da kommt scheinbar diese Message überhaupt nicht an.

Wenn du alle Labels in TStaticText änderst/ändern kannst funktioniert es aber:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;

type
  TStaticText = class(Vcl.StdCtrls.TStaticText)
  protected
    procedure WndProc(var Message: TMessage); override;
  end;

  TForm1 = class(TForm)
    StaticText1: TStaticText;
    Image1: TImage;
    procedure StaticText1Click(Sender: TObject);
    procedure Image1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1Click(Sender: TObject);
begin
  ShowMessage('Image');
end;

procedure TForm1.StaticText1Click(Sender: TObject);
begin
  ShowMessage('Label'); // Wird so nie aufgerufen, stattdessen wird der Klick an das Image weitergeleitet
end;

{ TStaticText }

procedure TStaticText.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_NCHITTEST then
    Message.Result := HTTRANSPARENT
  else
    inherited;
end;

end.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General ( 7. Feb 2020 um 11:57 Uhr)
  Mit Zitat antworten Zitat
Alt 7. Feb 2020, 12:35     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Transparente Clicks

  Alt 7. Feb 2020, 13:15
@shebang: Gibt es für diese Kombination keine Logik mit der du es ansonsten herleiten könntest? Also mit FindComponent etc.

Hat jedes Image eine eigene OnClick Prozedur oder alle die Gleiche?
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 7. Feb 2020 um 13:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: Transparente Clicks

  Alt 7. Feb 2020, 13:56
Folgender Code im OnClick-Event der Labels sollte gehen. Dabei wird angenommen, daß die Labels und die darunter liegenden Images denselben Parent haben.

Delphi-Quellcode:
type
  TImageHack = class(TImage);

procedure TForm487.Label1Click(Sender: TObject);
var
  ctrl: TControl;
  lbl: TLabel;
begin
  lbl := Sender as TLabel;
  lbl.Enabled := False; // damit es bei ControlAtPos nicht gefunden wird
  try
    ctrl := lbl.Parent.ControlAtPos(lbl.ClientRect.CenterPoint, False, False, False);
    if ctrl is TImage then
      TImageHack(ctrl).Click;
  finally
    lbl.Enabled := True;
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
124 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Transparente Clicks

  Alt 7. Feb 2020, 14:20
Danke für die Antworten.

Die Images benutzen alle das gleiche OnClick, insofern sollte die Variante meines Vorposters funktionieren. Ich teste das sofort.

Edit:
Klappt einwandfrei, nur das ClientRect.CenterPoint hab ich durch BoundsRect.CenterPoint ersetzt, damit wir im richtigen Referenzsystem arbeiten.

Geändert von shebang ( 7. Feb 2020 um 15:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:21 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