Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt.onclick wie geht daS? (https://www.delphipraxis.net/22291-objekt-onclick-wie-geht-das.html)

Spike2k3 15. Mai 2004 15:48


Objekt.onclick wie geht daS?
 
Hi leute :)
Ich da grad n Probelm, ich programmier 17+4 (das Spiel) und muss es nun nur hinbekommen,
dass ein Objekt von mir (ein Bild) eine Onclick Funktion erhält.

Kann ich da einfach Tkarte.onclick nehmen, oder muss ich das irgendwie noch anders machen??

Und wenn ich verschiedene KArten mit Kartensatz[i] erzeugt hab und nun eine davon anklicken will,
geth dann ein Kartensatz[1].onclick???

ODer wie sollte sowas aussehn?

So sieht bei mir meine bisherige Konstruktion aus:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  Tkarte = class(TImage)
  constructor erzeugen;
  procedure ziehen;
  private
  public
  end;
  TForm1 = class(TForm)
    procedure FormActivate(Sender: TObject);
  private
        Karte:Tkarte;
  public
    satzmenge:integer;
  end;

var
  Form1: TForm1;
  satz: array[1..5] of TKarte;
 
implementation
constructor Tkarte.erzeugen;
begin
inherited create (Form1);
parent:=Form1;
Picture.LoadFromFile('.\karten\karten\herz_koenig.bmp');
end;

{$R *.dfm}

procedure Tkarte.ziehen;
begin
Picture.LoadFromFile('.\karten\karten\blank.bmp');
end;

procedure TForm1.FormActivate(Sender: TObject);
var j,i:integer;
begin
j:=150;
randomize;
DoubleBuffered := true;
Satzmenge:=3;
for i:=1 to Satzmenge do
      begin
      J:=j+73;
      Satz[i]:=TKarte.Create(Form1);
      Satz[i].Parent:=Form1;
      Satz[i].height:=96;
      Satz[i].Width:=73;
      Satz[i].left:=5+j;
      Satz[i].top:=150;
      Satz[i].ziehen;
      end;
end;


end.
Drei Karten werden erzeugt, die noch verdeckt sind und wenn ich nun auf eine klicke, soll sie umgedreht werden..
Das is alles kein Problem, nur eben das onclick...

nailor 15. Mai 2004 15:54

Re: Objekt.onclick wie geht daS?
 
jup, vom prinzip ghet das so. du musst nur noch Karte[x].OnClick eine Prozedure zuweisen, dann wird diese immer aufgerufen, wenn man auf die Karte klickt. Du kannst auch immer die gleiche Funktion nehmen, und dann mit "Sender" entscheiden, welche Karte geklickt wurde.

toms 15. Mai 2004 15:54

Re: Objekt.onclick wie geht daS?
 
Hi,

Weise einfach einem Satz[i] einen OnClick Handler zu.




Delphi-Quellcode:
Satz[i].OnClick := SatzOnClick
// ...

Delphi-Quellcode:
procedure TForm1.SatzOnClick(Sender: TObject);
begin
  ShowMessage(TImage(Sender).Name);
end;

Spike2k3 15. Mai 2004 16:05

Re: Objekt.onclick wie geht daS?
 
Wo muss ich das:
Delphi-Quellcode:
Satz[i].OnClick := SatzOnClick
Denn einfügen???


@Nailor:
Deine Lösung hört sich interessant an, aber ich wie mach ich n das?

toms 15. Mai 2004 16:13

Re: Objekt.onclick wie geht daS?
 
Zitat:

@Nailor:
Deine Lösung hört sich interessant an, aber ich wie mach ich n das?
Habe ja den Code dazu gepostet!

Zitat:

Wo muss ich das:
Source:
Satz[i].OnClick := SatzOnClick

Denn einfügen???
z.B nach

Delphi-Quellcode:
Satz[i]:=TKarte.Create(Form1);
Delphi-Quellcode:
Satz[i].OnClick := SatzOnClick;

Spike2k3 15. Mai 2004 16:28

Re: Objekt.onclick wie geht daS?
 
oh, ok...wusste ich nich, bin nich soo bewandert, sorry... :(

Also an der Stelle hab ichs schon probiert, nur kam dann immer:

[Error] Unit1.pas(55): Undeclared identifier: 'SatzOnClick'

Und da hab ich mich gewundert, ob ich das richtig gemacht hab, darum hab ich nochma nachgefragt.
Aber ma im Ernst, dass heisst ja, dass ichs noch nich deklariert hab, aber was ist denn SatzOnklick???

Das hier behebt das Prob. leider nich:
Delphi-Quellcode:
type
  Tkarte = class(TImage)
  constructor erzeugen;
  procedure ziehen;
  procedure SatzOnClick; //<---
  private
  public
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormActivate(Sender: TObject);
  private
    //Karte:Tkarte;
  public
    satzmenge:integer;
  end;

Spike2k3 15. Mai 2004 19:56

Re: Objekt.onclick wie geht daS?
 
Kann mir denn keiner helfen???? :cry:
plzzzzzzz.....
ICh weiss ihr habt Ahnung (*schleim ;)*)...

alcaeus 15. Mai 2004 20:00

Re: Objekt.onclick wie geht daS?
 
Probiers mal so:
Delphi-Quellcode:
type
  Tkarte = class(TImage)
  constructor erzeugen;
  procedure ziehen;
  private
  public
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormActivate(Sender: TObject);
    procedure SatzOnClick(Sender: TObject); //<- Das hier ist wichtig
  private
    //Karte:Tkarte;
  public
    satzmenge:integer;
  end;
SatzOnClick ist eine Ereignisbehandlungsroutine, die du dir selbst erstellt hast. Natürlich musst du weiter unten im Source irgendwo schreiben
Delphi-Quellcode:
procedure TForm1.SatzOnClick(Sender: TObject);
begin
//...
end;
Damit hast du dir eine ganz normale Behandlungsroutine erstellt, die du dann dem OnClick-Ereignis deines TImage zuweisen kannst.

[add]Normalerweise ist hier pushen erst nach 24 Stunden erlaubt/erwünscht/gern gesehen[/add]

nailor 15. Mai 2004 20:02

Re: Objekt.onclick wie geht daS?
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure DeinGeilesOnClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

procedure TForm1.DeinGeilesOnClick(Sender: TObject);
begin
while random(500) > 1 do windows.Beep(random(1000), random(10));
end;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.OnClick := DeinGeilesOnClick;
end;

end.

hier einfach mal ein haufen code ;)

Spike2k3 15. Mai 2004 20:13

Re: Objekt.onclick wie geht daS?
 
hehe...
danke leute, nu klappts...
HAtte es unter Tkarte und nich Tform deklariert, das was das prob.

mein geiles onclick is auch geil, nur windows beep probier ich nich ;P
doch...in info am dienstag...meinen Lehrer zur WEissglut treiben :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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