Autor Beitrag
JeanvanHees
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 146

win 2000
D6 Pers
BeitragVerfasst: Di 03.09.02 09:56 
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. :(

_________________
Cause even though I know things won't get any better, they can certainly never get much worse!
Indeterminatus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: 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:

ausblenden 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 :

ausblenden 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.

_________________
_______________________________________
Indeterminatus

---=si tacuisses, philosophus mansisses=---
JeanvanHees Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 146

win 2000
D6 Pers
BeitragVerfasst: 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?

_________________
Cause even though I know things won't get any better, they can certainly never get much worse!
JeanvanHees Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 146

win 2000
D6 Pers
BeitragVerfasst: 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:

_________________
Cause even though I know things won't get any better, they can certainly never get much worse!
aogwaba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109



BeitragVerfasst: Fr 06.09.02 19:09 
Hi!
Wenn du den Canvas löschen willst:
ausblenden Quelltext
1:
mycanvas.fillrect(0,0,Clientwidth,clientheight);					

Damit das auf der Form sichtbar wird, solltest du dann die Repaint Methode der Form aufrufen:
ausblenden Quelltext
1:
Form1.repaint;					

Die Fragen zum Grid, versteh ich leider nicht. (Grid=TStringGrid ???)

cu
waba
JeanvanHees Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 146

win 2000
D6 Pers
BeitragVerfasst: 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?
ausblenden 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

_________________
Cause even though I know things won't get any better, they can certainly never get much worse!
aogwaba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 146

win 2000
D6 Pers
BeitragVerfasst: 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:

_________________
Cause even though I know things won't get any better, they can certainly never get much worse!
Albanac
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Mi 09.10.02 18:29 
mach doch einfach for schleifen!
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 146

win 2000
D6 Pers
BeitragVerfasst: 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

_________________
Cause even though I know things won't get any better, they can certainly never get much worse!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 146

win 2000
D6 Pers
BeitragVerfasst: Do 10.10.02 10:01 
ausblenden 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.

_________________
Cause even though I know things won't get any better, they can certainly never get much worse!