Autor Beitrag
Robii
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: So 31.05.09 15:39 
Hallöchen,
mal wieder ich ;]

Ich habe eine eigene Procedure geschrieben
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
  Procedure InfoSchild(Left: Integer;Width: Integer;Top: Integer; Height: Integer;X: Integer;Y: Integer;Name: String;Tooltip: String);
  var
  WP_Sh: TShape;
  Na_E: TEdit;
  X_E: TEdit;
  Y_E: TEdit;
  T_E: TEdit;
  begin
  WP_Sh := TShape.Create(nil);
  WP_Sh.left := Left+Width;
  WP_Sh.top := Top+Height;
  WP_SH.visible := true;
  Na_E := TEdit.Create(nil);
  Na_E.Text := Name;
  X_E := TEdit.Create(nil);
  Y_E := TEdit.Create(nil);
  X_E.Text := inttostr(X);
  Y_E.Text := inttostr(Y);
  T_E := TEdit.Create(nil);
  T_E.Text := Tooltip;
  end;


Bestimmt mit ein paar geunreimtheiten aber darum geht es eigentlich nicht. Ich möchte gerne, das wenn ich per Auslöser ein Bild erstelle, ich das OnClick-Ereigniss gleich meiner Procedure setze, das heißt, wenn man auf das Bild klickt, meine Procedure abgespult wird.

Dazu habe ich noch folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  begin
        MyImage := TImage.Create(Self);
        MyImage.Name := Na;
        MyImage.Parent := Self;
        MyImage.Left := X;
        MyImage.Top := Y;
        MyImage.Height := WP_Mar.height;
        MyImage.Transparent:= true;
        MyImage.Picture := WP_Mar.picture;
        MyImage.OnClick := InfoSchild(MyImage.left,MyImage.Width,MyImage.Top,MyImage.Height,MyImage.Left,MyImage.Top,Na,Na);
        end


Ich glaube, das ich das OnClick nicht = einer Procedure setzen kann, weiss aber leider nicht, wie ich es sonst machen soll.

Grüße.

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 31.05.09 15:48 
Es liegt einfach daran, dass die Parameter der OnClick-Procedure nicht mit deinen Parametern übereinstimmen. OnClick kennt nur den Parameter Sender. Das ist die Komponente, die das Ereignis auslöst. Nur damit kannst du arbeiten. Du müsstest jetzt anfangen, den Sender zu casten. Dieser ist nämlich erstmal nur vom Typ TObject und kann so nicht verwendet werden.
Deine Prozedur müsste also erstmal so aussehen, damit du sie einfügen könntest:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Procedure InfoSchild(Sender: TObject);
begin
{...}
end;

In der Prozedur musst du dann erstmal prüfen, ob der Sender auch ein Image ist:
ausblenden Delphi-Quelltext
1:
if (Sender is TImage) then					

Und an die Eigenschaften dieses Senders kommst du dann durch einfaches casten ran:
ausblenden Delphi-Quelltext
1:
(Sender as TImage).Name					

Damit kannst du alle Werte abfragen, die das Image hat.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 31.05.09 15:49 
Du musst die Prozedur als Methode deines Formulars deklarieren.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
TFormX = class(TForm)
...
private
  procedure InfoSchild(ALeft, AWidth, ATop, AHeight, AX, AY: Integer; AName, ATooltip: String);
end;

...
implementation
...

procedure TFormX.InfoSchild(ALeft, AWidth, ATop, AHeight, AX, AY: Integer; AName, ATooltip: String);
begin
  ...
end;
Das A solltest du vor die Parameternamen setzen, da diese sonst mit den gleichnamigen (!) Eigenschaften des Formulars verwechselt würden.

Was die Verwendung in OnClick angeht, dazu hat user profile iconRegan ja schon etwas gesagt, das spare ich mir also. :mrgreen:
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 31.05.09 15:51 
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:

Ich glaube, das ich das OnClick nicht = einer Procedure setzen kann, weiss aber leider nicht, wie ich es sonst machen soll.

Doch, das geht.
Eine Bitte hätte ich noch: Mach mal nicht so viele Zeilenumbrüche. Wirklich, auch meine rechte Bildschrimhälfte will etwas darstellen :wink: .
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: So 31.05.09 16:08 
So, hoffe das ich Regan's Beitrag richtig verstanden habe.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 begin
        MyImage := TImage.Create(Self);
        MyImage.Name := Na;
        MyImage.Parent := Self;
        MyImage.Left := X;
        MyImage.Top := Y;
        MyImage.Height := WP_Mar.height;
        MyImage.Transparent:= true;
        MyImage.Picture := WP_Mar.picture;
        MyImage.OnClick := InfoSchild(MyImage);
        end


