Ich hab vor einiger Zeit in der Schule sone Art Mini Paint machen müssen und dachte mir, dass ich das vielleicht auhc mal hier posten könnte. Musste das nur nochma neu coden weil ichs nich vom Schulrechner runterbekommen hab was aber auch ncih weiter schlimm war^^
Is nix besonderes aber als Anfänger (wie ich^^) kann man sich ja ma reinlesen und viellecith kann man den ein oder anderen befehl ja ma gebrauchen ;)
procedure TForm1.Switchcolor; // Wechsel der Stiftfarbe
begin
if BitBtnRot.Enabled = false
then Canvas.Pen.Color := clred
else
if BitBtnGelb.enabled = false
then Canvas.Pen.color := clyellow
else
if BitBtnGruen.enabled = false
then Canvas.Pen.Color := clgreen
else
if BitBtnBlau.Enabled = false
then Canvas.Pen.color := clblue
else
if BitBtnSchwarz.Enabled = false
then Canvas.Pen.Color := clblack;
end;
procedure TForm1.Switchwidth;
begin
if BitBtnSt1.enabled = false
then Canvas.pen.Width := 1
else
if BitBtnSt2.enabled = false
then Canvas.pen.color := 3
else
if BitBtnSt3.enabled = false
then Canvas.pen.Width := 5
else
if BitBtnSt4.enabled = false
then Canvas.Pen.Width := 7;
end;
procedure TForm1.BitBtnPunktClick(Sender: TObject); // Punktbutton wird deaktiviert bzw. aktiviert
begin
BitBtnStrecke.enabled := true;
BitBtnFrei.Enabled := true;
BitBtnPunkt.Enabled := false;
BitBtnEllipse.Enabled := true;
BitBtnRechteck.Enabled := true;
BitBtnEraser.enabled := true;
Panel2.Caption := (' Zeichenart: Punkt '); // Meldung welcher Zeichentyp aktiviert ist
end;
procedure TForm1.BitBtnFreiClick(Sender: TObject); // Freihandbutton wird deaktiviert bzw. aktiviert
begin
BitBtnStrecke.enabled := true;
BitBtnFrei.Enabled := false;
BitBtnPunkt.Enabled := true;
BitBtnEllipse.Enabled := true;
BitBtnRechteck.Enabled := true;
BitBtnEraser.enabled := true;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); // Bei Bewegung der Maus
begin
if (Mausgedrueckt)
and (BitBtnStrecke.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
if (Mausgedrueckt)
and (BitBtnRechteck.Enabled = false)
then
begin
Canvas.Brush.Style := bsclear;
Canvas.Pen.Mode := pmNotXor;
Canvas.Rectangle(XAnfang,YAnfang,XEnde,YEnde);
Canvas.MoveTo(XAnfang,YAnfang);
Canvas.Rectangle(XAnfang,YAnfang,XEnde,YEnde);
XEnde := x;
YEnde := y;
end
else
if (Mausgedrueckt)
and (BitBtnEllipse.enabled = false)
then
begin
Canvas.Brush.Style := bsclear;
Canvas.Pen.Mode := pmNotXor;
Canvas.Ellipse(XAnfang,YAnfang,XEnde,YEnde);
Canvas.MoveTo(XAnfang,YAnfang);
Canvas.Ellipse(XAnfang,YAnfang,XEnde,YEnde);
XEnde := x;
YEnde := y;
end
else
if (Mausgedrueckt)
and (BitBtnEraser.enabled = false)
then
begin
Canvas.LineTo(X,Y);
end
else
if Mausgedrueckt
then
begin
Canvas.LineTo(X,Y);
end;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); // Betätigung der linken Maustaste (drücken)
begin
if BitBtnStrecke.enabled = false
then
begin
Mausgedrueckt := true;
XAnfang := x;
YAnfang := y;
XEnde := x;
YEnde := y;
Canvas.MoveTo(XAnfang,YAnfang);
end
else
if (BitBtnFrei.Enabled = false)
then
begin
Mausgedrueckt := true;
canvas.MoveTo(X,Y);
end
else
if BitBtnRechteck.enabled = false
then
begin
Mausgedrueckt := true;
XAnfang := x;
YAnfang := y;
XEnde := x;
YEnde := y;
Canvas.MoveTo(XAnfang,YAnfang);
end
else
if BitBtnEraser.enabled = false
then
begin
Mausgedrueckt := true;
canvas.Pen.Mode := pmCopy;
Canvas.Pen.Color := clwhite;
Canvas.MoveTo(X,Y);
end
else
if BitBtnEllipse.enabled = false
then
begin
Mausgedrueckt := true;
XAnfang := x;
YAnfang := y;
XEnde := x;
YEnde := y;
Canvas.MoveTo(XAnfang,YAnfang);
end
else
if BitBtnPunkt.Enabled = false
then
begin
Canvas.Ellipse(x-1,y-1,x+1,y+1)
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); // Betätigung der linken Maustaste (loslassen)
begin
if BitBtnFrei.Enabled = false
then
begin
canvas.Pen.mode := pmcopy;
Mausgedrueckt := false;
end
else
if BitBtnPunkt.enabled = false
then
begin
canvas.pen.mode := pmcopy;
Canvas.Ellipse(x-1,y-1,x+1,y+1);
end
else
if BitBtnStrecke.Enabled = false
then
begin
canvas.Pen.Mode := pmcopy;
Canvas.MoveTo(XAnfang,YAnfang);
canvas.LineTo(XEnde,YEnde);
Mausgedrueckt := false;
end
else
if BitBtnRechteck.Enabled = false
then
begin
canvas.Pen.Mode := pmcopy;
Canvas.MoveTo(XAnfang,YAnfang);
Canvas.Rectangle(XAnfang,YAnfang,XEnde,YEnde);
Mausgedrueckt := false;
end
else
if BitBtnEllipse.enabled = false
then
begin
canvas.Pen.Mode := pmcopy;
Canvas.MoveTo(XAnfang,YAnfang);
Canvas.Ellipse(XAnfang,YAnfang,XEnde,YEnde);
Mausgedrueckt := false;
end
else
if BitBtnEraser.enabled = false
then
begin
canvas.Pen.Mode := pmcopy;
Mausgedrueckt := false;
Switchcolor;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Switchcolor;
if BitBtnFrei.enabled = false
then
begin
Panel2.Caption := (' Zeichenart: Freihandzeichnen '); // Standardmeldung bei Programmstart
end
else
begin
Panel2.Caption := (' Zeichenart: Punkt ');
end;
end;
procedure TForm1.BitBtnStreckeClick(Sender: TObject); // Streckebutton wird deaktiviert bzw. aktiviert
begin
BitBtnStrecke.enabled := false;
BitBtnFrei.Enabled := true;
BitBtnPunkt.Enabled := true;
BitBtnEllipse.Enabled := true;
BitBtnRechteck.Enabled := true;
BitBtnEraser.enabled := true;
Panel2.Caption := (' Zeichenart: Strecke '); // Meldung welcher Zeichentyp aktiviert ist
end;
Könnt mich gerne kritisieren, aber dann bitte auch mit ner vernünftigen Begründung und nem neuen Lösungsvorschlag pls!
Auf Posts wie:"Du bist voll schlecht!" und "Boah, ist das billig!" Kann ich verzichten!
mfg
Barny
20.06.2010, 20:46
morph.
Ich muss sagen, mir gefällt dein genereller Programmierstil und das Programm sieht eigentlich ganz nett aus, was ich aber am Sourcecode noch zu bemängeln habe, bzw. was ich dir nur empfehlen kann ist, den Buttons richtige Namen geben und den Sourcecode mehr zu kommentieren, wenn man ihn nicht selber geschrieben hat oder ihn nach langer Zeit wieder liest, könnte das Probleme bereiten, besonders wenn das Programm größer wird.
Ansonsten gefällt es mir wie gesagt gut.
20.06.2010, 20:50
Zylasty
Uj!
War das erste was ich mir gedacht habe. Wieviel Code und Mathematische Gedanken hinter so einem "kleinem", "banalem" Progrämmchen stecken. Ich bin anfänger in C# und hab mir den Code mal angesehen.
Respekt ^^
Position des Mauszeiger immer wieder auslesen lassen und wenn die Taste gedrückt ist dann an der Position zeichnen lassen. Oder habe ich es Falsch verstanden?
Ich sehe da kommt auf mich noch viel Arbeit zu :P
20.06.2010, 20:58
Barny
Danke für eure Kommentare ;)
@morph.: Mit den Namen hast du eigentlich schon Recht, aber hierbei kam ich damit eindeutig besser klar! Viellecith sollte ich mir aber trotzdem angewöhnen die viellecith hinterher wieder umzubennen ( was aber ziemlich langwierig werden könnte^^)
@Zylasty:
Das alles war mehr Schreibarbeit und wenn man sich vorher son kleinen Plan erstellt hat behält man auch leicht den Durchblick und is auch nichmehr so schwer ;) Aber das Prinzip hast du schon richtig verstanden ;)
mfg
Barny
21.06.2010, 05:58
Tido
Willst du das Projekt noch erweitern, oder willst du es so lassen? Gab i-wo noch Funktionen, mit denen man Kontrast etc. einstellen konnte...
In etwas so:
Code:
//Kontrast
Rotwert = Rotwert + x *(Rotwert-127)
Grünwert = Grünwert + x *(Grünwert -127)
Blauwert = Blauwert + x *(Blauwert-127)
oder
Code:
//Sättigung
value = (rot + grün + blau) / 3
rot = rot + x * (rot - value)
grün = grün + x * (grün - value)
blau = blau + x * (blau -value)
Kannste ja vielleicht noch mir einbauen... Zum schnellen aufhellen sicherlich besser, als erst Photoshop zu starten :D Wenn du dann noch eine Umwandlung mit reinbaust, die von *.bmp zu *.jp/e/g Datein wandelt, dann wärs eigentlich echt nice. Würde es dann sicher auch oft nutzen^^
MfG
21.06.2010, 06:24
Sveiven
Wie gesagt,
dass solltest du auf jeden Fall "weiterentwickeln" (-:
21.06.2010, 06:49
Saedelaere
Zum "Programmierstil" / Lesbarkeit des Codes kann ich eigentlich nur ein "Mangelhaft" vergeben :D
Da wären:
* Groß & Kleinschreibung
* oft keine Einrückung
* und vor allem dieses grauehnhaft fehlerhafte Einrücken
Ein Beispiel gut lesbaren Codes wäre z.b:
Code:
if true then
begin
end else
begin
if (I = 0) then
begin
end else
begin
while false do
begin
end;
end;
I := 0;
end;
Edit: Ahso bei boolschen Konditionen nie auf true oder false prüfen. Immer in der Art:
Code:
if (bBoolean) then
begin
// Wert ist true
end;
if (not bBoolean) then
begin
// Wert ist false
end;
21.06.2010, 08:22
Barny
@DeR_EvO: Thx, werde ich die Tage mal integrieren ;)
@Saedelaere: Was den meisten Teil meines Quellcodes anbelangt hast du glaube ich Recht^^ der Code für die Schule sah bisschen ordentlicher aus aber hatte nichtmehr wirklich bock das alles so zu ordnen :D Aber so hasse Recht ;)