Autor Beitrag
bernd00000
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 31.01.08 15:47 
Hallo,

ich würde gerne ein Zeichenprogram erstellen. (z.B. wie Paint)
Rechtecke und andere Geometrische Formen kann ich schon zeichnen. Das Program besteht aus einem Image (Canvas) und verschiedenen speedbuttons, wo man auswählen kann welche Form gezeichnet werden soll.
Hier ein kleiner Beispielquellcode:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.bitmapMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    bitmap.canvas.Pen.Width := 5;
    bitmap.canvas.pen.Color := clblack;
    bitmap.canvas.rectangle (x1,y1,x2,y2);
    x2 := x;   y2 := y1+x-x1;    //Quadrat durch X-Verschiebung der Maus
    bitmap.canvas.rectangle (x1,y1,x2,y2);
end;

procedure TForm1.bitmapMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    x1 := x; y1 := y;
    x2 := x; y2 := y;
    bitmap.canvas.rectangle (x1,y1,x2,y2);
end;


Ich würde die erzeugten Objekte jedoch gerne wieder markieren können, damit ich sie auch mal verschieben kann. Kann mir vielleicht einer bei diesem Problem behilflich sein?

Mit freundlichen Grüßen

Bernd
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 31.01.08 15:59 
Da wirst du um einige Programmierarbeit nicht herumkommen. Weil mehr oder weniger vorgefertigt gibts da nix.
Was du machen musst:
1. Alle erstellten Objekte mit ihren Daten merken.
2. Wenn in das Image geklickt wird, dann die gespeicherten Objekte durchsuchen und falls auf ein Objekt geklickt wurde, Henkel dort anzeigen.
3. Wenn gerade ein Objekt ausgewählt ist, musst du zusätzlich noch darauf reagieren, wenn die Maus an den Positionen der Henkel geklickt und gezogen wird.
Ganz einfach ist das natürlich nicht, aber wenn du die Methoden, die zu den Objekten gehören (z.B. Henkel zeichnen, etc.) sauber in Objekte verpackst, dann sollte das ganze überschaubar bleiben.
Wichtig ist auch, dass du sauber zwischen den Zuständen des Programms trennst (Henkel wird gezogen, Objekt wird erstellt, ...).
bernd00000 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 31.01.08 16:09 
Dankeschön schon einmal für die Antwort. Habe dazu aber noch ein paar Fragen.

1. Wie kann ich ein Objekt das während der Laufzeit erstellt wir speichern?
2. Wie rufe ich dieses Objekt wieder ab?

Ich glaube das ist das erste was ich umsetzen muss. Das Auswählen wäre dann der nächste Schritt. Aber dazu kann ich mich ja später noch mal melden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 31.01.08 16:17 
Du musst dir eine eigene Datenstruktur erstellen, in der du die Position, Größe, etc. speicherst. Mit Hilfe dieser Angaben kannst du dann feststellen, ob ein Klick innerhalb eines Objekts lag und dementsprechend reagieren.
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 31.01.08 16:31 
Hi,

wenn Du auf das Benutzen 3rd-Party-Komponenten zurückgreifen willst, schau Dir mal folgendes an:
www.hicomponents.com/nimageen_features.asp

Gruß
rd3
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Do 31.01.08 17:13 
@bernd00000

Guck dir die Demos an die mitgeliefert wurden. Dort ist auch ein kleiner Zeichenprogramm dabei.

Und frag mich nicht nach dem genauen Namen. Ob ich die Demos durchsuche oder du ist egal.

_________________
Popov
bernd00000 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 07.02.08 21:24 
soo...es hat etwas länger gedauert weil ich die letzten Tage im Urlaub war.
Ich habe noch mal etwas gegoogelt und habe mir auch einmal die Demoprogramme von Delphi angeschaut. Leider ohne wirkliches Ergebnis!
Mir ist aber eine Frage aufgekommen.
Erstellt das Program überhaupt OBJEKTE, die man später auch (mit der richtigen Funktion) verschieben kann oder zeichnet das Program nur irgendwelche Linien auf dem Canvas-Feld? (hoffentlich versteht ihr was ich mit der Frage ausdrücken will^^)

Dankeschön jetzt schon mal
nagel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: Do 07.02.08 21:35 
user profile iconbernd00000 hat folgendes geschrieben:

Erstellt das Program überhaupt OBJEKTE...


Welches Programm? Die Delphi-Demo nicht.


Deshalb:
user profile iconjaenicke hat folgendes geschrieben:
Du musst dir eine eigene Datenstruktur erstellen, in der du die Position, Größe, etc. speicherst. Mit Hilfe dieser Angaben kannst du dann feststellen, ob ein Klick innerhalb eines Objekts lag und dementsprechend reagieren.


Du musst das Ganze also selbst programmieren, wie du dabei ungefähr vorgehen kannst, hat dir user profile iconjaenicke in seinem ersten Post auch schon erklärt.
Ist vermutlich nicht ganz einfach, aber machbar.
bernd00000 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 07.02.08 21:39 
ich meine meinen kurzen Programauszug!!!
und zu den Punkten die Jaenicke gepostet hat hab ich nicht wirklich viel gefunden (was für mich verständlich ist).
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 765
Erhaltene Danke: 130



BeitragVerfasst: Do 07.02.08 22:19 
Für das , was Du willst, gibt es ein gutes Tutorial: www.delphi-treff.de/...2/tlist/katalog/182/

ub60