AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Linien Komponente

Ein Thema von halinchen · begonnen am 15. Sep 2006 · letzter Beitrag vom 20. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#1

Linien Komponente

  Alt 15. Sep 2006, 17:22
Hi!

Ich hab mal wieder ein Problem:
Ich suche ein Linien-Komponente. Im Internet hab ich gefunden das man die am besten selber macht und von TShapes ableitet.
Ich hab sowas aber noch nie gemacht und weiß nicht wie's geht.

Ich bräuchte das so:
x1,y1,x2,y2 als Punkte und dazwischen eine Linie (vielleicht noch mit Breiten-änderung).
(Wie das mit der Linie geht weiß ich auch nicht)

Ich brauch sozugen nur ein Starthilfe.

Achso wenn es sowas schon gibt dann brauch ich das nicht selber programmieren. Aber ich hab schonmal geguckt und nichts gefunden.)
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Linien Komponente

  Alt 15. Sep 2006, 17:35
Hi,
was genau verstehst du denn unter einer Linien Komponente?
Also am einfachsten ist es, wenn du die Linie selbst zeichnest. Dazu brauchst du einen Canvas, das ist die Zeichenfläche. So ein Canvas ist etwas, was du nie direkt selbst erzeugst, du verwendest vielmehr immer einen, der dir zur Verfügung gestellt wird. Typsiche Beispiele sind hier alle Fenster von Windows. Die Zeichenroutine bekommt einfach deren Canvas übergeben und die zeichnet dann darauf. Das was die zeichnet ist dann das, was du siehst.
Auch dein Formular hat einen Canvas. Auf den könntest du direkt zeichnen (was aber nicht so wirklich schön ist).

Am einfachsten kannst du selbst zeichnen, wenn du eine Bitmap verwendest. TBitmap kapselt alles was du brauchst, da gibt es dann sogar schon eine Funktion für das was du vor hast:
Delphi-Quellcode:
procedure drawLine(const x1, y1, x2, y2 : Integer);
var bitmap : TBitmap;
begin
  bitmap := TBitmap.Create;
  // wichtig Größe setzen
  bitmap.Width := xxx;
  bitmap.Height := xxx;
  
  // das eigentliche Zeichnen
  bitmap.Canvas.MoveTo(x1, y1);
  bitmap.Canvas.LineTo(x2, y2);
  
  bitmap.Free;
end;
Ok, hier fehlt natürlich als erstes mal die Größe der Bitmap. Da musst du schauen, welche Größe du brauchst. Dann fehlt auch noch das Anzeigen. Der einfachste Weg ist, dass du ein TImage nimmst. Um hier ein Bitmap anzuzeigen musst du (vor dem Bitmap.Free) der Eigenschaft Image.Picture das Bitmap zuweisen.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Linien Komponente

  Alt 15. Sep 2006, 17:52
Hi Unwissender (da war er wieder )

warum redest du immer von Bitmap und Image. Halinchen will doch nur eine Linie.

Ich dächte TBevel währe da doch schon mal was.

wenn die Linie dann noch was anderes können muß außer eine Linie zu sein, dann können wir ja noch mal schauen.

gruß oki
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Linien Komponente

  Alt 15. Sep 2006, 20:14
Hi Oki,
ja hast schon recht, ich dachte nur wenn man zwei x,y Tupel angibt, dann doch eigentlich weil man nicht langweilig gerade Linien möchte (also senkrecht zu den Seiten des Fensters).
Ansonsten fehlt (soweit ich weiß) dem TBevel die Möglichkeit die Dicke der Linie zu verändern. Bei einem Canvas gibt es einen Strift, mit dem die Linie gezeichnet wird (Eigenschaft Pen des Canvas), dieser hat dann eine Farbe und eine Dicke.
Für Shapes gibt es einen ähnlichen Grund, aus dem ich sie ausgeschlossen hatte. Einem TShape fehlt die Linie (oder irre ich mich auch da?).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Linien Komponente

  Alt 16. Sep 2006, 12:22
Erstmal danke für die Antworten!

Mit Canvas kenn ich mich nicht so aus, aber ich wollte die Linie zur Laufzeit immer wieder wo anders hinsetzen und länger oder kürzer machen. Außerdem sollte die Linie auch diagonal sein können.

Das geht zwar alles mit Canvas, aber ich hätte das lieber als Object, da ich mich da besser auskenne.

Bevel und Shape-Control können nicht diagonal sein. (Wenn man Shape auf Rechteck setzt und Height auf 1 setzt hat man waagerechte Linie, aber keine diagonale.)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Linien Komponente

  Alt 16. Sep 2006, 12:25
Ein Canvas ist doch auch ein Objekt. da man auf dem Canvae zeichen kann, ist diese Lösung doch flexibel. Es gibt verschiedene Komponenten, welche einen Canvas anbieten z.B. TImage, TPaintBox, ...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Linien Komponente

  Alt 17. Sep 2006, 18:21
Ich hab das alles nochmal überdacht. Es gibt eigentlich 1 gute Möglichkeiten.

Ich mache eine Komponente oder ein Objekt mit den vier Punkten als Property. Wenn die Propertys berabeitet werden mach ich eine Line dazwischen. Dann muss ich aber vorher refresh aufrufen, da sonst die alte Linie erhaltenbleibt. Die anderen Linien die die gezeichnet worden (Im falle von mehreren Variablen des Linien-Objekts) sind dann aber auch weg. Da scheib ich eine Prozedur die alle Linien Objekte durchgeht und die dann neuzeichnet.

Kann mir vielleicht jemand sagen wie das bei TShapes geht? Die werden ja automatisch neugezeichnet. Das könnte ich vielleicht bei mir einbauen.)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Linien Komponente

  Alt 17. Sep 2006, 18:24
Das mit einer festen Anzahl von Properties für die Punkte ist aber schlecht. Nimm lieber eine dynamische Anzahl von Punkten so kannst du statt Linien auch komplexere Linienzüge zeichen ( Polyline, Polygone)
Markus Kinzler
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Linien Komponente

  Alt 18. Sep 2006, 08:35
Hi hallinche,

klar, bei diagonalen Linien ist es natürlich vorbei mit den Bevels. Also mußt du dir wirklich ein geeignetes Basisobjekt suchen und deine eigenen Zeichenroutinen schreiben. Achte aber darauf, das es von TComponent abgeleitet ist. Dann nehme z.B. bei einem Panel nicht TPanel, sondern TCustomPanel...

Als nächstes würde ich erst mal genau sortieren, was du mit deiner neuen Komponente alles machen möchtest. Diese Idee ist nicht schlecht:
Zitat von mkinzler:
Das mit einer festen Anzahl von Properties für die Punkte ist aber schlecht. Nimm lieber eine dynamische Anzahl von Punkten so kannst du statt Linien auch komplexere Linienzüge zeichen ( Polyline, Polygone)
wird aber bedeutend komplexer.

das automatische Zeichnen ist nicht weiter schlimm. Hier vererbst du die Paint-Methode via override und implementierst deine eigene Zeichenmethode.

Delphi-Quellcode:
procedure TMyObject.Paint;
begin
  inherited;
  MyPaint;
end;
In MyPaint schreibst du alles was du für dein Zeichen brauchst.


gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Linien Komponente

  Alt 18. Sep 2006, 16:37
Das klingt gut, da weiß ich jetzt was ich machen muss.


Danke für die vielen Antworten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.
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