/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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


Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste