Entwickler-Ecke
Multimedia / Grafik - Canvas und co
JeanvanHees - Di 03.09.02 09:56
Titel: Canvas und co
Gutenmorgen :)
//Ihr konntet mich nicht mit diese fragen helfen:
Ich hab mal einige fragen...
Wenn Ich einen grid machen will mit Pen.Style:=psDot;
Wie kann ich dann die exacte/pixel distanz zwischen die punkte einstellen?
Und wie kann ich die penproperties nach normal zurücksetzen?
//...Aber weißt ihr denn wie ich ein canvas clearen kann??
Jetzt wird sicher jemand böse das meine alte frage wieder dabei steht. Tut mir leid aber es ist eine barriere am werden die ich nicht durchbrechen kann. :(
Indeterminatus - Do 05.09.02 10:10
@JeanvanHees: ein Canvas-Objekt löschst Du am Besten durch Aufruf der Funktion <Clear>.
Wenn Du meinetwegen irgendwo ein Canvas hast und Du willst den Inhalt löschen, rufst Du einfach folgendes auf:
Quelltext
1: 2:
| with Canvas do Clear; |
Die exakte Pixeldistanz bei Pen.Style := psDot einzustellen ist meines Wissens nach überhaupt nicht möglich.
Zitat: |
Und wie kann ich die Penproperties nach normal zurücksetzen?
|
Du erstellst am besten eine Variable vom Typ TPen, der Du gleich zu Beginn des Programms (etwa bei Hauptformular <OnCreate>) die aktuellen Einstellungen von Canvas.Pen zuweist ...
Wenn Du jetzt die anfänglichen Einstellungen in Canvas.Pen zurückhaben willst, weist Du einfach Canvas.Pen die Variable vom Typ TPen wieder zu ...
Aussehen könnte das in etwa so :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| ...
interface FForm1 : TFForm1; PenTemp: TPen;
procedure SavePenSettings; begin PenTemp := FForm1.Canvas.Pen; end;
procedure RestorePenSettings; begin FForm1.Canvas.Pen := PenTemp; end; |
Kann sein, dass sich jetzt ein kleiner Fehler eingeschlichen hat, ich habe es nicht ausprobiert, ob es funktioniert ...
Wichtig ist auf jeden Fall, dass "SavePenSettings" aufgerufen wird, bevor Du irgendetwas an den Pen-Properties während der Laufzeit änderst !!!
Hoffe, ich konnte Dir etwas helfen ...
indeterminatus.
JeanvanHees - Do 05.09.02 13:37
Ok, danke.
Gibt es kein anderen weg mit den ich ein grid kan machen wo ich kann einstellen wie gross die rechtecker werden?
JeanvanHees - Fr 06.09.02 15:43
Ich konnte es heute ausprobieren aber das canvas clearen wirkt nicht auf die art, ich muß etwas anderes haben...
Ich bin mich jetzt schon eine woche damit am ergern.
So lansamerhand wird mir dieses grafisches ge-eckel zum :puke:
aogwaba - Fr 06.09.02 19:09
Hi!
Wenn du den Canvas löschen willst:
Quelltext
1:
| mycanvas.fillrect(0,0,Clientwidth,clientheight); |
Damit das auf der Form sichtbar wird, solltest du dann die Repaint Methode der Form aufrufen:
Die Fragen zum Grid, versteh ich leider nicht. (Grid=TStringGrid ???)
cu
waba
JeanvanHees - Mo 09.09.02 08:53
@aogwaba
Danke, aber es functioniert noch immer nicht, ich will immer wieder etwas neues auf diese canvas zeichnen. Kann es sein das die formclose funktion die ich dahinter habe stört?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Procedure TForm5.Button1Click(Sender: TObject); begin Unit5.Form5.Canvas.Brush.Color:=clWhite; Unit5.Form5.Canvas.FillRect(Rect(0,0,1000,600)); Form5.Repaint; Form5.Close; Form3.Show; end; |
Mit den grid meinte ich wie bei eine grafik ...eine graduierung mit allerlei kleine rechtecker.
|_|_|_|_|_|_| Weiß du jetzt was ich meine?
|_|_|_|_|_|_| Aber dann will ich die abstanden vorschreiben können
aogwaba - Mo 09.09.02 18:00
@JeanvanHees
Nim mal das repaint wieder raus, das macht die FillRect Aktion ja wieder
rückgängig.
Wenn du ein Grid zeichnen willst, kannst du ja die Zeichenmethoden der
CanvasKlasse benutzen.
cu
waba
JeanvanHees - Di 10.09.02 08:25
Nein, Ich meine die Fillrect funktioniert nicht mal...und bei den grid ist das problem das ich die pixeldistanz möchte definieren :eyecrazy:
AAHH Jemand hilfe!!!! :nut:
Albanac - Mi 09.10.02 18:29
mach doch einfach for schleifen!
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| for x := 0 to Canvas.Heigth do begin if Canvas.Heigth mod i =0 then begin for y := 0 to Canvas.Width do begin if Canvas.Heigth mod y = 0 then begin function_drawdot(x,y); end; end; end; end; |
der code muss noch überarbeitet werden... ist nicht getestet und so
JeanvanHees - Do 10.10.02 08:38
Ich hab hier schon eine lösung gefunden( :oops: 'tschuldigung), und es ist so was wie du beschreibst, nur ein wenig anders.
Jedenfals danke! :D
Tino - Do 10.10.02 09:04
JeanvanHees hat folgendes geschrieben: |
Ich hab hier schon eine lösung gefunden |
Kannst Du die uns auch zeigen?
JeanvanHees - Do 10.10.02 10:01
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| //Grid tekenen function Drawgrid:integer; var i,j:integer; begin with Mainform.Image2.Canvas do begin i:=1; Pen.Color:=$00DDDDDD; Pen.Style:=psDot; while i<2000 do begin MoveTo(i*40,0); LineTo(i*40,700); i:=i+1; end; j:=1; while j<700 do begin MoveTo(0,j*40); LineTo(20000,j*40); j:=j+1; end; Pen.Color:=clBlack; Pen.Style:=pssolid; Drawgrid:=1; end; end; |
Ist also eine simpele lösung für ein eigentlich simpeles problem.
Nur hab ich es mich selbst erst schwer gemacht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!