Entwickler-Ecke
Sonstiges (Delphi) - Farbe des Zeichenstiftes ändern
Chryzler - So 13.05.07 15:45
Titel: Farbe des Zeichenstiftes ändern
Hi,
Summerjam hat folgendes Problem:
| Zitat: |
ich programmier paint nach..n der mausmove procedure hab ich im gesagt das er die gummilinien grau malen soll
nun soll er aber danach in der mausup porcedure wieder in anderen farben malen
das amcht er aber net |
Hat jemand ne Lösung für dieses Problem?
EDIT: Summerjam, könntest du hier bitte deinen gesamten Quelltext posten, ansonsten wirds sehr schwierig werden, dir zu helfen.
jakobwenzel - So 13.05.07 15:54
Ich würd sagen, dass er des net macht, weil du das nicht so programmiert hast. Im Mouseup einfach wieder die Farbe setzen...
Summerjam - So 13.05.07 15:59
Titel: .
udn wie geht das??
Chryzler - So 13.05.07 16:02
Titel: Re: Farbe des Zeichenstiftes ändern
Chryzler hat folgendes geschrieben: |
| Summerjam, könntest du hier bitte deinen gesamten Quelltext posten, ansonsten wirds sehr schwierig werden, dir zu helfen. |
jakobwenzel - So 13.05.07 16:04
Du hasts doch anscheinend schonmal geschafft, die Farbe zu ändern. Da wirst du es doch nochmal schaffen!
JayEff - So 13.05.07 16:07
Er hat vorher erst mehrfach beschrieben, dass er mit den Nerven am Ende ist, und das kann ich ihm gut nach empfinden, hatte ich doch selbst ab und zu solche Situationen :autsch:
Summerjam, wie schon gesagt wurde, bitte gib uns erstmal größere Abschnitte von deinem Quelltext. Bitte schließe ihn gleich so: <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG0250c4b66122700e608682c213068aec}</span></span> mit in Delphi-Tags ein.
Ich bin sicher, wir werden in weniger als einer halben Stunde eine Lösung für dich parat haben ;)
Summerjam - So 13.05.07 16:23
Titel: geht net anders
also das ist mein quelltext...
soo.
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: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| procedure TPaint.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Mausgedrueckt:=true; Xanfang:=X; Yanfang:=Y; Xende:=X; Yende:=Y; Canvas.MoveTo (Xanfang, Yanfang) end;
procedure TPaint.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Mausgedrueckt=true then if BitBTnFrei.Enabled=false then Canvas.LineTo(X,Y) else if BitBtnLinie.Enabled=false then begin Canvas.Pen.Mode:= pmNotXor; Canvas.MoveTo(Xanfang, Yanfang); Canvas.LineTo(Xende, Yende); Canvas.MoveTo(Xanfang, Yanfang); Canvas.LineTo(X,Y); Xende:=X; Yende:=Y; end else begin if BitBtnRechteck.Enabled=false then begin Canvas.Pen.Mode:= pmnotxor; Canvas.MoveTo(Xanfang,Yanfang); Canvas.Rectangle(Xanfang,Yanfang,Xende,YEnde); canvas.MoveTo(XAnfang,YAnfang); Canvas.Rectangle(x,y,XAnfang,YAnfang); XEnde:= X; YEnde:= Y; end else if BitBtnEllipse.Enabled=false then begin Canvas.Pen.Mode:= pmnotxor; Canvas.moveTo(Xanfang,Yanfang); Canvas.Ellipse(Xanfang,Yanfang,Xende,YEnde); canvas.MoveTo(XAnfang,YAnfang); Canvas.Ellipse(x,y,XAnfang,YAnfang); XEnde:= X; YEnde:= Y; end else if Radiergummi.Enabled=false then Canvas.Pen.Color:=clWhite end end; |
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
Moderiert von
Christian S.: Beiträge zusammengefasst
JayEff - So 13.05.07 16:29
JayEff hat folgendes geschrieben: |
| Bitte schließe ihn gleich so: <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG325c31f0e0126a2d1e861e37051ecec7}</span></span> mit in Delphi-Tags ein. |
Bitte ändere das doch einfach, in dem du die

