Autor Beitrag
Blacky06
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 29.12.07 13:13 
moin,
ich hab die Aufgabe während den ferien ein Zeichenprogramm zu schreiben, allerdings fehlt mir dazu noch ein wenig
das Wissen dazu :P

Ich weiß zwar wie ich es programmiere, dass ich bspw. ne Linie oder dergleichen mit der Maus zeichnen kann, allerdings wäre mit dieser Methode immer nur eine Pinseloption möglich.

Ich möchte also, dass bei einem Klick auf den entsprechenden Button, die zugehörige Pinseloption ausgewählt wird, in dem Quellcode von einem ähnliche Programm habe ich gesehen, dass dort scheinbar eine "case" Funktion verwendet wird, allerdings habe ich keine Ahnung wie man eine solche verwendet :(
ace1905
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Sa 29.12.07 14:17 
case trägt nicht unbedingt dazu bei, dass dein programm malen kann, es ist aber ne schöne methode um deine klicks auf die buttons zu verwalten
ich würd sagen du guckst erstmal bei google oder so unst informierst dich wie die case-anweisung funktioniert.
im prinzip kannst du dir das schnell aneignen.
was willst du denn mit deinen buttons verwalten? ich würd dir erstmal die pinseldicke mit

image1.canvas.pen.width

empfehlen. wenn du noch nicht weißt wie du deine maus zu nem kleinen malstift verwandeln kannst dann solltest du dich mit den ereignissen OnMouseDown, OnMouseMove und OnMouseUp beschäftigen. wenn du das verstanden hast kannst du ganz einfach ein freihand-zeichnen erstellen. ;)

hoffe ich konnte dir ein bisschen weiterhelfen :-P


Edit: hab deinen beitrag garnicht richtig gelesen :-P sry dass ich jetz nochmal sachen geschrieben hab, die du schon weißt :oops:
Blacky06 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 29.12.07 14:39 
ja ich hab mich vielleicht etwas ungeschickt ausgedrückt, mir ist schon klar, dass ich da ein image draufpacken muss etc.,

Mein Problem ist jedoch, wenn ich mit OnMouseDown / OnMouseUp arbeiten will, muss das doch direkt beim image eingestellt werden.
Wenn ich jetzt aber bei dem Image unter Events, bei OnMouseDown/OnMouseUp irgendwas eintrage, also bspw MoveTo und LineTo,
dann steht das ja FEST da drinne. Wie kann ich jetzt machen, dass ich bspw nach Klick auf einen Button, ein Rechteck oder irgendetwas anderes Zeichnen kann?
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Sa 29.12.07 15:09 
user profile iconBlacky06 hat folgendes geschrieben:
Wie kann ich jetzt machen, dass ich bspw nach Klick auf einen Button, ein Rechteck oder irgendetwas anderes Zeichnen kann?

Nimm eine globale Variable und setze sie bei jedem Button-Klick auf einen entsprechenden Wert (Rechteck=1, Linie=2 usw.).
In den Maus-Ereignissen kannst Du dann diese Variable mit case auswerten und das Gewünschte zeichnen.

ub60
Blacky06 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 30.12.07 15:18 
okay vielen dank, der Tipp mit der globalen Variable war hilfreich, nun stehe ich allerdings vor dem nächsten Problem :oops:

ich möchte dass man beim Zeichnen (während man also die Linke Maustaste gedrückt hält), die Linie oder was man auch immer zeichnet, temporär dargestellt wird - also wie in Paint.

Ich wollte das direkt beim Image unter Events und OnMouseMove einstellten, hier hab ich mal den Ausschnitt aus dem Code :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
begin
  
if ssLeft in Shift then begin
    if pinsel=1 then begin
      with form1.Image1.canvas do begin
      MoveTo(x1,y1);
      LineTo(x,y);
      end    ;
    end
end

end;


nun hab ich jedoch das Problem, dass die Linie nicht nur temporär dargestellt wird, sondern jedesmal auch tatsächlich gezeichnet wird.
Ich möchte jedoch natürlich, dass die Linie erst gezeichnet wird, wenn ich die Maustaste auch loslasse - vorher soll sie eben nur temporär erscheinen.

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Leuchtturm
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: So 30.12.07 15:29 
dafür würde ich ein Image dynamisch erstellen und dann dort drauf zeichnen und wenn man dann die Maustaste loslässt auf das Image darunter übertragen und das andere Image löschen :wink:

_________________
Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
ace1905
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: So 30.12.07 15:38 
um das zu realisieren musst du dich mal mit den methoden von "pen" auseinandersetzen.

also es gibt verschiedene modes des pens. die kann man so abrufen und einstellen:
ausblenden Delphi-Quelltext
1:
2:
image1.Canvas.pen.Mode := pmCopy;                                            
image1.Canvas.pen.Mode := pmNotXor;


du brauchst pmNotXor um deine linie temporär zu ziehen.

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Blacky06 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 30.12.07 15:45 
ahja, und wo genau muss ich das image1.Canvas.pen.Mode := pmNotXor; hinsetzen? (ich bitte um verzeihung für meine absolute unswissenheit :cry: )

ich hab das jetzt direkt am anfang hingesetzt, es hat sich auch tatsächlich was verändert - die gezeichneten Linien sind jetzt ein wenig "durchlöchert" :D , aber das Problem is ncoh das selbe
Leuchtturm
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: So 30.12.07 15:49 
Schonmal probiert?
Wahrscheinlich musst du es setzen bevor du es temporär zeichnen willst

_________________
Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
ace1905
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: So 30.12.07 16:15 
wenn du nur frei hand zeichnen willst dann sollte der mode auf pmCopy stehen.
wenn du aber solche linien machen willst oder andere sachen wie rechtecke dann musst du auf NotXor umstellen.
das heißt du musst das bei deiner variable festlegen, die du für die buttons nimmst.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if (Grafik = 1Then
Image1.Canvas.Pen.Mode := pmCopy
else
Image1.Canvas.Pen.Mode := pmNotXor;


wie du das jetz mit der linie verbindest dass kann ich dir nicht so genau erklären deshalb überlass ich das lieber jemandem der auch wirklich alles rafft was er schreibt.
ich kann es zwar programmieren aber ich kanns net erklären. ;)

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt