Entwickler-Ecke

Multimedia / Grafik - Pen unter Winforms


legotrailer - Mo 29.01.07 18:23
Titel: Pen unter Winforms
Noch 'ne Frage bezüglich des Malens auf TWinforms:
für jede Funktion bzw. Prozedur, die ermöglicht auf ein Objekt zu malen, benötigt einen Pen wo nehme ich einen her bzw. wie baue ich mir einen, wie kann ich die Eigenschaften verändern.


Moderiert von user profile iconChristian S.: Topic aus .NET verschoben am Mo 29.01.2007 um 17:34


Christian S. - Mo 29.01.07 18:37

Du erstellst Dir einfach einen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  p : Pen;
begin
  p := Pen.Create(aColor, aWidth);
  ...
end;

Ich hoffe, der Quelltext stimmt so, kann ihn nicht testen, weil ich kein Delphi .NET installiert habe.

P.S.: Lass mal das "T" vor dem WinForms weg. ;-)


legotrailer - Mo 29.01.07 18:44

und wie soll ich aColor und aWidth angeben?


Christian S. - Mo 29.01.07 18:51

Hallo!

Die Hilfe zum Konstruktor der Pen-Klasse sagt, dass aColor vom Typ Color ist (die anderen Konstruktoren passen nicht). Die Hilfe zur Color-Klasse listet Dir eine große Menge an Farben auf, die Du da reinschmeissen kannst und zeigt Dir auch, wie Du eine eigene Farbe deifnierst.

Und aWidth könnte eventuell eine Zahl sein.

Grüße
Christian


Kha - Mo 29.01.07 20:12

Aber nicht vergessen, das Holzdingens per Dispose wieder freizugeben ;) .


Delete - Mo 29.01.07 23:09

oder es mit using aufrufen ;)


legotrailer - Di 30.01.07 19:14

Mein Problem ist immer noch, dass ich den pen nicht erstellen kann:
1. finde ich in der Hilfe keine Farben (bei 'color' bzw. 'tcolor' kommt nur allgemeines Zeug)
2. was meint ihr mit using und Dispose, davon habe ich noch nie etwas gehört.
3. es wäre nett, wenn es nett ihr mir einfach den Quelltext zur Erstellung gebt, da habe ich gleich alles zusammen.
Danke im voraus!


Christian S. - Di 30.01.07 19:23

Zum "T" vor irgendwelchen Typen hatte ich Dir ja schon gesagt, das sollteste weglassen. Das hat in .NET nix verloren ;-) Deswegen findest Du auch nix unter "TColor".

Zu Color solltest Du mal in den Anhang schauen. "Keine Farben" sieht für mich anders aus. Und das ist nur die erste Bildschirmseite.

p.Dispose rufst Du auf, um die Resourcen des Pens wieder freizugeben, wenn Du ihn nicht mehr brauchst.

Wie sieht denn Dein Quelltext bisher aus? Im Moment trägst Du nicht viel zur Lösung des Problems bei und ich sehe nicht ein, Dir Deinen Quelltext zu schreiben. Wenn Du Eigeninitiative zeigst, helfe ich Dir gerne weiter.


legotrailer - Di 30.01.07 19:42

hier ist, dass was ich im Moment weiß:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure [...]
var p:pen;
begin
 p:=pen.create([farbe],[zahl]) ; //kann keinen Pen erzeugen
 winform.CreateGraphics.DrawLine(p,0,0,150,150);
 p.dispose;
end;


Ich hoffe ich habe, dass so richtig auf genohmen.
Ich weiß ja auch nicht aber, wenn ich suche kommt kommt als erstes 'color class';
könnt ihr mal ein Beispiel für ne Farbe machen. Weiß nur, dass alles was mit 'cl' anfängt nicht geht. handelt es sich um eine hexadezimal Zahl?

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Christian S. - Di 30.01.07 19:50

Also eine Farbe wäre z.B.

Delphi-Quelltext
1:
Color.Black                    


Du musst wirklich versuchen, Dich von dem Delphi-Zeugs loszumachen. "cl..."-Farben hast Du nicht mehr, wenn Du mit WinForms arbeitest, genausowenig wie Typen, die mit "T" beginnen :zwinker:

Und zur Suche: Das Erste muss ja nicht immer das Richtige sein. Color ist keine Klasse, sondern ist bei mir unter "Color structure" zu finden. Wenn Du Dir aber den richtigen Konstruktor der Pen-Klasse angesehen hast, dann ist da zumindest bei mir auch das Color-Struct verlinkt. Diese Verlinkung innerhalb der Hilfe hat mir schon recht gute Dienste geleistet, wenn ich was gesucht habe.


legotrailer - Di 30.01.07 20:15

FUNKTIONIERT!!! :roll:
Zusatzinfo: man muss 'winform.' weg lassen.

nächstes Problem:
die Funktion funktioniert aber nicht in einer Timer1_Tick-Prozedur
ich will aber eine uhr bauen wie könnte man das regeln?


Christian S. - Di 30.01.07 20:16

Zeig mal bitte den Quelltext. Ansonsten ist das schwer, da was zu zu sagen :-)


legotrailer - Di 30.01.07 20:28

ich zeige jetzt nur, dass entscheidene:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var stift:pen;
procedure TWinForm.TWinForm_Load(sender: System.Object; e: System.EventArgs);
begin
 stift:=pen.create(color.Red,9); 
end;

[Sekunden werden vorher berechnet]
procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs);
begin
  CreateGraphics.DrawLine(stift,round(sin(sekunden*6)*150),round(cos(sekunden*6)*150),150,150);
end;


Christian S. - Di 30.01.07 20:34

Und der Fehler ist? (Mensch, lass Dir doch nicht alles aus der Nase ziehen! :zwinker:)


legotrailer - Di 30.01.07 20:54

:oops:
wo ist nur der Fehler?????? :?
:oops:
es ist bestimmt ein ganz primitiver Fehler, doch irgendwie habe ich Tomaten auf den Augen, ich sehen den Fehler einfach nicht.
:oops:
muss ich etwa irgendetwas vorher definieren, oder so? :? gib mir einen Tipp!
Bitte! :cry:


Christian S. - Di 30.01.07 20:55

:lol: Ich meine, die Fehlermeldung bzw. Fehlerbeschreibung. Du sagst, die funktioniert nicht. Schmücke das doch mal mit ein paar Details aus :D


legotrailer - Di 30.01.07 21:00

was meinst du mit details? :!: :?:
es gibt keine Fehlermeldung :!:
die funktion malt einfach nicht! :?:
der Strich ist nicht vorhanden :!:


Christian S. - Di 30.01.07 21:04

user profile iconlegotrailer hat folgendes geschrieben:
was meinst du mit details? :!: :?:

Das hier sind Details:
user profile iconlegotrailer hat folgendes geschrieben:
die funktion malt einfach nicht! :?:
der Strich ist nicht vorhanden :!:


Läuft der Timer denn?

Es könnte aber auch sein, dass die Form sich neu zeichnet und Deine Pinselei dann wieder weg ist. Dann musst Du sie im Paint-Event der Form neu zeichnen.


//Edit: Smilies sind teuer, benutze sie sparsam *g*


legotrailer - Di 30.01.07 21:20

gute Frage der scheint nicht zu funktionieren.
gestartet habe ich ihn aber.
und das Intervall beträgt eine Millisekunde.