AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Image soll durch darüber liegendes Label angeklickt werden.
Thema durchsuchen
Ansicht
Themen-Optionen

Image soll durch darüber liegendes Label angeklickt werden.

Ein Thema von Hallo_Thomas · begonnen am 1. Sep 2005 · letzter Beitrag vom 5. Sep 2005
Antwort Antwort
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#1

Image soll durch darüber liegendes Label angeklickt werden.

  Alt 1. Sep 2005, 00:04
Hallo,
ich wollte das Onclick meines Images ansteuern über ein Label. Irgendwie klappt dies nicht, weil ich dies über mein Tag irgendwie nich schaffe.
Gehts es irgendwie,dass der Tag des Images gesendet,gelesen wird.

so sehen meine Quelltexte aus :


Delphi-Quellcode:
  Labels[1].OnClick:=image1.OnClick;
  Labels[1].OnMouseDown:=Image1.OnMouseDown;
  Labels[1].OnMouseUp:=Image1.OnMouseUp;


iTag := IntToStr((Sender as TImage).Tag); Hier kommt die Fehlermeldung"ungültige Typenumwandlung"



Hier der komplette Quelltext
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Images1: TImage;
    Images2: TImage;
    Images3: TImage;
    procedure AllButtons(Sender: TObject);
    procedure AllMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure AllMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);

  private
    { Private-Deklarationen }
    Labels : array[1..3] of TLabel;
  public
    { Public-Deklarationen }
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AllButtons(Sender: TObject);
var
 itag:String;
begin
 itag := IntToStr((Sender as TImage).Tag);
 Showmessage(itag)
end;

procedure TForm1.AllMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 itag:String;
begin
 iTag := IntToStr((Sender as TImage).Tag);
  (FindComponent('Image'+(iTag)) as TImage).Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + '\1u.bmp' );
end;

procedure TForm1.AllMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 itag:String;
begin
 iTag := IntToStr((Sender as TImage).Tag);
  (FindComponent('Image'+(iTag)) as TImage).Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + '\1.bmp' );
end;

procedure TForm1.FormCreate(Sender: TObject);
var i :integer;
    istring :string;
begin
 for i := 1 to 3 do
  begin
    istring:=IntToStr(i);
    Labels[i] := TLabel.Create(self);
    Labels[i].Parent := self;
    Labels[i].AutoSize:= False;
    Labels[i].Transparent:= True;
    Labels[i].Width:=(FindComponent('Images'+(istring)) as TImage).Width;
    Labels[i].Height:=(FindComponent('Images'+(istring)) as TImage).Height;
    Labels[i].Top:=(FindComponent('Images'+(istring)) as TImage).Top;
    Labels[i].Left:=(FindComponent('Images'+(istring)) as TImage).Left;
    Labels[i].Layout:=tlCenter;
    Labels[i].Alignment:=taCenter;
    Labels[i].font.color:=CLWhite;
    Labels[i].font.charset:=Ansi_Charset;
    Labels[i].font.Size:=8;
    Labels[i].BringToFront;
    Labels[i].Caption:='1';
  end;
  Labels[1].OnClick:=image1.OnClick;
  Labels[1].OnMouseDown:=Image1.OnMouseDown;
  Labels[1].OnMouseUp:=Image1.OnMouseUp;
end;

end.



Danke für eure Hilfe.
Angehängte Dateien
Dateityp: zip button3_113.zip (8,3 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 1. Sep 2005, 00:24
Wenn du das Label anklickst, is der Sender nie vom Typ TImage! Nimm lieber TControl, dann dürfte das mit as XX).Tag gehen.
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 1. Sep 2005, 01:35
Ich hatte es auch so versucht;


Delphi-Quellcode:
procedure TForm1.Label1Click(Sender: TObject);
begin
 image1.OnClick;
end;
Fehlermelung;
nicht wirklixh genügend Parameter

So was inder art würde ich bevorzugen, doch leider klappt der halt nicht
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 1. Sep 2005, 02:20
image1.OnClick erwartet ja auch einen Parameter. Entweder du reichst "Sender" weiter, oder einfach nil (für diesen Zweck).
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 1. Sep 2005, 20:42
Nun wollte ich noch das die Labels über dem entsprechenden Image(die labels gehen über mehrer Images) Das entsprechende Onclick des Imgaes auslösen.
Irgendwie klappt der Code hier unten nicht





Delphi-Quellcode:
procedure TForm1.MeinClick(Sender: TObject);
var
  i: Integer;
  iString:String;
begin
  for i := 1 to 3 do
   iString:=IntToStr(i);
    if (FindComponent('Image'+(iString)) is TImage) then
    begin
      with TControl(FindComponent('Image'+(iString))) do
        if PtInRect(Rect(0, 0, Width, Height), ScreenToClient(Mouse.CursorPos)) then
        Image1.OnClick(Image1)
       //(FindComponent('Image'+(iString)) as TImage).OnClick(FindComponent('Image'+(iString)) as TImage);
   end;
end;