&

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
  Procedure InfoSchild(Sender: TObject);
  var
  Na: String;
  AX: Integer;
  AXB: Integer;
  AY: Integer;
  AYB: Integer;
  IST: TShape;
  begin
  If (Sender Is TImage) Then
  begin
  Na :=  (Sender as TImage).Name;
  AY := (Sender as TImage).Top;
  AYB:= (Sender as Timage).Height;
  AX := (Sender as TImage).Left;
  AXB:= (Sender as TImage).Width;
  Ist := TShape.Create(nil);
  Ist.Left := Ax-AXB;
  Ist.Top := AY-AYB;
  Ist.visible := true;
  end
  end;

Allerdings bekomme ich jetzt immernoch folgende Fehlermeldung:
Zitat:

[Fehler] PU1.pas(444): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter'

Kann damit leider nicht wirklich etwas anfangen. Wär dankbar für eine Erklärung, wo hier das Problem liegt.

Grüße.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 31.05.09 16:11 
Hier wird das ganze wie eine Eigenschaft behandelt (also nicht ganz :wink: ):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 begin
        MyImage := TImage.Create(Self);
        MyImage.Name := Na;
        MyImage.Parent := Self;
        MyImage.Left := X;
        MyImage.Top := Y;
        MyImage.Height := WP_Mar.height;
        MyImage.Transparent:= true;
        MyImage.Picture := WP_Mar.picture;
        MyImage.OnClick := InfoSchild;
        end

Aber sonst: vorbildlich :zustimm: .
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 31.05.09 16:12 
Zudem muss das eine Methode des Formulars sein (siehe oben), sonst kann man das nicht an OnClick zuweisen.
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 31.05.09 16:22 
Die letzten beiden übergebenen Werte (2 Mal na) sehen mir nicht so unbedingt nach String-Variablen oder direkten Strings aus.
Wenn das direkte Strings sein sollen1, dann fehlen dort ja noch ein ' davor und ein ' dahinter, also dann müsste das ja so aussehen: 'na'.
Das gleiche gilt natürlich auch für diese Zeile: MyImage.Name := Na;


Zuletzt bearbeitet von ffgorcky am So 31.05.09 16:24, insgesamt 1-mal bearbeitet
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: So 31.05.09 16:23 
Jetzt ist es mir peinlich. Ich glaube ich bin nicht in der Lage euren Anweisungen zu folgen.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
private
     Procedure InfoSchild(Sender: TObject);
...
procedure TForm1.Timer1Timer(Sender: TObject);

  Procedure TFormX.InfoSchild(Sender: TObject);
  var
  Na: String;
  AX: Integer;
  AXB: Integer;
  AY: Integer;
  AYB: Integer;
  IST: TShape;
  begin
  If (Sender Is TImage) Then
  begin
  Na :=  (Sender as TImage).Name;
  AY := (Sender as TImage).Top;
  AYB:= (Sender as Timage).Height;
  AX := (Sender as TImage).Left;
  AXB:= (Sender as TImage).Width;
  Ist := TShape.Create(nil);
  Ist.Left := Ax-AXB;
  Ist.Top := AY-AYB;
  Ist.visible := true;
  end
  end;
....
 begin
        MyImage := TImage.Create(Self);
        MyImage.Name := Na;
        MyImage.Parent := Self;
        MyImage.Left := X;
        MyImage.Top := Y;
        MyImage.Height := WP_Mar.height;
        MyImage.Transparent:= true;
        MyImage.Picture := WP_Mar.picture;
        MyImage.OnClick := InfoSchild;
        end
...


Fehlermeldung:
Zitat:
[Fehler] PU1.pas(332): ';' erwartet, aber '.' gefunden

Der Fehler zeigt immer auf:
ausblenden Delphi-Quelltext
1:
  Procedure TFormX.InfoSchild(Sender: TObject);					


