Autor Beitrag
Interruptman
Hält's aus hier
Beiträge: 6



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

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. :oops: Dazu kommt noch, dass man nur in der Schule sich mit der Programmierung auseinandersetzen kann. :cry:


Danke fürs helfen im Voraus. :D
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 01.06.05 18:33 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
// onMouseDown Prozedur:
Canvas.MoveTo(x,y);
// onMouseUp
Canvas.LineTo(x,y);

sollte klappen.. viel glück mit deinen lehrern -.-

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Interruptman Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Mi 01.06.05 18:55 
user profile iconInterruptman 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 Threadstarter
Hält's aus hier
Beiträge: 6



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

Ist die Version mit der "aufziehbaren" Linie groß komplizierter?
Oder auch nur 3-4 Zeilen? Wenn ja, dann: HABEN HABEN HABEN :D
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 6



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


Zuletzt bearbeitet von Interruptman am Mi 01.06.05 20:18, insgesamt 1-mal bearbeitet
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: 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. :gruebel:
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 02.06.05 00:09 
man soll pro frage ein thema erstellen ;)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Interruptman Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 02.06.05 15:06 
Okay, hier zeig ich euch jetzt mal, wie es unsere Lehrerin haben wollte:

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

//mousedown
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;

//mousemove
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;

//mouseup
maus := false


Unwesentlich komplizierter also nur... :shock:
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 :wink:

das wichtige daran ist das hier:
ausblenden 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 :wink:
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 04.06.05 10:35 
es geht auch einfacher mit
du musst drei gobale variabel haben
mx,my:Integer;
MausClic:Boolean = False;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
MouseDown:
  mx:=x; my:=y; // Alte Pos Merken
  MausClick:=True;
  form1.canvas.pen.mode := pmNotXor; // zeichnet die Alte line über(geht auch andres aber dann ist es komplizirter)
MouseMOve:
  if MausClick then begin // Aber nur wenn gezeichne werden soll
    Form1.Canvas.MoveTo(mx,my); // Startpos ist die gespeicherte Mauspos
    Form1.Canvas.lineto(x,y); // EndPoszeichnen
    mx:=x; my:=y; 
  end;
MausUp:
  MausClick:=False;

_________________
MFG
Michael Springwald, "kann kein englisch...."
Kris
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: 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



BeitragVerfasst: Di 14.06.05 21:17 
:roll: 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 :D dem
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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...."