Dynamiczne tworzenie obiektów

0

mam taki kłopot, jak zrobić aby:

  1. po kliknięciu na przycisk "wygenerować" obiekt (domyślnie ukryty)
  2. po najechaniu na panel pokazać go, "leci" za kursorem, ale tylko w obrębie panelu
  3. po kliknięciu na panel "opuścić" go.

Próbowałem coś takiego:

var b1: boolean;
Shape: TShape;
P1: TPoint;
// przycisk button1
procedure TForm1.Button1Click(Sender: TObject);
begin
b1:=true; // jesli wcisnieto to ustaw na 1
button1.Caption:='shape created';
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if b1=true then {tworzenie obiektu}
begin
Shape:=TShape.Create(self);
Shape.Height:=10;
Shape.Width:=10;
// wspolrzedne kursora myszy przypisane obiektowi
GetCursorPos(P1);
Shape.Left:=P1.X;
Shape.Left:=P1.Y;
end;
end;
// pole
procedure TForm1.Panel1Click(Sender: TObject);
begin
// opuszczanie obiektu na pole
b1:=false; // wył. znacznik
button1.Caption:='make shape';
end;

...nie działa, hmm, mam nadzieję, że ktos z Was pomoże.

0
  1. Po co przy kazdym poruszeniu myszką tworzysz obiekt?
  2. Ustaw właściwość Shape.Parent:=Form1; Shape.Visible:=True;
  3. B1=True? Krócej B1
  4. Gdzie niszyczysz obiekt metodą Free?

Ja bym po prostu pokazywał/ukrywał(Visible) istniejący obiekt i go przesuwał (Move).

0
procedure TForm1.Button1Click(Sender: TObject);
begin
  b1:=true; // jesli wcisnieto to ustaw na 1
  button1.Caption:='shape created';
end;

Tak w ogole to co ma tu dzialac?

0

No cóż, chcę napisać programik do rysowania obwodów drukowanych - taki na szybko, <ort>nie duży</ort>, bez autorouter'a...

To jest dla mnie trochę trudne (dużo roboty i mało czasu), mimo, że już jakiś czas (4 lata z przerwami) siedzę w object pascalu.

Nie mogę chować/pokazywać obiektów, bo skąd niby wiedzieć ile ktoś rezystorków etc. wstawi?

Rzeczywiście powinienem upszedzić po co to całe zamieszanie na wstępie.

Koncepcja jest taka:

Po wybraniu odpowiedniego button'a wstawić na panel stosowny obiekt od rezystorka przez kondensator po scalaka. Drugorzędną sprawą jest siatka na panelu (to już mam) i funkcja snap-to-grid.

Na końcu zostaje jeszcze wstawianie ścieżek o zmiennej szerokości.

Wszelkie Wasze uwagi i komentarze mile widziane, nawet te najgorsze.

<font color="red">Kto pyta nie błądzi, kto szuka ten błądzi</span>.

// "kto szuka ten błądzi" - kto nie szuka, ten dostaje bana - ŁF

0

Pojedź po całym Canvasie siatką aby powstały kwadraty.. wszystkie elementy możliwe zrób w jednakowym rozmiarze (kwadraty) .. i bedzie po problemie..

0

ja to widzę tak, cały obwód bedziesz rysowal chyba na panelu? na nim będzie siatka itp.
robisz sobie klasy kondensator, rezystor itd. a potem ich dynamiczne listy
i teraz w obsłudze onclick dla panelu patrzysz , że użytkownik zanzaczył np. wstawienie rezystora. To do listy rezystorów dodajesz jeden, a na panel kładziesz np. obrazek jakiś, który robi za rezystor. obrazek ma ramki itp. jak na niego klikniesz to wtedy w obsłudze onmousemove dla obrazka odczytujesz aktualne wspólrzędne kursora i odpowiednio przesuwasz obrazek rezystora. przy okazji patrzysz czy kursor nie wyszedł poza obszar panelu. ze sciezkami jest równie prosto, ale pokombnuj sam ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1