Autor Beitrag
G-McKree
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Di 10.06.03 21:36 
Ich hab nen Button, der ein paar Vierecke generiert und denen werden ein paar Parameter zugewiesen unter anderem:

ausblenden Quelltext
1:
2:
Action:= QuadClick;
OnClick:= QuadClickExecute;


bei 'QuadClickExecute' hab ich dann folgendes:

ausblenden Quelltext
1:
2:
with sender do
Visible: false;


Das Problem: 'Sender' müsste ja eigentlich das Viereck sein auf das man klickt, aber bei mir is es immer die Form. Ich brauch aber unbedingt, das 'sender' das Viereck is auf das man klickt.


Zuletzt bearbeitet von G-McKree am Do 12.06.03 20:30, insgesamt 1-mal bearbeitet
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: Mi 11.06.03 01:40 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Procedure TForm1.QuadClickExecute(Sender: TObject);
Begin
 With Sender as TImage do  // oder von welchem Typ dein Quadrat ist
   Visible := False;
end;

_________________
If accidentally read, induce vomitting.
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Mi 11.06.03 19:24 
mein Sender is TQuad (selbstgebastelt), aber wenn ich deinen Source benutze funzt der zwar, aber Delphi kommt dann mit so ner Fehlermeldung von wegen EInavalidCast -> Sender und TQuad sind nich kompatibel. Hat das was damit zu tun, das die ganzen TQuad-Vierecke Elemente eines Arrays sind?
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: Do 12.06.03 08:49 
Dann versuch mal das hier:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Procedure TForm1.QuadClickExecute(Sender: TObject); 
Begin 
 If Sender is TQuad then
   (Sender as TQuad).Visible := False;
end;


Damit sollte EInvalidCast nicht mehr auftreten.

_________________
If accidentally read, induce vomitting.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Do 12.06.03 09:14 
Ex0rzist hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Procedure TForm1.QuadClickExecute(Sender: TObject); 
Begin 
 If Sender is TQuad then
   (Sender as TQuad).Visible := False;
end;


Das Sender as TQuad kann man sich sparen und durch TQuad(Sender) ersetzen, das um einiges schneller ist als der as-Operator, da Sender ja bereits auf TQuad geprüft ist.

_________________
Ist Zeit wirklich Geld?
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Do 12.06.03 19:09 
funzt net
ich hab ma versucht mir den sender in ner message anzeigenzulassen. demnach war sender irgetwas mit nem total sinnlosem namen

ich poste ma den quelltext
vieleicht findet ihr ja den fehler

ausblenden volle Höhe 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:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Quad, ComCtrls, ActnList, ActnMan;

type
  TForm1 = class(TForm)
    SaveB: TButton;
    CreateB: TButton;
    Horizontal: TRichEdit;
    Vertical: TRichEdit;
    ActionManager1: TActionManager;
    QuadClick: TAction;

    procedure CreateBClick(Sender: TObject);
    procedure QuadClickExecute(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;
  Quads: array of array of TQuad;
  v: integer;
  h: integer;

implementation

{$R *.dfm}

procedure TForm1.CreateBClick(Sender: TObject);
Var i: integer;

begin
 SetLength(Quads, StrToInt(Horizontal.Text));
 for i:= 0 to High(Quads) do
  begin
   SetLength(Quads[i], StrToInt(Vertical.Text));
  end;

 for h:= 0 to High(Quads) do
 for v:= 0 to High(Quads[0]) do
 begin
  Quads[h,v]:= TQuad.Create(Self);
  with Quads[h,v] do
   begin
    Parent:= Form1;
    Width:= 24;
    Height:= 24;
    Left:= 112 + (32*h);
    Top:= 8 + (32*v);
    Picture.LoadFromFile(ExtractFilePath (ParamStr(0)) + 'Typ1.bmp');
    Typ:= 1;
    Action:= QuadClick;
    OnClick:= QuadClickExecute;
   end;
 end;
end;

procedure TForm1.QuadClickExecute(Sender: TObject);
begin
  If Sender is TQuad then
   TQuad(Sender).Visible := False;
end;



end.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Do 12.06.03 19:24 
G-McKree hat folgendes geschrieben:
vieleicht findet ihr ja den fehler

Wo ist die MessageBox/Dlg? Ich kann keinen Fehler entdecken, außer dem, dass du globale Variablen bei For-Schleifen einsetzt. Der Compiler gibt da doch entsprechende Meldungen aus. Und wenn du mir jetzt sagst, dass du alle Warnungen und Hinweise abgeschalten hast, dann sage ich dir: Dann geschieht es dir Recht.


Zitat:
SetLength(Quads, StrToInt(Horizontal.Text));
for i:= 0 to High(Quads) do
begin
SetLength(Quads[i], StrToInt(Vertical.Text));
end;

Wieso so umständlich, wenn es auch einfacher geht:
ausblenden Delphi-Quelltext
1:
SetLength(Quads, StrToInt(Horizontal.Text), StrToInt(Vertical.Text));					



Zitat:
Action:= QuadClick;
OnClick:= QuadClickExecute;

Setzt die Zuweisung an Action nicht auch gleich OnClick, wenn QuadClick.Execute einen Wert hat? Zumindest geht das so im Design-Modus.

_________________
Ist Zeit wirklich Geld?
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Do 12.06.03 19:39 
wegen den variablen hat delphi mich schon gewart, aber die werde eh nur einmal eigelesen, also was soll schon passieren

versuch doch mal den code zu benutzen, wenn du dann auf eins der vierecke klickst, passiert nix und das is das problem


hier gibts das komplette Teil:
www.volny.cz/jirka.k...20QUAD%20ED%20X1.rar[/url]
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Do 12.06.03 20:09 
G-McKree hat folgendes geschrieben:
also was soll schon passieren

Der Compiler kann z.B. die Schleife nicht optmieren.

In der .rar Datei sind 575 KB unnötiges Zeug drinnen. Die .dcu und .exe Dateien kann ich selbst erstellen. :wink:

_________________
Ist Zeit wirklich Geld?
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Do 12.06.03 20:12 
AndyB hat folgendes geschrieben:
G-McKree hat folgendes geschrieben:
also was soll schon passieren

Der Compiler kann z.B. die Schleife nicht optmieren.


bei dem prog is das nich so wichtig, is ja nur n editor

mich würde aber mehr das 'sender'problem interressieren
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Do 12.06.03 20:20 
G-McKree hat folgendes geschrieben:
mich würde aber mehr das 'sender'problem interressieren

Mit Hilfe des Debuggers habe ich das schon herausgefunden.
Man setze einen Breakpoint auf das with Sender as... und klicke dann auf ein TQuad. Danach öffnet man das Watch-Fenster [Strg]+[F5] und gibt Sender.ClassName ein. Was er dann ausspuckt ist TAction, womit der Fehler gefunden ist. Da es sich bei dem Ereignis um das Execute-Ereignis von QuadClick:TAction handelt, wird QuadClick als Sender übergeben. Du musst nur die Zuweisung an Quad.Action entfernen und das Click-Ereignis löst kein QuadClick.OnExecute mehr aus, sondern springt direkt in das OnClick-Ereignis, wobei Sender dann ein TQuad ist.

_________________
Ist Zeit wirklich Geld?
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Do 12.06.03 20:26 
thx, jez funz das prog