Avatar billede stone Forsker
26. juli 2000 - 20:06 Der er 5 kommentarer og
1 løsning

opret image

når man klikker på en grafikfil i filelistbox,skal der oprettet et Image med det valgte image.
det oprettede Image skal kunne trækkes rund på Formen med dette eksempel:procedure TForm1.Image30MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (SSleft in shift) then begin
Traekker:= True;
Sidste_x:=x;
Sidste_y:=y;
end;
end;
procedure TForm1.Image30MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var
mx,my:Integer;
begin
if (traekker)and( ssleft in shift) then
begin
mx:=image30.Left;
image30.Left:=image30.Left-(sidste_x-x);
mx:=image30.Left-mx;
my:=image30.Top;
image30.top:=image30.top-(Sidste_y-y);
my:=image30.Top-my;
sidste_y:=Y-my;
sidste_x:=x-mx;
end
else
traekker:= false;
end;
Hvordan gør man det?

Avatar billede dj Nybegynder
26. juli 2000 - 22:30 #1
hvis du allerede har programmeret de events der skal bruges til at flytte billedet rundt med, hvad er så dit problem helt præcist ?

hvis dit problem er at oprette et image ud fra et valgt billede i en lidtbox kan dette gøres ex. ved følgende:

  ..
  Private
  ..
  Public 
    Image: Timage;
  end;

Procedure Tform1.formcreate(sender: Tobject);
begin
  Image:= Timage.create;
  Image.parent:=form1;
  Image.autosize:=true;
  Image.OnMouseDown:=Image30MouseDown; //Den event du har programmeret ovenover.
  Image.OnMouseMove:=Image30MouseMove;
end;

Procedure Tform1.formclose(sender: Tobject);
begin
  Image.free; //Gøres også automatisk af Delphi, men foretrækker nu at rydde op efter mig selv.
end;

Procedure Tform1.FileListbox1change(sender: Tobject);
begin
  Image.left:=0;
  Image.top:=0;
  Image.picture.loadfromfile(filelistbox1.FileName);
end;

//Hvis du skal laves et nyt Image object for hver fil du klikker på i listboksen så skal du flytte koden fra FormCreate up under FileListboxChange og så definere det i et dynamisk array eg. Images: array[0..99] of Timage;

Men hvis du ikke har brug for dette så bare benyt den ovenstående kode, den vil lave billedobjectet i runtime og tilknytte de events du selv har defineret.

I dine events skal du så udskifte alle de steder hvor der står: Image30 med Timage(sender) så vil det virke med det billedobject der kalder eventen.

God Fornøjelse og btw. så er al kode ovenover skrevet i fri luft, så forvent et par småfjel hist og her jeg har ikke haft tid til at prøve det igennem, men det burde være rimeligt smertefrit at få til at virke.

Mhv. _DJ_
Avatar billede stone Forsker
28. juli 2000 - 23:44 #2
har stor set fået det rettet til, men jeg mangler
en parameter for Image:=timage.Create;
får en fejlmelding. \"not enough actual parameters\"
Avatar billede dj Nybegynder
29. juli 2000 - 21:10 #3
Gør sådan istedet for:

image:= Timage.create(self);
Avatar billede stone Forsker
30. juli 2000 - 13:49 #4
dj:
når man klikker på en Image i filelistbox,bliver Image udskiftet med et anden.Det jeg ville opnå var at de Image man klikkede på i filelistbox blev
på formen som i et (puslespil)
Avatar billede dj Nybegynder
30. juli 2000 - 14:18 #5
så skal du rykke Timage.create koden fra Oncreate op under OnChange på FileListboxen.
Avatar billede dj Nybegynder
30. juli 2000 - 14:37 #6
Ok, jeg har lavet et lille eksempel til dig istedet for:

-------------------------

Unit1.pas

-------------------------

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    FileListBox1: TFileListBox;
    DriveComboBox1: TDriveComboBox;
    DirectoryListBox1: TDirectoryListBox;
    Label1: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FileListBox1DblClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Image: array[0..99] of TImage;
    Traekker: boolean;
    ObjectCount,Sidste_x,Sidste_y: integer;
    procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (SSleft in shift) then begin
Traekker:= True;
Sidste_x:=x;
Sidste_y:=y;
end;
end;

procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  var
mx,my:Integer;
begin
if (traekker)and( ssleft in shift) then
begin
mx:=Timage(sender).Left;
Timage(sender).Left:=Timage(sender).Left-(sidste_x-x);
mx:=Timage(sender).Left-mx;
my:=Timage(sender).Top;
Timage(sender).top:=Timage(sender).top-(Sidste_y-y);
my:=Timage(sender).Top-my;
sidste_y:=Y-my;
sidste_x:=x-mx;
end
else
traekker:= false;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
objectcount:=0;
end;

procedure TForm1.FileListBox1DblClick(Sender: TObject);
begin
  if (lowercase(Extractfileext(filelistbox1.filename))=\'.bmp\') or (lowercase(Extractfileext(filelistbox1.filename))=\'.jpg\') then begin
    Image[objectcount]:= Timage.create(self);
    Image[objectcount].parent:=form1;
    Image[objectcount].autosize:=true;
    Image[objectcount].OnMouseDown:=MouseDown;
    Image[objectcount].OnMouseMove:=MouseMove;
    Image[objectcount].left:=500;
    Image[objectcount].top:=0;
    Image[objectcount].picture.loadfromfile(filelistbox1.FileName);
    inc(objectcount);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
I: integer;
begin
for I:=0 to objectcount-1 do begin
  Image[I].free;
end;
end;

end.


-------------------------

Unit1.dfm

-------------------------

object Form1: TForm1
  Left = 270
  Top = 272
  Width = 1063
  Height = 450
  Caption = \'Form1\'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = \'MS Sans Serif\'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 16
    Top = 400
    Width = 209
    Height = 13
    Caption = \'C:\\Program Files\\Borland\\Delphi5\\Projects\'
  end
  object FileListBox1: TFileListBox
    Left = 240
    Top = 48
    Width = 233
    Height = 345
    ItemHeight = 13
    Mask = \'*.bmp;*.jpg\'
    TabOrder = 0
    OnDblClick = FileListBox1DblClick
  end
  object DriveComboBox1: TDriveComboBox
    Left = 16
    Top = 16
    Width = 209
    Height = 19
    DirList = DirectoryListBox1
    TabOrder = 1
  end
  object DirectoryListBox1: TDirectoryListBox
    Left = 16
    Top = 48
    Width = 209
    Height = 345
    DirLabel = Label1
    FileList = FileListBox1
    ItemHeight = 16
    TabOrder = 2
  end
  object Button1: TButton
    Left = 240
    Top = 16
    Width = 89
    Height = 25
    Caption = \'Free All Images\'
    TabOrder = 3
    OnClick = Button1Click
  end
end
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester