Beispiel Projekte für Anfänger?

Für Dinge zum Forum, Kritik, Verbesserungsvorschläge, Umfragen und ähnliches.
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Beispiel Projekte für Anfänger?

Beitrag von pluto »

Es scheitert meistens nicht an den Ankündigungen, sondern an der (längerfristigen) Durchführung.

Da gebe ich dir recht. Ankündigen ist leichter, als die Umsetzung von dem was angekündigt wird. Darum wollte ich auch ganz einfach da ran gehen.

Für viele von uns, sind kleine Beispiel Projekte, wie ich sie mir vorstelle, überhaupt kein Problem. Vielleicht sitzen sie wenn überhaupt maximal 30 bis 60 Minuten daran.
Wenn man das jetzt umrechnet auf ein Monat und sagt, pro Monat ein Beispiel Projekt, dürften das für viele von uns umsetzbar sein oder? Keiner kann behaupten, er hätte keine Zeit dazu. Eher keine Lust oder Interesse trifft es eher.

Es geht auch nicht darum ein Beispiel Projekt nach den anderen Fertig zu stellen, sondern, es geht darum gute Beispiel Projekte zu schaffen. Das Lazarus Projekt ist eine sache, eine andere Sache ist es, dass Projekt kurz zu beschreiben, Stichwörter zu liefern und soweiter.

Es könnten auch größere Projekte später hinzu kommen, aber die Betonung liegt eindeutig auf kleinere Projekte und das Ziel ist es auch nicht, was zum Ausdrucken zu haben. Das wäre wieder zu Aufwendig. Wenn ich Absetzte schreibe, müssen die auch zu einander passen. Wenn ich sie nach und nach schreibe, könnte es sein, dass sie nicht mehr auf einander abgestimmt sind.

Nun mal eine andere Frage: Wer würde sich von den, die sich dazu in der Lage sehen, überhaupt Mitmachen wollen? Ich werde mal ein oder zwei Beispiel Projekte einbringen um zu Zeigen, wie ich sie mir vorstelle.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Beispiel Projekte für Anfänger?

Beitrag von pluto »

So, einen sehr einfachen Taschenrechner habe ich. Er ist zwar nicht unbedingt Perfekt. Aber zum Zeigen, dürfte es reichen. Werde ich nachher noch hochladen.
Vieles könnte anders gemacht werden, aber dazu ist das Projekt ja da. Es soll ein Weg von vielen Wegen zeigen.

Wer sich mit Mathe besser auskennt, könnte jetzt auch noch gewisse Regeln einbauen. Anderen Seits, wenn ich es machen würde, wäre kein Anreiz mehr da, für einen Anfänger das Projekt selbst zu erweitern, oder? Z.B. könnte man Kettenaufgaben einfügen, Punkt vor Strichrechnung, Klammern, Kommazahlen, das letzte Ergebnis könnte abgespeichert werden (mbr) und soweiter.

Das Projekt soll "nur" eine Grundlage liefern.
MFG
Michael Springwald

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Beispiel Projekte für Anfänger?

Beitrag von af0815 »

Es geht nicht nur um das Projekt, sondern auch um die Erklärung dazu. Auch um den Aufbau von einfach zu komplex.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Beispiel Projekte für Anfänger?

Beitrag von pluto »

Ja. Es gibt nur eine "Hauptmethode" und die lässt sich gut beschreiben. Leider ist das Projekt noch nicht ganz Fertig.
Es gibt immer viele Wege, die zum Ziel führen, ich zeige nur einen, sehr einfachen. Vielleicht geht es noch einfacher? Ob der Code von unten so bleiben wird, weiß ich noch nicht. Vielleicht komme ich heute oder morgen dazu, daran weiter zu machen. Aber so in der Art habe ich es mir vorgestellt.
Eventuell kann ich noch die Komponenten bessere Namen geben. Alle BitBtn sind z.b. mit einem Event verbunden: BitBtn10Click.

Code: Alles auswählen

 
procedure TForm1.BitBtn10Click(Sender: TObject);
var
  BitBtn:TBitBtn;
  ch:char;
  x:Integer;
  NoAdd:Boolean;
  S:String;
  N1,N2:Integer;
begin
  BitBtn:=Sender as TBitBtn;
  // Wurde bereits ein Erbgniss ausgeben, einfach wieder auf Anfang setzten
  if pos('=',Edit1.Text) > 0 then Edit1.Text:='0';
  {
    Um die Abfragen leichter zu machen, wurde die Tag Eigenschaft verwendet.
    Diese Eigenschaft haben die meisten Komponenten. So können wir ganz einfach
    sagen: Wenn die Eigenschaft von Tag bei der Angeklickte Komponente
    unter oder gleich 9 ist, hinzufügen zum Edit
  }

  if (Edit1.Text <> '') and (BitBtn.Tag <=9) then begin
    // Wenn der Inhalt nur eine 0 ist, einfach setzten
    if Edit1.Text = '0' then
      edit1.Text:=IntTostr(BitBtn.Tag)
    else // sonst hinzufügen
      edit1.Text:=edit1.Text+IntTostr(BitBtn.Tag);
  end;
 
  // Vielleicht wurde ein Operator-Button gedrückt?
  ch:=#0;
  case BitBtn.Tag of
    10:ch:='+'; // +
    11:ch:='-'; // -
    12:ch:='*'; // *
    13:ch:='/'; // /
    14:ch:='='; // =
    15:ch:=','; // ,
    16:begin
      {
        Hier wird das letzte Zeichen gelöscht, indem vom 1 bis zum gelöschten
        Zeichen alles Kopiert wird.
      }

      if Length(Edit1.Text)-1 >=1 then
        Edit1.Text:=Copy(Edit1.Text,1,Length(Edit1.Text)-1)
      else
        Edit1.Text:='0';
    end;
    // Hier wird die Eingabe auf 0 zurück gesetzt
    17: begin edit1.Text:='0'; ch:=#0end;
  end; // case
 
  if (ch <> #0) then begin
    NoAdd:=False;
    // Hier wird geprüft, ob es den Operator schon gibt, Kettenaufgaben werden noch nicht unterstüzt
    for x:=1 to Length(edit1.text) do begin
      if (edit1.Text[x] in ['-','+','*','/']) then begin
        NoAdd:=True;
        break;
      end;
    end; // for x
 
    if ((ch ='=') and (NoAdd)) or ((ch <> '=') and (not NoAdd))  then
      edit1.Text:=edit1.Text+ch;
 
    if ch = '=' then begin
      S:=''; N1:=0; N2:=0;
      for x:=1 to Length(edit1.text) do begin
 
        if Edit1.Text[x] <> '=' then begin
          if (Edit1.Text[x] in ['-','+','*','/']) then begin
            N1:=StrToInt(S);
            ch:=Edit1.Text[x];
            s:='';
          end
          else
            S:=s+Edit1.Text[x];
        end
        else begin
          N2:=StrToInt(S);
          case ch of
            '+': Edit1.Text:=Edit1.Text+IntToStr(N1+N2);
            '-': Edit1.Text:=Edit1.Text+IntToStr(N1-N2);
            '*': Edit1.Text:=Edit1.Text+IntToStr(round(N1*N2));
            '/': Edit1.Text:=Edit1.Text+IntToStr(round(N1 / N2));
          end;
        end;
      end; // for i
      ch:=#0;
    end;
  end;
end;
 
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Beispiel Projekte für Anfänger?

Beitrag von m.fuchs »

Örks, diese Methode ist mir schon viel zu lang. Das müsste man in mehrere aufsplitten. Aber da ist schon die Frage: ist es sinnvoll Einsteigerprojekte mit langen einzelnen Methoden zu erstellen oder da danns chon vernünftige Methodengrößen (1-10 Zeilen) zu nutzen?
Spontan sage ich ja immer: je kürzer desto einfacher zu verstehen. Oder verwirrt das einen Einsteiger nur? Ich kann mich da nicht mehr so gut hineinversetzen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Beispiel Projekte für Anfänger?

Beitrag von pluto »

Örks, diese Methode ist mir schon viel zu lang. Das müsste man in mehrere aufsplitten. Aber da ist schon die Frage: ist es sinnvoll Einsteigerprojekte mit langen einzelnen Methoden zu erstellen oder da danns chon vernünftige Methodengrößen (1-10 Zeilen) zu nutzen?

Diese frage habe ich mir auch schon gestellt. Klar kann man die Methode schön Aufteilen, aber sollte ich es tun?

Spontan sage ich ja immer: je kürzer desto einfacher zu verstehen. Oder verwirrt das einen Einsteiger nur? Ich kann mich da nicht mehr so gut hineinversetzen.

Ich teile nur auf, wenn ich ein Code-Teil öfter brauche, sonst mache es für mich kein Sinn. Aber genau dafür ist der Thread ja da.
Das wir es klären, wie wir es handhaben wollen.
MFG
Michael Springwald

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Beispiel Projekte für Anfänger?

Beitrag von Have a nice Day »

Ich finde man sollte für diese Beispielprojekte ein neues Unterthema aufmachen, wie Einsteigerfragen.
Für jedes Einsteigerprojekt sollte ein eigener Thread aufgemacht werden, damit rückfragen möglich sind.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Beispiel Projekte für Anfänger?

Beitrag von pluto »

Ich habe mir heute überlegt: Theoretisch könnte man den Code, sehr gut in drei Teile teilen:
1. Zahlen einfügen
2. Operator einfügen
3. Auswertung

Ich glaube das ist ganz sinnvoll, so kann ich auch zeigen, wie man ein Code gut Strukturieren kann. Außerdem fehlen noch ein paar Abfragen.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Beispiel Projekte für Anfänger?

Beitrag von pluto »

Hier ein Überarbeiter Code:

Code: Alles auswählen

 
procedure TForm1.NumberAddClick(Sender: TObject);
var
  BitBtn:TBitBtn;
begin
 BitBtn:=Sender as TBitBtn;
  // Wurde bereits ein Erbgniss ausgeben, einfach wieder auf Anfang setzten
  if pos('=',CalculationEd.Text) > 0 then CalculationEd.Text:='0';
  {
    Um die Abfragen leichter zu machen, wurde die Tag Eigenschaft verwendet.
    Diese Eigenschaft haben die meisten Komponenten. So können wir ganz einfach
    sagen: Wenn die Eigenschaft von Tag bei der Angeklickte Komponente
    unter oder gleich 9 ist, hinzufügen zum Edit
  }

  if (CalculationEd.Text <> '') then begin
    // Wenn der Inhalt nur eine 0 ist, einfach setzten
    if CalculationEd.Text = '0' then
      CalculationEd.Text:=IntTostr(BitBtn.Tag)
    else // sonst hinzufügen
      CalculationEd.Text:=CalculationEd.Text+IntTostr(BitBtn.Tag);
  end;
end;
 
procedure TForm1.OperatorClickBtn(Sender: TObject);
var
  BitBtn:TBitBtn;
  ch:Char;
  x:Integer;
  NoAdd:Boolean;
begin
  NoAdd:=False;
  BitBtn:=Sender as TBitBtn;
  // Vielleicht wurde ein Operator-Button gedrückt?
  ch:=#0;
  case BitBtn.Tag of
    10:ch:='+'; // +
    11:ch:='-'; // -
    12:ch:='*'; // *
    13:ch:='/'; // /
  end; // case
 
  // Hier wird geprüft, ob es den Operator schon gibt, Kettenaufgaben werden noch nicht unterstüzt
  for x:=1 to Length(CalculationEd.text) do begin
    if (CalculationEd.Text[x] in ['-','+','*','/']) then begin
      NoAdd:=True;
      break;
    end;
  end; // for x
 
  if ((ch ='=') and (NoAdd)) or ((ch <> '=') and (not NoAdd))  then
    CalculationEd.Text:=CalculationEd.Text+ch;
end; // OperatorAddBtn
 
procedure TForm1.DeleteLastCharBtn(Sender: TObject);
begin
  {
    Löscht das letzte Zeichen
  }

  if Length(CalculationEd.Text)-1 >=1 then
    CalculationEd.Text:=Copy(CalculationEd.Text,1,Length(CalculationEd.Text)-1)
  else
    CalculationEd.Text:='0';
end// DeleteLastCharBtn
 
procedure TForm1.CalculateClick(Sender: TObject);
var
  ch:char;
  x:Integer;
  NoAdd:Boolean;
  S:String;
  N1,N2:Real;
begin
  S:=''; N1:=0; N2:=0;
  ch:=#0;
  CalculationEd.Text:=CalculationEd.Text+'=';
  for x:=1 to Length(CalculationEd.text) do begin
    if CalculationEd.Text[x] <> '=' then begin
      if (CalculationEd.Text[x] in ['-','+','*','/']) then begin
        N1:=StrToFloat(S);
        ch:=CalculationEd.Text[x];
        s:='';
      end
      else
        S:=s+CalculationEd.Text[x];
    end
    else begin
      N2:=StrToFloat(S);
      case ch of
        '+': CalculationEd.Text:=CalculationEd.Text+FloatToStr(N1+N2);
        '-': CalculationEd.Text:=CalculationEd.Text+FloatToStr(N1-N2);
        '*': CalculationEd.Text:=CalculationEd.Text+FloatToStr(N1*N2);
        '/': CalculationEd.Text:=CalculationEd.Text+FloatToStr(N1 / N2);
      end; // case
    end;
  end; // for i
end; // CalculateBtn
 
procedure TForm1.DeleteBtnClick(Sender: TObject);
begin
  CalculationEd.Text:='0';
end; // DeleteBtnClick
 
procedure TForm1.CommaAddBtnClick(Sender: TObject);
begin
  if (CalculationEd.Text[Length(CalculationEd.Text)] <> '.') and (CalculationEd.Text <> '0') then
    CalculationEd.Text:=CalculationEd.Text+'.';
end; //  TForm1.CommaAddBtnClick     
 


Wie ihr sieht, schön eingeteilt, die Komponenten haben Aussage kräftige Namen bekommen, hoffe ich jedenfalls. Eigentlich fehlen nur noch ein paar "Kommentare", aber auch hier nicht zu viel. Gewisse Grundlagen setzte ich einfach mal vorraus. z.b. wie die Syntax lautet. Was Operatoren sind und soweiter.
Wie könnte man den Code noch aufwerten?
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Beispiel Projekte für Anfänger?

Beitrag von m.fuchs »

pluto hat geschrieben:Ich teile nur auf, wenn ich ein Code-Teil öfter brauche, sonst mache es für mich kein Sinn.

Ah sehr gut, jetzt weiß ich auch was ich auf dem nächsten Forumstreffen mache. Ein Clean-Code/Rafactoring-Workshop. :D

Ich denke, dass die Erstellung von Beispielprojeekten nicht so trivial ist. Im Gegensatz zu erfahrenen Programmierern, ist die Zielgruppe nicht so weit. Quellcode lesen und verstehen wird da bei vielen nicht funktionieren. Also sind Erklärungen nötig. Nicht nur was da passiert, sondern warum der Entwickler diesen Weg gegangen ist.

Aber das ist nicht so einfach in 30-60 Minuten machbar. Eher in zwei bis drei Tagen.

Womit ich deine Idee nicht niedermachen möchte. Im Gegenteil, ich finde sie sehr gut.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: Beispiel Projekte für Anfänger?

Beitrag von soerensen3 »

Ich hab auch einfach mal angefangen. Herausgekommen ist dieses Zeichenprogramm was ich in 2 stunden zusammengeklickt habe. Das ist mit Sicherheit noch verbesserungsfähig aber ich wollte es erstmal so einfach wie möglich halten.
Ich habs leider nicht so mit dem Kommentieren, aber das mach ich die Tage nochmal allerdings ist das auch immer schwierig, wie will man das Kommentieren wenn man im Objektinspektor was ändert.
Könnt ja mal sagen was ihr davon haltet.
http://dl.dropbox.com/u/91457585/Zeichenprogramm.zip

Kann man hier auch Dateien hochladen?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Beispiel Projekte für Anfänger?

Beitrag von Socke »

pluto hat geschrieben:Ich glaube das ist einfacher als ein komplettes Buch zu schreiben oder?

Da gab es doch mal was?! :P

af0815 hat geschrieben:PS: Ich weis durch die LazInfos von was ich spreche. Bis jetzt ca. 5500 Downloads seit 2008, obwohl die letzen 2 Jahre nichts gemacht wurde.

Das waren die Ist-das-noch-aktuell?-Downloads :D

m.fuchs hat geschrieben:Ich denke, dass die Erstellung von Beispielprojeekten nicht so trivial ist. Im Gegensatz zu erfahrenen Programmierern, ist die Zielgruppe nicht so weit. Quellcode lesen und verstehen wird da bei vielen nicht funktionieren. Also sind Erklärungen nötig. Nicht nur was da passiert, sondern warum der Entwickler diesen Weg gegangen ist.

Aber das ist nicht so einfach in 30-60 Minuten machbar. Eher in zwei bis drei Tagen.

Genau. Copy'n'Paste kann jeder. Das was da raus kommt, nennt sich dann Script-Kiddy ;-) Jemand der sich ernsthaft mit der Programmentwicklung auseinandersetzen will, benötigt diese Erklärungen. Erst dadurch wird der Blick auf das was passiert gerichtet und man sieht nicht mehr nur das Ergebnis.

pluto hat geschrieben:
Spontan sage ich ja immer: je kürzer desto einfacher zu verstehen. Oder verwirrt das einen Einsteiger nur? Ich kann mich da nicht mehr so gut hineinversetzen.

Ich teile nur auf, wenn ich ein Code-Teil öfter brauche, sonst mache es für mich kein Sinn. Aber genau dafür ist der Thread ja da.
Das wir es klären, wie wir es handhaben wollen.

Ich durfte kürzlich ein VBA-Projekt für Outlook von einem Kollegen übernehmen. Es sammelt einige Termine aus dem Kalender überprüft sie auf bestimmte Eigenschaften und schreibt sie dann in eine oder mehrere Excel-Dateien. Meine Aufgabe war, die Termine direkt in eine Datenbank zu schreiben (wo sie früher oder später sowieso landen).
Das Programm war aufgeteilt in ein Formular und eine zusätzliche Funktion für den Datenexport. Der erste Schritt war natürlich das extrahieren der Terminextraktion, damit diese wiederverwendbar wird.

Für Anfänger muss man also auch hier klar machen: warum ist hier eine neue Funktion sinnvoll? Warum sollte man nicht alles in eine Funktion hinein schreiben? Warum gehört die nicht zu einer Klasse beziehungsweise warum gehört sie dazu? Wann werden statische Methoden verwendet, etc.

Selbstverständlich lässt sich nicht alles in einem Projekt erklären. :mrgreen: Meine Wenigkeit wird sich wohl nicht aktiv an der Erstellung neuer Projekte beteiligen, sondern wie immer mit (tiefer gehenden) Hintergrundinformationen und konstruktiver Kritik glänzen :D
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Beispiel Projekte für Anfänger?

Beitrag von pluto »

Mein Ziel ist es jetzt nicht den Anfänger mit Informationen abzuschrecken, wie es andere machen. Mein Ziel ist es zu zeigen, wie etwas gehen könne, nicht zu sagen: Es gibt nur diesen Weg. Es führen immer mehrere Wege zum Ziel.

Ich werde den Code noch mit Kommentaren versehen, aber ein Anfänger muss sich anders vor gewisse Infos herholen z.b. was bedeutet jetzt := ? oder wie Funktioniert eigentlich die IF Anweisung?

Ich bin der Meinung, es gibt genügend gute Internet-Projekte, die sich mit solchen Fragen beschäftigen.

Klar, muss man Code aufteilen, soll ich euch mal einige Funktionen aus meinem Aktuellen Projekt zeigen? Aber haltet euch vorher gut fest *G*.

Es ist nicht so einfach, zu entscheiden, in welcher Art und weise ich beschreibe. Ich kenne ja das vor wissen von den Leuten nicht. Daher versuche ich es allgemein zu halten. Für den einen ist das aber zu wenig und für den anderen zu viel.

