Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Image auf Form dynamisch mit der Maus at run time erstellen ? (https://www.delphipraxis.net/159313-image-auf-form-dynamisch-mit-der-maus-run-time-erstellen.html)

thomas2009 24. Mär 2011 01:06

AW: Image auf Form dynamisch mit der Maus at run time erstellen ?
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
procedure DrawImageBounds(X, Y: Integer);
procedure CreateImage;
procedure Reset;
procedure ListImages;
procedure DeleteImages;
procedure DeleteImageBounds;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.CreateImage;
  procedure Swap(var X1, X2: Integer);
  var
    Temp: Integer;
  begin
    Temp := X1;
    X1 := X2;
    X2 := Temp;
  end;
var
  Image: TImage;
begin
  SetLength(ImageArray, Length(ImageArray) + 1);
  Image := TImage.Create(nil);
  Image.Name := 'Image' + IntToStr(Length(ImageArray));
  Image.Parent := Form1;
  if (BottomRight.Y < TopLeft.Y) then
    Swap(BottomRight.Y, TopLeft.Y);
  if (BottomRight.X < TopLeft.X) then
    Swap(BottomRight.X, TopLeft.X);
  Image.Left := TopLeft.X;
  Image.Top := TopLeft.Y;
  Image.Height := BottomRight.Y - TopLeft.Y;
  Image.Width := BottomRight.X - TopLeft.X;
  //Image.Stretch := True;
  //Image.Proportional := True;
  Image.Picture.LoadFromFile('test.bmp');
  ImageArray[High(ImageArray)] := Image;
end;

procedure TForm1.DeleteImages;
var
  i: Integer;
begin
  for i := High(ImageArray) downto 0 do
  begin
    ImageArray[i].Free;
  end;
  SetLength(ImageArray, 0);
end;

procedure TForm1.ListImages;
var
  i: Integer;
begin
  ListBox1.Items.Clear;
  for i := 0 to ControlCount - 1 do
  begin
    if (Controls[i] is TImage) then
    begin
      ListBox1.Items.Add(Format('%s (%d / %d)', [TImage(Controls[i]).Name, TImage(Controls[i]).Width, TImage(Controls[i]).Height]));
    end;
  end;
end;

procedure TForm1.Reset;
begin
  IsMouseDown := False;
  TopLeft.X := 0;
  TopLeft.Y := 0;
  BottomRight.X := 0;
  BottomRight.Y := 0;
end;

procedure TForm1.DrawImageBounds(X, Y: Integer);
begin
  if not Assigned(ImageBoundsRect) then
  begin
    ImageBoundsRect := TShape.Create(Form1);
    ImageBoundsRect.Parent := Form14;
    ImageBoundsRect.Shape := stRectangle;
    ImageBoundsRect.Brush.Style := bsClear;
    ImageBoundsRect.Pen.Width := 1;
    ImageBoundsRect.Pen.Color := clBlack;
    ImageBoundsRect.Pen.Style := psDash;
  end;
  ImageBoundsRect.Left := TopLeft.X;
  ImageBoundsRect.Top := TopLeft.Y;
  ImageBoundsRect.Width := X - TopLeft.X;
  ImageBoundsRect.Height := Y - TopLeft.Y;
end;

procedure TForm1.DeleteImageBounds;
begin
  FreeAndNil(ImageBoundsRect);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeleteImages;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  IsMouseDown := True;
  TopLeft.X := X;
  TopLeft.Y := Y;
end;


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if IsMouseDown then
  begin
    BottomRight.X := X;
    BottomRight.Y := Y;
    DrawImageBounds(X, Y);
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if IsMouseDown then
  begin
    DeleteImageBounds;
    CreateImage;
    Reset;
    ListImages;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteImages;
  ListImages;
end;

end.

Luckie 24. Mär 2011 01:10

AW: Image auf Form dynamisch mit der Maus at run time erstellen ?
 
Und was willst du mir damit jetzt sagen?

thomas2009 24. Mär 2011 01:37

AW: Image auf Form dynamisch mit der Maus at run time erstellen ?
 
Jetzt sage ich gute Nacht! Bis morgen. Augen gehen ständig zu:cyclops:

Sir Rufo 24. Mär 2011 05:31

AW: Image auf Form dynamisch mit der Maus at run time erstellen ?
 
Zitat:

Zitat von Luckie (Beitrag 1090611)
Und was willst du mir damit jetzt sagen?

Er möchte Hipp-Code

Vorgekaut und leicht verdaulich :mrgreen:

nuclearping 24. Mär 2011 06:06

AW: Image auf Form dynamisch mit der Maus at run time erstellen ?
 
Und genau deswegen bringts nichts. Jeder andere "Delphi Anfänger" hätte Luckie jetzt die Füße geküsst, aber "thomas" weiß scheinbar leider auch nichtmal, was Füße sind.

Daniel 24. Mär 2011 06:47

AW: Image auf Form dynamisch mit der Maus at run time erstellen ?
 
Ich mache hier mal zu, denn das macht so keinen Sinn.
Dir fehlen zu viele Grundlagen, um diesen Code zu verstehen. Das ist an sich kein Problem, jeder von uns hat einmal angefangen - nur versuche bitte nicht, Dir diesen Code hier schreiben zu lassen, um ihn dann zu verwenden, ohne ihn zu verstehen.

Ein paar Grundlagen-Tutorials, z.B. von Delphi-Treff.de, sollten Deine nächste Lektüre sein, wenn Du tiefer in das Thema einsteigen möchtest.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.
Seite 2 von 2     12   

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