Autor |
Beitrag |
Interruptman
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 01.06.05 18:08
Hallo!
Dies ist eine wahrscheinlich sehr einfach zu beantwortende Frage für sehr viele von euch.
Wie zeichne ich eine ganz stinknormale einfache gerade Linie?
Man soll auf den Bildschirm klicken können (Canvas), sodass ein Startpunkt gesetzt wird (mousedown). Dann soll man die Linie (mousemove) die Länge der Linie bestimmen können. Lässt man die Maustaste los (mouseup), so wird die Linie gezeichnet.
Es tut mir Leid, dass ich solch einfache Fragen posten muss, aber in dem Informatikunterricht, den wir haben, wird fast nichts erklärt. Man soll es halt irgendwie versuchen und die, die Ahnung haben, schaffen es und die anderen nicht. Ich finds ziemlich beschissen und werde Informatik wohl auch wieder abwählen bei solchen unqualifizierten Lehrkräften. Ich habe mehrfach in eurem Forum nach Beiträgen gesucht, die das Linien zeichnen behandeln, habe aber nichts gefunden, also dreht mir bitte keinen Strick draus, ich war leider in Zeitdruck und wusste nicht, wonach ich noch suchen sollte.  Dazu kommt noch, dass man nur in der Schule sich mit der Programmierung auseinandersetzen kann.
Danke fürs helfen im Voraus. 
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mi 01.06.05 18:33
Delphi-Quelltext 1: 2: 3: 4:
| Canvas.MoveTo(x,y); Canvas.LineTo(x,y); |
sollte klappen.. viel glück mit deinen lehrern -.-
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Interruptman 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 01.06.05 18:37
Das war alles!??!?!??! OMG!!11
Ok, ich probiers aus.... sag dann Bescheid.
Thx!!
edit: noch ne Frage: mit diesem Code kann ich also eine Linie von der Mauszeigerposition aus zeichnen? Ich frag nur so ungläubig, weils so'n simpler Code is. Ich kann also irgendwo hinklicken, es kommt ne Linie ich zieh sie und lasse Maustaste los?!
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 01.06.05 18:55
Interruptman hat folgendes geschrieben: | noch ne Frage: mit diesem Code kann ich also eine Linie von der Mauszeigerposition aus zeichnen? Ich frag nur so ungläubig, weils so'n simpler Code is. Ich kann also irgendwo hinklicken, es kommt ne Linie ich zieh sie und lasse Maustaste los?! |
Nein. Es kommt erst eine Linie, wenn du die Maustaste loslässt. Wenn du möchtest, dass die Linie auch schon "vorschaumäßig" während dem Ziehen angezeigt wird, dann wird's etwas komplizierter. 
|
|
Interruptman 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 01.06.05 19:28
Jo, das meint ich ja. Nur hab nicht gedacht, dass x und y gleich die Mauskoordinaten sind. Dachte, die müsste man erst berechnen. Aber soweit ich mich erinnere, steht sowas ja auch im Prozedurkopf, von wegen Mouse Integer blaah oder so.
Ist die Version mit der "aufziehbaren" Linie groß komplizierter?
Oder auch nur 3-4 Zeilen? Wenn ja, dann: HABEN HABEN HABEN 
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mi 01.06.05 20:09
nun du busst erstmal das canvas jedes mal neu aufbauen, wenn die maus bewegt wird. das ist ein kleines problemchen... ^^ und dann brauchst du wohl noch doubleBuffered:=true; das lässt das flimmern verschwinden... wird schon komplizierter als 3-4 zeilen...
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Interruptman 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 01.06.05 20:17
Nee, dann lassen wirs.... glaub net, dass meine Lehrkraft glaubt, dass ich mirt das aus den Fingern gesogen habe.... die meinte nur was von wegen OnMouseMove und Variable mausdruck:boolean und mit zwei Klicks evtl. Sie hat die Aufgabe sehr unpräzise gestellt. Aber wie gesagt: wenns so auch geht, dann bedanke ich mich herzlich.
P.S.: kann sein, dass im laufe der zeit hier noch Fragen von mir hinzukommen 
Zuletzt bearbeitet von Interruptman am Mi 01.06.05 20:18, insgesamt 1-mal bearbeitet
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mi 01.06.05 20:17
Vor allem zeichnest du ja auch auf einen Hintergrund drauf. Den müssest du dann vorher immer sichern, alles löschen und dann erst die Linie draufmachen.  Das ist extrem ressourcenverbrauchend. 
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 02.06.05 00:09
man soll pro frage ein thema erstellen 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Interruptman 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 02.06.05 15:06
Okay, hier zeig ich euch jetzt mal, wie es unsere Lehrerin haben wollte:
Delphi-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:
| var a, b, x1, y1: integer; maus: boolean;
maus := true; a := x; b := y; form1.canvas.moveto(a,b); form1.canvas.lineto(x,y); x1 := x; y1 := y; form1.canvas.pen.mode := pmNotXor;
if maus = true then begin form1.canvas.moveto(a,b); form1.canvas.lineto(x1,y1); form1.canvas.moveto(a,b); form1.canvas.lineto(x,y); x1 := x; y1 := y; end;
maus := false |
Unwesentlich komplizierter also nur... 
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 02.06.05 15:59
jo hast du recht, ist n schöner code, also wollte die doch die linie, während des ziehens anzeigen lassen, naja, dehalb wohl auch das "mousemove" in der aufgabenstellung
das wichtige daran ist das hier:
Delphi-Quelltext 1:
| form1.canvas.pen.mode := pmNotXor; |
aber das konntest du wohlmöglich garnet wissen (wüsste ich ausm kopf auch net unbedingt, weil ichs nie brauche)
der befehl invertiert, also du zeichnest immer zwei linien, eine, die die alte löscht und die neue, die dann sichtbar ist, deshalb auch die ganzen variablen, beim mousdown muss allerdings noch nichts gezeichnet werden 
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 04.06.05 10:35
es geht auch einfacher mit
du musst drei gobale variabel haben
mx,my:Integer;
MausClic:Boolean = False;
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| MouseDown: mx:=x; my:=y; MausClick:=True; form1.canvas.pen.mode := pmNotXor; MouseMOve: if MausClick then begin Form1.Canvas.MoveTo(mx,my); Form1.Canvas.lineto(x,y); mx:=x; my:=y; end; MausUp: MausClick:=False; |
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Kris
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 14.06.05 19:23
hallo,
ich wollte kein neues thema erstellen, denn meine Frage ist wahrscheinlich noch simpler als die Vorheriege, hat aber auch was mit Canvas zu tun. Ich hoffe das ist in Ordnung so
Im Grunde ist mein Problem einen Canvas automatisch anzeigen zu lassen. In meinem Info-Unterricht soll ich einen sehr vereinfachten Berliner S-Bahn-PLan erstellen. So weit so gut. Jedoch ist der Plan erst sichtbar, nachdem ich entweder einen Buttun zuweise und den klicke, oder wenn man auf das Formular (komplimiert) klickt.
Dieses Problem habe ich auch bei einem anderen Projekt. Da handelt es sich jedoch um Labels, deren Caption durch ein vorherieges Edit-Feld zugewiesen bekommen sollen. Das funzt auch erst nach Button-Klick.
Vieleicht gibt es einen Befehl oder eine Einstellung im Objektinspektor
Ein Unit habe ich auch, falls benötigt.
Wäre toll wenn mir jemand helfen könnte.
thx
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Di 14.06.05 20:40
Also - auch nach dreimaligem Durchlesen - blicke ich kein bisschen durch, was du uns versuchst zu erklären.
Erstell' einfach einen neuen Thread (neue Frage, neuer Thread; siehe Richtlinien) und poste dann hier noch den neuen Link zum Thread dazu, falls jemand das hier liest. 
|
|
Kris
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 14.06.05 21:17
 ok ok ...
ich stöber noch ein bisßchen im forum. vielleicht finde ich ja noch was ich suche. Andernfalls schreibe ich das nochmal als neuen thread und versuche mich klarer auszudrücken.
danke trotzt  dem
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 19.06.05 12:59
also ich glaube dein problem ist einfach folgendes:
du hast ein button wenn du drauf klickst wird es erst gezeichnet aber du möchtes es schon früher wann denn genau ?
z.b.
du hast diesen buttont jetzt BitBtn1 gennant ein ereignis zugewiesen
dann kansnt du es direkt unter onShow z.b. zeichnen lassen:
im oi auf onShow genhen und auf onShow geklicken und dort folgendes rein schreiben:
BitBtn1Click(Sender) so rufst du diese procedure gleich auf sobalt das fenster sichtbar gemacht wurde oder du machst es noch später z.b. onActivate(oder so änlich)
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|