Einzelnen Beitrag anzeigen

Zenny90

Registriert seit: 6. Jul 2009
4 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Array im Prozedurnamen ansprechen

  Alt 7. Jul 2009, 11:31
dankeschön, das event wird nun ausgelöst. hier nochma der code:

Delphi-Quellcode:
unit FensterDeckbuilder;

interface

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

type
  TForm3 = class(TForm)
    ButtonBeenden: TButton;
    Label1: TLabel;
    Image1: TImage;
    Button1: TButton;
    procedure ButtonBeendenClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure DefineKarte;
    procedure NeueKarte;
    procedure Test(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
  ini: TIniFile;
  JPEG: TJpegImage;
  BMP:TBitmap;
  MouseStartPos : TPoint;
  Down : Boolean = False;
  MousOverKarte: Boolean = False;
  xdifferenz, ydifferenz: integer;
  xpos: integer = 200;
  ypos: integer = 100;
  breite: integer = 100;
  k: integer = 0;
  maxKarten: integer = 120;
  ArrayExist: array of Boolean;
  ArrayBild: array of TImage;
  ArrayBildx: array of integer;
  ArrayBildy: array of integer;

implementation

{$R *.dfm}

procedure TForm3.Test(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  k:=0;
  MousOverKarte:=False;

  {
  while ((MousOverKarte=False) and (k<maxkarten)) do
  begin
    if (ArrayBild[k].Left<X) and (X<(ArrayBild[k].Left+breite)) then
    begin
      if (ArrayBild[k].Top<Y) and (Y<(ArrayBild[k].Top+Round(breite*1.39))) then
      begin
        xdifferenz:=X-ArrayBild[k].Left;
        ydifferenz:=Y-ArrayBild[k].Top;
        Down := True;
        MousOverKarte := True;
      end;
    end;

    if MousOverKarte=False then k := k + 1;
  end;
  }


  Label1.Caption := InttoStr(k)+' '+InttoStr(ArrayBild[k].Left);
end;

procedure TForm3.DefineKarte;
begin
  k := 0;
  while k<maxKarten do
  begin
    ArrayExist[k] := False;
    k := k + 1;
  end;
end;

procedure TForm3.NeueKarte;
begin
  k:=0;
  repeat
    k:=k+1;
  until ArrayExist[k]=False;

  ArrayExist[k] := True;

  ArrayBild[k] := timage.Create(Form3);
  ArrayBild[k].parent := Form3;
  ArrayBild[k].Stretch := True;
  ArrayBild[k].Transparent := True;
  ArrayBild[k].Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'Bilder\Jareth, der Löwentitan.jpg');

  ArrayBild[k].Left := xpos+k*10;
  ArrayBild[k].Top := ypos+k*10;
  ArrayBild[k].Width := breite;
  ArrayBild[k].Height := Round(breite*1.39);

  ArrayBild[k].OnMouseDown := Test;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'einstellungen.ini');
  try
    JPEG:=TJpegImage.Create; // JPEG erzeugen
    BMP:=TBitmap.Create; // BMP erzeugen
    JPEG.LoadFromFile(ExtractFilePath(ParamStr(0))+'Bilder\'+ini.ReadString('Profil','Thema','Standard')+'\main.jpg');
    BMP.Assign(JPEG);
    Image1.Picture.Bitmap:=BMP;
    Image1.SendToBack;
  finally
    ini.free;
    JPEG.free;
  end;

  SetLength(ArrayExist, maxKarten);
  SetLength(ArrayBild, maxKarten);
  SetLength(ArrayBildx, maxKarten);
  SetLength(ArrayBildy, maxKarten);

  DefineKarte;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  NeueKarte;
end;

procedure TForm3.ButtonBeendenClick(Sender: TObject);
begin
  Close;
end;

end.
hab das auch nun umgetauscht, wo das bild geladen wird. nich mehr bei active sondern bei create.
dort wo das event ausgelöst wird, was bei mir "Test" ist, seht ihr kommentierten code. das liegt daran, dass er da rummeckert. es liegt wohl daran wie ich ArrayBild[k] anspreche, wo ich mich aber frage ?warum?, weil das bei stretchdraw genauso auch war und funktioniert hat.

ziel des ganzen ist es, dass ich mit onmousedown, die karte ermittel wo die maus drüber is. dann wird mit onmousemove die karte mitgezogen (normalerweise wird dann halt immer ArrayBild[k].Left und .Top mit anepasst) und mit onmouseup wird der boolean-wert Down wieder auf false gesetzt, damit er aufhört die karte mitzuziehen.

aber ich kann ArrayBild[k] nich mehr ansprechen ??
  Mit Zitat antworten Zitat