@soerensen3
Dein Projekt schaue ich mir noch an.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Beispiel Projekte für Anfänger?

Beitrag von pluto »

@soerensen3
Allgemein gesagt: Es ist einfach gehalten, aber das hat ja auch seinen Grund. Ich würde vermutlich vieles anders machen.

1.

Code: Alles auswählen

 if ( ssLeft in Shift ) then
    TheCanvas.Picture.Bitmap.Canvas.Pixels[ X, Y ]:= ColorListBox.Selected;

Verwende nicht Pixels, sondern MoveTo und LineTo. Damit erreichst du ein besseres Ergebnis:

Code: Alles auswählen

 
procedure TMainForm.TheCanvasMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mx:=x;
  my:=y;
end;
 
procedure TMainForm.TheCanvasMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ( ssLeft in Shift ) then begin
    TheCanvas.Picture.Bitmap.Canvas.Pen.Color:=ColorListBox.Selected;
    TheCanvas.Picture.Bitmap.Canvas.MoveTo(mx,my);
    TheCanvas.Picture.Bitmap.Canvas.LineTo(x,y);
    mx:=x; my:=y;
  end;
end;
 

Ich speichere bei einem Mausklick die Position in mx und my ab. Bei einer Mausbewegung setzte ich den Stift auf diese Position und zeichne eine Line zu den neuen Maus Positionen(x und y) und Update mx und my.