Mensch, so doof kann ich doch nicht sein, achso und wegen dem Bildschirm, entschuldigt mich das ist eine meiner schlechten Marotten.
Grüße.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 31.05.09 16:24 
Das muss außerhalb anderer Routinen wie Timer1Timer stehen und das TFormX musst du durch deinen richtigen namen ersetzen, also TForm1. ;-)
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 31.05.09 16:26 
Das klingt mir eher danach, als ob Du irgendwo ein end; zuwenig gesetzt hast, so dass er dann noch gar nicht mit dem Programmende rechnet.
Es muss ja zu jedem begin auch irgendwo ein end stehen...


Zuletzt bearbeitet von ffgorcky am So 31.05.09 16:29, insgesamt 1-mal bearbeitet
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 31.05.09 16:28 
user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Die letzten beiden übergebenen Werte (2 Mal na) sehen mir nicht so unbedingt nach String-Variablen oder direkten Strings aus.
Wenn das direkte Strings sein sollen1, dann fehlen dort ja noch ein ' davor und ein ' dahinter, also dann müsste das ja so aussehen: 'na'.

Natürlich sind das Strings. Er weißt doch vorher den Namen explizit zu. :motz:

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt ist es mir peinlich. Ich glaube ich bin nicht in der Lage euren Anweisungen zu folgen.

Naja, bisher ging es ja schon sehr gut :) .

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
//Hier oben steht sicherlich irgendwo TForm1!?
private
     Procedure InfoSchild(Sender: TObject);
{...}
Procedure TForm1.InfoSchild(Sender: TObject);
{...}
procedure TForm1.Timer1Timer(Sender: TObject);
{...}

Zur Erklärung: Du fügst deinem Formular eine neue Prozedur hinzu. Das ist wie bei FormCreate, bloß, dass dort die Zuweisung automatisch passiert, wobei du hier die Zuweisung manuell machst. Du kannst im Objektinspektor deine Prozedur jeder Komponente zuweisen. Probier es einfach mal.

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Das klingt mir eher danach, als ob Du irgendwo ein end; zuwenig gesetzt hast, so dass er dann noch gar nicht mit dem Programmende rechnet.

Nein, hat er nicht, er hat bisher alles richtig gemacht.
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 31.05.09 16:30 
Ich hoffe, Du hast auch meinen Beitrag eben mitbekommen und nicht durch Regans gleichzeitige Antwort übersehen...
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: So 31.05.09 16:35 
Danke. Immerhin bekomme ich jetzt keinen Fehler mehr beim compilen. Aber der gwünschte Effekt tritt trotzdem nicht ein. Wenn ich das, was ich geschrieben habe richtig deute, müsste doch eigentlich, wenn man auf das erstellte Bild klickt, ein Shape an der oberen rechten Ecke des Bildes erscheinen, oder nicht?

Grüße.

Zitat:

Antworten mit Zitat
BeitragVerfasst am: So 31.05.09 16:30
Ich hoffe, Du hast auch meinen Beitrag eben mitbekommen und nicht durch Regans gleichzeitige Antwort übersehen...


Ja, den habe ich auch wahrgenommen. Schien aber daran zu liegen, das ich die Procedure in einem Timer hatte.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 31.05.09 16:37 
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Danke. Immerhin bekomme ich jetzt keinen Fehler mehr beim compilen. Aber der gwünschte Effekt tritt trotzdem nicht ein. Wenn ich das, was ich geschrieben habe richtig deute, müsste doch eigentlich, wenn man auf das erstellte Bild klickt, ein Shape an der oberen rechten Ecke des Bildes erscheinen, oder nicht?

Neue Frage, neuer Thread.

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Schien aber daran zu liegen, das ich die Procedure in einem Timer hatte.

Richtig :) .
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 31.05.09 16:38 
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich das, was ich geschrieben habe richtig deute, müsste doch eigentlich, wenn man auf das erstellte Bild klickt, ein Shape an der oberen rechten Ecke des Bildes erscheinen, oder nicht?

Soweit ich das richtig sehe, hast du vergessen Parent zu setzen. ;)
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: So 31.05.09 16:45 
Muss ich jetzt einen neuen Thread starten? Was ist ein Parent?
Grüße.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 31.05.09 16:47 
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Muss ich jetzt einen neuen Thread starten? Was ist ein Parent?
Grüße.

Ja, bitte.
Und @Marc.: Bitte dort nochmal antworten.
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 31.05.09 16:47 
user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Und @Marc.: Bitte dort nochmal antworten.

Normalerweise folge ich auch der Regel, aber hier hatte ich es als Flüchtigkeitsfehler interpretiert. ;)