-Taste (bzw. für den Inline-Editor, falls im Profil AJAX aktiviert ist, die

-Taste) rechts oben neben deinem Beitrag benutzt.
Ausserdem: Wir versuchen ein bisschen Übersicht zu waren, darum bitte keine Doppelposts, sondern den Edit-Button benutzen ;) Auch wenn das ein Moderator sicher gleich für dich zusammen fasst ;)
Der Text ist so etwas unleserlich, darum kann ich auch grad nicht direkt einen Fehler erkennen ... Ich vermute aber, dass du mit den if-then-else Abfragen etwas falsch gemacht hast.
Summerjam - So 13.05.07 16:32
Titel: .
wie soll ich das den sonst machen?
JayEff - So 13.05.07 16:40
Ich habs mal mit dem Delphi-SourceFormatter (Zu finden unter
DELFOREXP ) formatiert:
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: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| If Mausgedrueckt = true Then If BitBTnFrei.Enabled = false Then Canvas.LineTo(X, Y) Else If BitBtnLinie.Enabled = false Then Begin Canvas.Pen.Mode := pmNotXor; Canvas.MoveTo(Xanfang, Yanfang); Canvas.LineTo(Xende, Yende); Canvas.MoveTo(Xanfang, Yanfang); Canvas.LineTo(X, Y); Xende := X; Yende := Y; End Else Begin If BitBtnRechteck.Enabled = false Then Begin Canvas.Pen.Mode := pmnotxor; Canvas.MoveTo(Xanfang, Yanfang); Canvas.Rectangle(Xanfang, Yanfang, Xende, YEnde); canvas.MoveTo(XAnfang, YAnfang); Canvas.Rectangle(x, y, XAnfang, YAnfang); XEnde := X; YEnde := Y; End Else If BitBtnEllipse.Enabled = false Then Begin Canvas.Pen.Mode := pmnotxor; Canvas.moveTo(Xanfang, Yanfang); Canvas.Ellipse(Xanfang, Yanfang, Xende, YEnde); canvas.MoveTo(XAnfang, YAnfang); Canvas.Ellipse(x, y, XAnfang, YAnfang); XEnde := X; YEnde := Y; End Else If Radiergummi.Enabled = false Then Canvas.Pen.Color := clWhite End; |
Ich würde sagen, dass da einige Codeteile in den falschen Elses drin sind bzw. zu wenig Ends eingebaut wurden... :gruebel:
Edit: Lade bitte mal dein ganzes Projekt als zip datei hoch. Das müsste ganz einfach per Anhang an deinen Post gehen...
Summerjam - So 13.05.07 16:42
Titel: ,
hmm. ja ich kannd as net so beurteilen...
Chryzler - So 13.05.07 16:43
Und ich war wieder so dumm und hab den Source von Hand formattiert. Da kann einiges nicht stimmen:
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: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57:
| procedure TPaint.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Mausgedrueckt := true; Xanfang := X; Yanfang := Y; Xende := X; Yende := Y; Canvas.MoveTo(Xanfang, Yanfang); end;
procedure TPaint.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Mausgedrueckt = true then if BitBTnFrei.Enabled = false then Canvas.LineTo(X,Y) else if BitBtnLinie.Enabled = false then begin Canvas.Pen.Mode:= pmNotXor; Canvas.MoveTo(Xanfang, Yanfang); Canvas.LineTo(Xende, Yende); Canvas.MoveTo(Xanfang, Yanfang); Canvas.LineTo(X,Y); Xende := X; Yende := Y; end else begin if BitBtnRechteck.Enabled = false then begin Canvas.Pen.Mode:= pmnotxor; Canvas.MoveTo(Xanfang,Yanfang); Canvas.Rectangle(Xanfang,Yanfang,Xende,YEnde); Canvas.MoveTo(XAnfang,YAnfang); Canvas.Rectangle(x,y,XAnfang,YAnfang); XEnde := X; YEnde := Y; end; else if BitBtnEllipse.Enabled = false then begin Canvas.Pen.Mode:= pmnotxor; Canvas.moveTo(Xanfang,Yanfang); Canvas.Ellipse(Xanfang,Yanfang,Xende,YEnde); Canvas.MoveTo(XAnfang,YAnfang); Canvas.Ellipse(x,y,XAnfang,YAnfang); XEnde := X; YEnde := Y; end else if Radiergummi.Enabled = false then Canvas.Pen.Color := clWhite; end end; |
JayEff - So 13.05.07 16:45
Drum hab ich sie (sry wegen "er" :oops: ) auch gebeten, das Projekt an zuhängen. Ich glaub, ohne kommen wir nicht wirklich weiter. Ich glaube aber, dass da ein Begin zu viel ist. Ich markiere das, welches ich meine, mal in meinem vorigen Post...
Summerjam - So 13.05.07 17:00
okay wir machen das jetzt anders... aknn jemand in diesem programm die funktion frei zeichenn einsetzen udn das er beim zeihen der klinie die noch grau malt?
Chryzler - So 13.05.07 17:12
Wie wäre es, wenn du versuchst die Funktionen selbst zu schreiben, und wenn du ein Problem hast und einen Tipp brauchst, helfen wir dir gerne weiter.
Summerjam - So 13.05.07 17:12
Titel: .
und könnt ihr das?
JayEff - So 13.05.07 17:13
Das ... hast du nicht selbst geschrieben, oder? :shock: Nicht schlecht, das.
Also normalerweise liefern dir die Wenigsten hier fertigen Quelltext, einfach, weil wir wollen, dass du selbst etwas lernst.
Normalerweise läuft das, wie Chryzler geschrieben hat: Du versuchst es, und wenns nicht klappt, versuchen wir raus zufinden, was du falsch gemacht hast ;)
Blöd nur, dass ich jetzt erstmal eine Weile weg muss :( Aber wir haben hier sehr viele kompetente Menschen, die dir sicher helfen werden ;)
Summerjam - So 13.05.07 17:16
das könnt ihr mir jetzt net antun..ich habs versucht..ich weiß net wie das geht.. wie sagt man delphi das man frei amlen mlöchte...bitte helft mir..ich verzweifle
Chryzler - So 13.05.07 17:23
JayEff hat folgendes geschrieben: |
| Das ... hast du nicht selbst geschrieben, oder? :shock: Nicht schlecht, das. |
Das glaube ich eher weniger. Graphex ist ein Beispielprogramm von Borland (BDS\3.0\Demos\DelphiWin32\VCLWin32\Doc\Graphex). :rofl:
Summerjam hat folgendes geschrieben: |
| das könnt ihr mir jetzt net antun..ich habs versucht..ich weiß net wie das geht.. wie sagt man delphi das man frei amlen mlöchte...bitte helft mir..ich verzweifle |
Kannst du dich nicht einmal konkret ausdrücken? Sag, was genau dein Programm machen soll, dann sehen wir weiter.
Summerjam - So 13.05.07 17:26
in dem programm soll sämtliche dateien wie bei paint vorhanden sein.. also man muss frei zeichen könne, rechtecke, linien und kriese zeichen, farbe ausswaählen und gefüllt nicht gefüllt flächen haben..mir fehlt jetzt die das frei zeichen.. udn das wenn er die linine zieht das die dann garu werden.. und nein ich ahbe es net geschreiben..hat ein freudngeschrieben der auch hier im forum ist aber jetzt im urlaub
Chryzler - So 13.05.07 17:33
Summerjam hat folgendes geschrieben: |
| in dem programm soll sämtliche dateien wie bei paint vorhanden sein.. also man muss frei zeichen könne, rechtecke, linien und kriese zeichen, farbe ausswaählen und gefüllt nicht gefüllt flächen haben..mir fehlt jetzt die das frei zeichen.. udn das wenn er die linine zieht das die dann garu werden.. und nein ich ahbe es net geschreiben..hat ein freudngeschrieben der auch hier im forum ist aber jetzt im urlaub |
Frei zeichnen ist eigentlich ganz einfach:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TPaint.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Canvas.MoveTo(X, Y); end;
procedure TPaint.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then Canvas.LineTo(X, Y); end; |
Sollte funktionieren.
Summerjam hat folgendes geschrieben: |
| und nein ich ahbe es net geschreiben..hat ein freudngeschrieben der auch hier im forum ist aber jetzt im urlaub |
Chryzler hat folgendes geschrieben: |
| Graphex ist ein Beispielprogramm von Borland (BDS\3.0\Demos\DelphiWin32\VCLWin32\Doc\Graphex |
:roll:
Summerjam - So 13.05.07 17:42
Titel: .
ja udn deswegen kriegt der noch mal bescheid...
ähmm.ja weiß jemadn den noch wie das mit dem grau geht während des zeichnens
Moderiert von
UGrohne: Beleidigung entfernt und Beiträge zusammengefasst.
Marco D. - So 13.05.07 19:17
Schaust du mal, was Chryzler gepostet hat? :roll:
Außerdem: Hat dein "Frei zeichnen" was mit "die Linie ziehen" zu tun? Ich habe immer noch nicht verstanden, was genau erreicht werden soll.
Summerjam - Mo 14.05.07 08:13
Titel: .
nein das freizeichen hat nichts mit dem linien ziehen zu tun. Wenn man ein rechteck zieht oder eine linie oder eine Ellipse soll es beim zeichen grau gekenntzeichnet sein und wenn man nicht mehr auf die maus drückt in der gewünschten Frabe erscheinen.
Chryzler - Mo 14.05.07 14:39
Titel: Re: .
Summerjam hat folgendes geschrieben: |
| nein das freizeichen hat nichts mit dem linien ziehen zu tun. Wenn man ein rechteck zieht oder eine linie oder eine Ellipse soll es beim zeichen grau gekenntzeichnet sein und wenn man nicht mehr auf die maus drückt in der gewünschten Frabe erscheinen. |
Achso.
Nun, da bleibt dir nichts anderes übrig, als wenn die Maustaste wieder losgelassen wird, das Rechteck oder die Linie nocheinmal mit schwarz drübermalen.
Also sobald die Maustaste gedrückt wird musst du die Farbe auf Grau setzen und eben das Rechteck zeichnen. Wenn die Maustaste losgelassen wird, musst du nochmal das selbe Rechteck zeichnen, diesmal jedoch mit Schwarz. D.h. du musst dir die X- und Y-Koordinaten intern merken (hast du ja glaub ich bereits in xstart und ystart).
Marco D. - Mo 14.05.07 15:14
Chryzler hat folgendes geschrieben: |
[
Nun, da bleibt dir nichts anderes übrig, als wenn die Maustaste wieder losgelassen wird, das Rechteck oder die Linie nocheinmal mit schwarz drübermalen.
Also sobald die Maustaste gedrückt wird musst du die Farbe auf Grau setzen und eben das Rechteck zeichnen. Wenn die Maustaste losgelassen wird, musst du nochmal das selbe Rechteck zeichnen, diesmal jedoch mit Schwarz. D.h. du musst dir die X- und Y-Koordinaten intern merken (hast du ja glaub ich bereits in xstart und ystart). |
Grundsätzlich richtig. Aber:
Was ist, wenn man das Rechteck erst zu groß wählt und die Maus dann wieder quasi zurück bewegt?
Ich selber weiß nicht wirklich, wie man so etwas umsetzt.
ZeitGeist87 - Mo 14.05.07 15:38
also is ganz einfach:
2 Privat-Variablen deklarieren:
Delphi-Quelltext
1: 2: 3: 4: 5:
| private myRect: TRect; Farbe: TColor; public ... |
Über den Farbeauswahldialog, weißt du einfach über
Farbe:= Farbbox.color die gewünschte Farbe zu.
Im OnMouseDown-Ereignis setzt du über
Image.Pen.Color:= clSilver die Farbe deines Zeichenstiftes auf Silber/Grau.
Am Schluss in der OnMouseMove-Prozedure deklarierst du folgendes:
Delphi-Quelltext
1: 2: 3: 4:
| myRect.Topleft.x:= TopLeft.x; myRect.Topleft.y:= TopLeft.y; myRect.BottomRight.x:= BottomRight.x; myRect.BottomRight.y:= BottomRight.y; |
Dann gibts da ne Drawing-Prozedure
Da baust du einen Case auf
drawingtool ein:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Image.Canvas.Pen.Color:= Farbe;
case drawingtool of dtRectangle: Image.Canvas.Rectangle(myRect); dtEllipse: Image.Canvas.Ellipse(myRect); dtRoundedRect: Image.Canvas.RoundedRect(x1, y1, x2, y2, x3, y3); end; |
LG
Stefan
PS Das eine *reck*ack hab ich gelesen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!