2. Die Standard Größe 100 mal 100 Pixel ist etwas zu klein gewählt, finde ich, setzte die mal auf 640 mal 480 PIxel
3. Die Standard Hintergrund Farbe sollte weiß sein nicht, schwarz, schau dir mal ListBox1.IndexOf und ListBox1.itemIndex an(Auch wenn es eine ColorListBox ist, gibt es diese Eigenschaften dort).

4. Wie wäre es als Übung, mehrere Objekte? Z.b. Linen? Kreise, Rechtecke? Wie ein kleines MS Paint?

Verstehe es bitte nicht Falsch. Es sind nur "Vorschläge".

Edit01: Ach ja, mx und my sind in der TFrom1 Klasse unter Public definiert: mx,my:Integer;
MFG
Michael Springwald

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: Beispiel Projekte für Anfänger?

Beitrag von soerensen3 »

@pluto: Danke für deinen Kommentar
Das mit der Auflösung und der Hintergrundfarbe habe ich angepasst.
Der Quelltext ist jetzt auch kommentiert.

Hier die neue Version:
http://dl.dropbox.com/u/91457585/Zeichenprogramm.zip

Was das Pixels angeht habe ich mich bewusst dafür entschieden um es einfach zu halten.
Ich wusste halt nicht wo man ansetzen kann und habe mich für ein Anfängertutorial entschieden.

Ich habe mir aber überlegt eventuell noch eine zweite Version mit Toolbar und ein paar anderen Erweiterungen zu machen oder ansonsten dass als Übungsaufgabe zu machen vorzuschlagen. Denkbar wäre auch das Ganze als Bezier zu machen, sieht bestimmt noch besser aus.


Allerdings glaube ich auch das es schon relativ viele gute Tutorials gibt, die man sich aber mühsam raussuchen muss.
Vielleicht könnte man die auch irgendwie Thematisch sortiert noch verlinken.
Gibts hier nicht dieses LazForge? Könnte man da sowas machen wie eine Plattform wo man das alles hochlädt und verlinkt.

Antworten