|
| TShapes Fra : Allan Madsen |
Dato : 06-11-06 18:03 |
|
Hejsa
Jeg har en array af tshapes, som jeg tegner på en timage (eller canvasen)
når jeg flytter dem med drag og drop, eller bare ønsker at slette en af de
tshapes, der er tegnet, ja så ramler jeg i problemer, ved ski ikke hvordan
jeg gør det.
Nogle der kan hjælpe
MVH
Allan
| |
nic@aub.dk (07-11-2006)
| Kommentar Fra : nic@aub.dk |
Dato : 07-11-06 13:23 |
|
Allan Madsen wrote:
> Hejsa
>
> Jeg har en array af tshapes, som jeg tegner på en timage (eller canvasen)
> når jeg flytter dem med drag og drop, eller bare ønsker at slette en af de
> tshapes, der er tegnet, ja så ramler jeg i problemer, ved ski ikke hvordan
> jeg gør det.
>
> Nogle der kan hjælpe
>
> MVH
> Allan
Det letteste er at slette hele din TImage/TCanvas og så gentegne dem.
Du kan også lade dem eje af et TPanel eller lignende - så bliver de
automatisk tegnet (sæt evt TPanel.Invalidate for at tvinge en
genoptegning igennem).
Hvis det ikke hjælper prøv at forklare hvad du gør og hvad der sker
forkert :)
| |
Allan Madsen (07-11-2006)
| Kommentar Fra : Allan Madsen |
Dato : 07-11-06 16:39 |
|
Hejsa
Den med at sætte TPanel.Invalidate, hvordan gør jeg det.
Jeg har plaseret et image på mit panel, hvorpå jeg runtime oprettet nogle
TShapes, når jeg så bruger drag and drop ( Det virker) laver den en kopi af
den gamle tshape og plaser den det nye sted, uden at "slette" flytte den
gamle.
Hvad kan der være galt??
Mine TShape er oprettet som en array of tshapes.
MVH
<nic@aub.dk> skrev i en meddelelse
news:1162902182.695609.90430@b28g2000cwb.googlegroups.com...
Allan Madsen wrote:
> Hejsa
>
> Jeg har en array af tshapes, som jeg tegner på en timage (eller canvasen)
> når jeg flytter dem med drag og drop, eller bare ønsker at slette en af de
> tshapes, der er tegnet, ja så ramler jeg i problemer, ved ski ikke hvordan
> jeg gør det.
>
> Nogle der kan hjælpe
>
> MVH
> Allan
Det letteste er at slette hele din TImage/TCanvas og så gentegne dem.
Du kan også lade dem eje af et TPanel eller lignende - så bliver de
automatisk tegnet (sæt evt TPanel.Invalidate for at tvinge en
genoptegning igennem).
Hvis det ikke hjælper prøv at forklare hvad du gør og hvad der sker
forkert :)
| |
Harald (07-11-2006)
| Kommentar Fra : Harald |
Dato : 07-11-06 17:32 |
|
"Allan Madsen" <ns@crump.dk> skrev i en meddelelse
news:454f6b19$0$13984$edfadb0f@dread15.news.tele.dk...
> Hejsa
>
> Jeg har en array af tshapes, som jeg tegner på en timage (eller canvasen)
> når jeg flytter dem med drag og drop, eller bare ønsker at slette en af de
> tshapes, der er tegnet, ja så ramler jeg i problemer, ved ski ikke hvordan
> jeg gør det.
>
> Nogle der kan hjælpe
Jeg lavede engang dette eks. hvor man kan oprette TShapes og derefter flytte
og resize dem, måske kan du bruge det til noget.
unit MoveShapeUnit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
// den nye Shape class
TMyShape = class(TShape)
private
MoveStartX, MoveStartY : integer;
DoMove : boolean;
FMoveMode : integer;
procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ShapeMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ShapeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SetMoveMode(AMoveMode : integer);
procedure MoveShape(x,y : integer);
procedure SizeShape(x,y : integer);
public
{ Public declarations }
property MoveMode : integer read FMoveMode write SetMoveMode;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// *** Start på koden for TMyShape
procedure TMyShape.SetMoveMode(AMoveMode : integer);
begin
FMoveMode:=AMoveMode;
case FMoveMode of
0 : Cursor:=crSize;
1,2 : Cursor:=crSizeWE;
4,8 : Cursor:=crSizeNS;
5,10 : Cursor:=crSizeNWSE;
6,9 : Cursor:=crSizeNESW;
end;
end;
procedure TMyShape.MoveShape(x,y : integer);
begin
Left:=Left+x;
Top:=Top+y;
end;
procedure TMyShape.SizeShape(x,y : integer);
begin
Width:=Width+x;
Height:=Height+y;
end;
procedure TMyShape.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MoveStartX:=X;
MoveStartY:=Y;
DoMove:=true;
end;
procedure TMyShape.ShapeMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
bs : byte;
begin
if DoMove then
begin
if MoveMode=0 then // flyt
MoveShape(x-MoveStartX,y-MoveStartY);
if MoveMode and 1=1 then // size venstre
begin
MoveShape(x-MoveStartX,0);
SizeShape(-x+MoveStartX,0);
end;
if MoveMode and 2=2 then // size højre
begin
SizeShape(x-MoveStartX,0);
MoveStartX:=x;
end;
if MoveMode and 4=4 then // size top
begin
MoveShape(0,y-MoveStartY);
SizeShape(0,-y+MoveStartY);
end;
if MoveMode and 8=8 then // size bund
begin
SizeShape(0,y-MoveStartY);
MoveStartY:=y;
end;
exit;
end;
MoveMode:=0;
bs:=10; // afstand fra kant i pixel
if x<bs then
MoveMode:=MoveMode+1; // venstre
if x>Width-bs then
MoveMode:=MoveMode+2; // højre
if y<bs then
MoveMode:=MoveMode+4; // top
if y>Height-bs then
MoveMode:=MoveMode+8; // bund;
end;
procedure TMyShape.ShapeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
DoMove:=false;
end;
// *** Slut på koden for TMyShape
procedure TForm1.Button1Click(Sender: TObject);
begin
with TMyShape.Create(Self) do
begin
Left:=10;
Top:=10;
OnMouseDown:=ShapeMouseDown;
OnMouseMove:=ShapeMouseMove;
OnMouseUp:=ShapeMouseUp;
Parent:=Self;
end;
end;
end.
| |
Allan Madsen (07-11-2006)
| Kommentar Fra : Allan Madsen |
Dato : 07-11-06 17:46 |
|
Er mere på udkik efter noget drag and drop.
MVH
"Harald" <nomail@noname.dk> skrev i en meddelelse
news:4550b4fd$0$15885$edfadb0f@dtext01.news.tele.dk...
> "Allan Madsen" <ns@crump.dk> skrev i en meddelelse
> news:454f6b19$0$13984$edfadb0f@dread15.news.tele.dk...
>> Hejsa
>>
>> Jeg har en array af tshapes, som jeg tegner på en timage (eller canvasen)
>> når jeg flytter dem med drag og drop, eller bare ønsker at slette en af
>> de tshapes, der er tegnet, ja så ramler jeg i problemer, ved ski ikke
>> hvordan jeg gør det.
>>
>> Nogle der kan hjælpe
>
> Jeg lavede engang dette eks. hvor man kan oprette TShapes og derefter
> flytte og resize dem, måske kan du bruge det til noget.
>
> unit MoveShapeUnit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
> Forms,
> Dialogs, ExtCtrls, StdCtrls;
>
> type
> TForm1 = class(TForm)
> Button1: TButton;
> procedure Button1Click(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> // den nye Shape class
> TMyShape = class(TShape)
> private
> MoveStartX, MoveStartY : integer;
> DoMove : boolean;
> FMoveMode : integer;
>
> procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> procedure ShapeMouseMove(Sender: TObject; Shift: TShiftState; X,
> Y: Integer);
> procedure ShapeMouseUp(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> procedure SetMoveMode(AMoveMode : integer);
> procedure MoveShape(x,y : integer);
> procedure SizeShape(x,y : integer);
> public
> { Public declarations }
> property MoveMode : integer read FMoveMode write SetMoveMode;
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.dfm}
>
> // *** Start på koden for TMyShape
> procedure TMyShape.SetMoveMode(AMoveMode : integer);
> begin
> FMoveMode:=AMoveMode;
> case FMoveMode of
> 0 : Cursor:=crSize;
> 1,2 : Cursor:=crSizeWE;
> 4,8 : Cursor:=crSizeNS;
> 5,10 : Cursor:=crSizeNWSE;
> 6,9 : Cursor:=crSizeNESW;
> end;
> end;
>
> procedure TMyShape.MoveShape(x,y : integer);
> begin
> Left:=Left+x;
> Top:=Top+y;
> end;
>
> procedure TMyShape.SizeShape(x,y : integer);
> begin
> Width:=Width+x;
> Height:=Height+y;
> end;
>
> procedure TMyShape.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> begin
> MoveStartX:=X;
> MoveStartY:=Y;
> DoMove:=true;
> end;
>
> procedure TMyShape.ShapeMouseMove(Sender: TObject; Shift: TShiftState; X,
> Y: Integer);
> var
> bs : byte;
> begin
> if DoMove then
> begin
> if MoveMode=0 then // flyt
> MoveShape(x-MoveStartX,y-MoveStartY);
>
> if MoveMode and 1=1 then // size venstre
> begin
> MoveShape(x-MoveStartX,0);
> SizeShape(-x+MoveStartX,0);
> end;
> if MoveMode and 2=2 then // size højre
> begin
> SizeShape(x-MoveStartX,0);
> MoveStartX:=x;
> end;
> if MoveMode and 4=4 then // size top
> begin
> MoveShape(0,y-MoveStartY);
> SizeShape(0,-y+MoveStartY);
> end;
> if MoveMode and 8=8 then // size bund
> begin
> SizeShape(0,y-MoveStartY);
> MoveStartY:=y;
> end;
> exit;
> end;
>
> MoveMode:=0;
> bs:=10; // afstand fra kant i pixel
> if x<bs then
> MoveMode:=MoveMode+1; // venstre
> if x>Width-bs then
> MoveMode:=MoveMode+2; // højre
> if y<bs then
> MoveMode:=MoveMode+4; // top
> if y>Height-bs then
> MoveMode:=MoveMode+8; // bund;
> end;
>
> procedure TMyShape.ShapeMouseUp(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> begin
> DoMove:=false;
> end;
> // *** Slut på koden for TMyShape
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> with TMyShape.Create(Self) do
> begin
> Left:=10;
> Top:=10;
> OnMouseDown:=ShapeMouseDown;
> OnMouseMove:=ShapeMouseMove;
> OnMouseUp:=ShapeMouseUp;
> Parent:=Self;
> end;
> end;
>
> end.
>
| |
nic@aub.dk (09-11-2006)
| Kommentar Fra : nic@aub.dk |
Dato : 09-11-06 08:20 |
|
Hej Allan
Hvad gør du når du slutter din drag/drop (nok et OnDragDrop event i
dit panel)?
Laver du en ny TShape?
Hvis du fjerner den "gamle" fra dens tidligere parent's component liste
og tilføjer den til det nye panel's burde det virke.
Allan Madsen wrote:
> Er mere på udkik efter noget drag and drop.
>
> MVH
| |
|
|