Ich weis nicht so recht ob ich hierfür nenn neuen Thread aufmachen soll, aber ich poste es einfach mal hierdrin.
Miniaturansicht angehängter Grafiken
bild_307.jpg  
Angehängte Dateien
Dateityp: zip button3_305.zip (9,6 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 1. Sep 2005, 21:03
Hmm, wäre das nicht ienfacher, das Label wegzulassen und die Sache über Canvas.TextOut() zu lösen?
Julian J. Pracht
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 2. Sep 2005, 02:30
@Ultimator

Yo könnte man machen, wie ist das vom resourcen verbrauch zu sehen, wenn die Zahl sich während der Laufzeit verändert?
Abgesehen davon, hätte ich dann noch das 2 Image über den ersten, was ich ja noch ansteuern müsste(Den roten Kreis.
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#8

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 2. Sep 2005, 07:06
Hallo Thomas,

ich denke mal, das ist ein völlig falscher Ansatz,

nimm ein Image, zeichne dort die Rechtecke mit

Delphi-Quellcode:
Type
  Tr=Record
  x1:Integer;
  y1:Integer
  x2:Integer;
  y2:Integer
  end;
Var
  a:Array[0..4] of Tr;
....
Procedure Form1.FormActivate(Sender: TObject);
Begin
...
    a[1].x1:=100;
    a[1].y1:=100;
    a[1].x2:=200;
    a[1].x2:=200;
   
// usw..
    Image1.Canvas.Brush.Color:=clBlue;
    Image1.Canvas.Pen.Color:=clBlue;
    Polygon([Point(a[1].x1, a[1].y1), Point(a[1].x2, a[1].y1), Point(a[1].x2, a[1].y2), Point(a[1].x1, a[1].y2)]);
...
und mit

Delphi-Quellcode:
    Image1.Canvas.Brush.Color:=clRed;
    Image1.Canvas.Pen.Color:=clRed;
    Ellipse([Point(a[2].x1, a[2].y1), Point(a[2].x2, a[2].y1), Point(a[2].x2, a[2].y2), Point(a[2].x1, a[2].y2)]);
deine Kreise

und dann definiere unter Implemantation zwei Variablen und diese werden dann im MouseMove gesetzt.
Delphi-Quellcode:
Var
  My,Mx:Integer;

procedure TForm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: INTEGER);
begin
  Mx := x;
  My := y;
 // Panelfarbe.Color := Leinwand.Canvas.Pixels[x, y];
 // mFarbe.Caption := InTtoStr(Leinwand.Canvas.Pixels[x, y]);
end;
und im OnClick- Ereignis schaust Du nach welches Rechteck oder welchen Kreis du getroffen hast.

[/delphi]
procedure TForm.ImageDblClick(Sender: TObject);
var
i,akt: INTEGER;
gefunden: Boolean;
begin
gefunden := false;
// StatusBar.Panels[0].TEXT:='X = '+IntToStr(Mx);
// StatusBar.Panels[1].TEXT:='Y = '+IntToStr(My);
for i := 0 to 4 do
begin
// showmessage(IntToStr(aEingabe[i].x1)+' <= '+IntToStr(Mx)+' <= '+IntToStr(aEingabe[i].x2)+#13+
// IntToStr(aEingabe[i].y1)+' <= '+IntToStr(My)+' <= '+IntToStr(aEingabe[i].y2));
if ((a[i].x1 <= Mx) and (Mx <= a[i].x2)) and
((a[i].y1) <= My) and (My <= a[i].y2)) then
begin
akt := i;
gefunden := True;
break;
end;
end;
if gefunden then
showmessage(IntToStr(akt));
case akt of
0:..;
1:...;
else
end;

end;

[delphi]

mfg

BrunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#9

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 2. Sep 2005, 12:33
@BrunoT Ich danke dir für den ausführlichen beitrag,aber is nicht ganz das was ich mir vorstelle. Trotzdem Danke!


So hab noch mal am Text gefeilt,und er funktioniert auch fasst.

Hab noch ein Problem mit dem ich nicht zurecht komme, und zwar diese Zeile.

OnClick((FindComponent('Image'+(iString)))); Er will irgendwie das Image nich annehmen
(Fehlermeldung heist Zugriffsverletzung, bla,bla)


Wenn ich die Zeile so schreibe nimmt er sie korrekt an.
OnClick(Image1);

Hier die Komplette Prozedur

Delphi-Quellcode:
procedure TForm1.MeinClick(Sender: TObject);
var
  i: Integer;
  iString:String;
begin
  for i := 1 to 3 do
  begin
    iString:=IntToStr(i);
    if (FindComponent('Image'+(iString)) as TImage) is TImage then
    begin
      with (FindComponent('Image'+(iString)) as TImage) do
        if PtInRect(Rect(0, 0, Width, Height), ScreenToClient(Mouse.CursorPos)) then
        OnClick((FindComponent('Image'+(iString))));
    end;
  end;


Hab natürlich auch dies probiert

OnClick((FindComponent('Image'+(iString)) as TImage));
aber klappt auch nicht
Angehängte Dateien
Dateityp: zip button3_671.zip (8,9 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#10

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 5. Sep 2005, 07:34
Hallo Thomas,

tut mir ja leid, dass mein Beitrag dich nicht inspiriert hat, das so zu lösen.
ich glaube. dass das nur so lauten muss:

Delphi-Quellcode:
if (FindComponent('Image'+(iString)) as TImage) is TImage then
    begin
      with (FindComponent('Image'+(iString)) as TImage) do
        if PtInRect(Rect(0, 0, Width, Height), ScreenToClient(Mouse.CursorPos)) then
        OnClick(self);
    end;
denn mit der with-Klausel wird ja schon auf den sender gezeigt, also reicht self.

mfg

brunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  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:01 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