Lazarus beginnen mit Delphi Buch

Für Fragen von Einsteigern und Programmieranfängern...
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: Lazarus beginnen mit Delphi Buch

Beitrag von af0815 »

PSST: Ich verrate dir ein großes Geheimnis, von dem nicht so viele Wissen :

Achtung Spoiler !!!!!


Es gibt in der Lazarusinstallation ein Verzeichnis mit dem Namen 'examples', dort liegen viele Beispiele zu den unterschiedlichsten Themen drinnen.


Abr PSSST. Nicht weiterverraten :shock: :D :mrgreen:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Warf
Beiträge: 1910
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Lazarus beginnen mit Delphi Buch

Beitrag von Warf »

SoE hat geschrieben:Hi,
danke, dass ist genau mein Punkt:

Das was in der Praxis untrennbar zusammengehört in der Theorie zu zerschlagen halte ich für einen großen Misthaufen.
Ich kann ja nichtmal mit einem Programm anfangen, wenn ich nicht zumindest eine grobe Vorstellung von der Optik habe. Wie soll ich mich für die entsprechenden Komponenten entscheiden und die daraus entstehende Struktur ohne diese Information?
Es gibt nunmal Komponenten, mit denen ganz bestimmte Dinge nicht gehen, die wären dann je nach Optik außen vor... es sei denn jemand möchte sich eigene Komponenten bauen... mit viel Zeit geht natürlich alles...
all diese Sachen lernst du mit learning by doing nur recht oberflächlich

Das mag ja sein, aber niemand muß als erstes Programm eine Firewall mit erweiterter Prozesskontrolle schreiben. Man fängt klein an und ganz automatisch werden die Programme größer und damit auch die Anforderungen.
Mann kann mit einer Hochsprache tausende Programme schreiben, die keine riesigen Anforderungen an spezielle Themen erfordern. Die Register im Prozessor brauche ich dafür nicht zu kennen...
D.h. es ist toll wenn man sich mit BinärCode oder Assembler auskennt, wenn man weiß wie der Kernel und das Userland funktionieren usw., aber für einfache Programme ist dieses Wissen nutzloser Ballast und für Anfänger ebenso.
Und natürlich noch die Sprachspezifischen dinge, so wissen einige Lazarus Entwickler z.B. nicht mal dass man im Definitionsteil einer Funktion typen definieren kann

Auch da hast du sicher Recht, aber bezogen auf die Praxis ist das gar nicht nötig. Wenn man mit seinen Fähigkeiten nicht mehr weiterkommt, dann rüstet man auf und passt sich an. Außerdem ist nicht alles was geht auch sinnvoll und schon gar nicht für jedes Programm. Beispiel: "With xyz Do" kann man benutzen, aber ist das auch sinnvoll? Wahrscheinlich eher selten. Oder GOTO gibt es ebenfalls, aber nur weil etwas möglich ist muß man ja nicht jeden Blödsinn mitmachen... wenn es auch bestimmt hierfür in Ausnahmefällen gute Gründe geben mag!

Ich wußte z.B. nicht das man in Funktionen auch Typen definieren kann, aber es stellt sich automatisch die Frage ob das an der Stelle sinnvoll ist und wann man soetwas braucht. Ich hab' das bis jetzt nicht vermißt und falls ich das mal brauchen sollte, dann werde ich schon an die Informationen herankommen. Für mich gehört das in die Zuviel-Ballast-Für-Anfänger-Ecke...

Die von mir genannten Punkte sind jedoch bei absolut jedem Programm notwendig. Soll das Programm einigermaßen "was sein", dann kommt man um diese Punkte nicht herum.
Also muß all das auch von Anfang an mit in Programmierbeispiele einfließen, damit das schnell zur Routine wird. Und genau das ist in den allermeisten Büchern nicht der Fall. Dazu kommt bei einem oder zwei Autoren noch das Problem der zu sehr eingeschränkten Sicht und wenn das Buch dann auch noch zu sehr veraltet ist, ist der Nutzen bezogen auf die Praxis fraglich. Alles entwickelt sich eben weiter...
Bei einem eigenen Programm fließen diese Dinge sofort ganz automatisch mit ein und können eigentlich gar nicht fehlen.

Theorie für die ich nicht sofort einen praktischen Grund habe wird schnell wieder versickern...
Das nennt man dann auch Zeitverschwendung. Ich hab' 'ne Menge Theorie in der Schule gelernt und ca. 99% davon habe ich nie gebraucht!
Ich wußte mal wie man eine Kosten- und Leistungsrechnung aufstellt oder wie Frösche sich paaren und fortpflanzen, ebenso mathematische Konstrukte und chemische Formeln usw.... und all das ist aufgrund von fehlender Praxis längst versickert...
Mann war das eine grenzenlose Zeitverschwendung...


Ich stimme dir teils auch zu, nur ich sage mal man sollte sich eigentlich in beiden Bereichen gut auskennen. Wenn man z.B. das mit type in Funktionen weiß wird eine Funktion RGBtoTColor ein klacks:

Code: Alles auswählen

function RGBToTColor(R, G, B: Byte): TColor;
type
  TRGBCol = packed record
    case Boolean of
    True: (R, G, B: Byte);
    False: (Col: TColor);
  end;
var
  myrec: TRGBCol;
begin
  MyRec.R:=R;
  MyRec.G:=G;
  MyRec.B:=B;
  Result:=MyRec.Col;
end;

Das ist die schnellste Möglichkeit R, G und B in eine TColor umzurechnen, da nur Schreib und Leseoperationen verwendet werden, aber so etwas kann man natürlich nicht rausfinden wenn man nicht weiß dass man typen in Funktionen definieren kann, oder was Variante records sind, oder wie der Speicher aufgebaut ist.

Klar kann man sich weiterbilden wenn es nötig ist, doch oftmals braucht man sich zur Lösung von einem Problem nicht unbedingt weiter zu bilden, aber bekommt dafür nur eine Mittelmäßige Lösung bzw einen Workaround statt eine wunderschöne sehr gute Lösung die halt mehr Theoretisches wissen beansprucht.

Ich finde wenn man lernt dann sollte man schauen dass man, zumindest bei sprachlichen und System Grundlagen, alles lernt und nicht nur oberflächlich.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 993
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Lazarus beginnen mit Delphi Buch

Beitrag von kralle »

Moin,

ich finde zum lernen von Pascl/Lazarus/Delphi gehört auch der Umgang mit der IDE und den Tools und die Frage was gehört in ein gutes Programm un wie komme ich es darein.
Zum Beispiel finde ich unter dem Aspekt das immer mehr Geräte von den Anwendern genutzt werden, wichtig sich auch im Vorfeld Gedanken über die Übertragung von Code von einem System auf das andere zumachen (z.B. Programmpfade, Pfadtrenner, usw.)
Auch sollte man von Anfang an Gedanke um die Onlinehilfe und die Internationalisierung machen. Gerade letzteres, setzt doch einiges an Disziplin voraus.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Lazarus beginnen mit Delphi Buch

Beitrag von SoE »

@Warf:
Deine Funktion führt bei mir immer zu verschiedenen Werten... nach jeder Neucompilierung ein anderer Wert.
ShowMessage(ColorToString(RGBtoTColor(13,180,13)));
function RGBToTColor(R, G, B: Byte): TColor;
type
TRGBCol = packed record
case Boolean of
True: (R, G, B: Byte);
False: (Col: TColor);
end;
var
myrec: TRGBCol;
begin
MyRec.R:=R;
MyRec.G:=G;
MyRec.B:=B;
Result:=MyRec.Col;
end;


Da nehme ich doch lieber das hier.... hübsch klein und sehr praktisch... und immer gleiche Werte...

Code: Alles auswählen

 
Function RGB2TColor(R, G, B: Byte): Integer;
Begin
 Result:= R Or (G Shl 8) Or (B Shl 16);
End;
 


Suche im Internet = ca. 5 Sekunden...
;-)

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Lazarus beginnen mit Delphi Buch

Beitrag von theo »

Und warum nehmt ihr nicht einfach die Fkt. aus der Unit Graphics :?: :shock: :?:

function RGBToColor(R, G, B: Byte): TColor;

http://lazarus-ccr.sourceforge.net/docs ... color.html

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: Lazarus beginnen mit Delphi Buch

Beitrag von pluto »

Nun, es gibt immer mehrere Wege die nach Rom führen.

Ich schaue mir auch sehr gerne Fremd Code an z.b. in C. Einmal habe ich sogar eine Lösung für ein Problem gesucht und wurde in einem C Code fündig, Ohne genau zu wissen was ich da eigentlich mache, habe ich den Code übersetzt(Zu den Zeitpunkt konnte ich noch nicht so gut C wie jetzt(Dank Arduino *G*)) und siehe da, nach einigen Anpassungen, klappt es sogar.

Ich denke, man muss einfach die Quellen nutzen die man findet. Ich befasse mich hin und wieder mit Sachen, wo man so gut wie nichts im Internet findet. Z.B. zu den IC TEA6420. Wie Steuert man den in Arduino?
(Ich habe beispiele in ASM gefunden, in C und in verschiedenen anderen dingen, aber keines direkt für Arduino).

Ich habe es dann hinbekommen, aber es es dauert. Es gab halt nur ein Datenblatt und eine Zeile dort war die Lösung, die hatte ich immer überlesen...

Bevor das Internet "Aufkam" habe ich mir ein Buch nach den anderen gekauft, die ich HEUTE wegschmeiße nach und nach, wer braucht schon ein Buch über HTML 4?

Die Technik, ändert sich so schnell, da kommen die Print Medien einfach nicht hinterher.
Bei Object Pascal mag die Grundlage immer noch die gleiche sein wie 1990, aber sie wurde stark erweitert.
MFG
Michael Springwald

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Lazarus beginnen mit Delphi Buch

Beitrag von Mathias »

Bevor das Internet "Aufkam" habe ich mir ein Buch nach den anderen gekauft, die ich HEUTE wegschmeiße nach und nach, wer braucht schon ein Buch über HTML 4?

Das ging mir auch so, nur bei mir gab es nicht mal HTML.
Ich hatte sehr viel GW-Basic und Pascal Code aus Zeitschriften und Bücher gesammelt.
Unterdessen ist fast alles in den Müll gewandert.

Früher gab es nicht die Möglichkeit schnell in einem Forum etwas zu fragen.

Dafür hatte es fast in jeder PC-Zeitschrift Code-Ausschnitte.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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: Lazarus beginnen mit Delphi Buch

Beitrag von pluto »

Dafür hatte es fast in jeder PC-Zeitschrift Code-Ausschnitte.

Es gab sogar Zeitschriften mit Delphi Code. Ich glaube PC-Magazine oder so ähnlich.

Sowas sollten wir mal Online Einführen mit Lazarus. Habe ich mir jedenfalls schon oft überlegt...

Zwar ist Lazarus Delphi Kompatibel, aber es gibt eben auch einige Unterschiede.
MFG
Michael Springwald

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Lazarus beginnen mit Delphi Buch

Beitrag von SoE »

Und warum nehmt ihr nicht einfach die Fkt. aus der Unit Graphics

Gute Idee... das gibt mir stabile Werte, das war auch nur ein Beispiel ohne Type und ohne Buch und trotzdem perfekt zielführend und schnell...
Außerdem mag ich Integer viel lieber als Hex, kann man auch besser behalten... und Lazarus ist es egal...

Ja, die Zeit der Bücher ist vorüber, die meisten benutzen Bücher nur noch aus Gewohnheit und selbstverständlich gibt es immer Bereiche, die sich länger halten und die anderen Regeln folgen...
Ausnahmen eben...

Das ist ja auch eines der wichtigsten Themen für kleine Kinder: Wie finde ich bei der Fülle von Informationen im Internet möglichst schnell was ich suche und lasse mich möglichst wenig von anderen Dingen ablenken.

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: Lazarus beginnen mit Delphi Buch

Beitrag von pluto »

Gute Idee... das gibt mir stabile Werte, das war auch nur ein Beispiel ohne Type und ohne Buch und trotzdem perfekt zielführend und schnell...

Was nützt mir aber eine Funktion, die scheinbar keine Stabilen Werte zurück gibt?
Dafür kann ich auch Random nutzen....
MFG
Michael Springwald

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Lazarus beginnen mit Delphi Buch

Beitrag von SoE »

Was nützt mir aber eine Funktion, die scheinbar keine Stabilen Werte zurück gibt?
Dafür kann ich auch Random nutzen....

Also meinen Segen hast du... du kannst Random benutzen wann immer du möchtest...grins...

Die Funktion aus der Graphics Unit und die Funktion aus dem Internet funktionieren beide stabil !!!
Du hast da wohl was quer rein bekommen... grins...

Die Funktion von Warf gibt mir immer nach einem NeuKompilieren einen anderen Wert, aber ich hab' mich nicht mit dem Grund befaßt. Vielleicht kann sie mich nicht leiden.... wer weiß...
Deswegen würde ich die so auch nicht benutzen wollen.

Manchmal kann man das aktive Fenster nicht sehen, weil es zu sehr in der Mitte genau vor der Nase angezeigt wird... grins...
(Das mußte ich mir vor kurzem auch selbst sagen bei einem anderen Thema... würde ich natürlich niemals zugeben...;-))

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Lazarus beginnen mit Delphi Buch

Beitrag von mse »

SoE hat geschrieben:Die Funktion von Warf gibt mir immer nach einem NeuKompilieren einen anderen Wert, aber ich hab' mich nicht mit dem Grund befaßt.

Code: Alles auswählen

 
function RGBToTColor(R, G, B: Byte): TColor;
type
  TRGBCol = packed record
    case Boolean of
    True: (R, G, B: Byte); //belegt 3 bytes
    False: (Col: TColor)//belegt 4 bytes
  end;
var
  myrec: TRGBCol;
begin
  MyRec.R:=R;
  MyRec.G:=G;
  MyRec.B:=B;
  Result:=MyRec.Col//das letze byte ist undefiniert
end;
 

Celric
Beiträge: 4
Registriert: Do 1. Okt 2015, 08:56
OS, Lazarus, FPC: Linux (L 1.4.4 FPC 2.6.4)
CPU-Target: 64 bit
Wohnort: Saarbruecken
Kontaktdaten:

Re: Lazarus beginnen mit Delphi Buch

Beitrag von Celric »

pluto hat geschrieben:
Dafür hatte es fast in jeder PC-Zeitschrift Code-Ausschnitte.

Es gab sogar Zeitschriften mit Delphi Code. Ich glaube PC-Magazine oder so ähnlich.

Sowas sollten wir mal Online Einführen mit Lazarus. Habe ich mir jedenfalls schon oft überlegt...

Zwar ist Lazarus Delphi Kompatibel, aber es gibt eben auch einige Unterschiede.


Gute Idee eigentlich. Wie waere es mit einem eigenen Thread mit dem Namen "Codeschnipsel"? Hier koennen kurze und nuetzliche Codeschnipsel gepostet werden. So eine Sammlung waere doch nett. :-)

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Lazarus beginnen mit Delphi Buch

Beitrag von SoE »

Result:=MyRec.Col; //das letze byte ist undefiniert

Aaaah ja, hab's gerade mal gesichtet:

Code: Alles auswählen

 
Function RGB2TColor(R, G, B: Byte): Integer;
 Begin
  Result:= R Or (G Shl 8) Or (B Shl 16);
 End;
 
Function RGBToTColor(R, G, B: Byte): TColor;
  Type
   TRGBCol = Packed Record
     Case Boolean
     Of
      True : (R, G, B: Byte);
      False: (Col    : TColor);
     End;
  Var
   MyRec: TRGBCol;
 Begin
  MyRec.R:= R;
  MyRec.G:= G;
  MyRec.B:= B;
  Result := MyRec.Col;
 End;
 
Procedure TForm1.Button1Click(Sender: TObject);
 Begin
  Shape1.Brush.Color:= (RGB2TColor (StrToInt(Edit1.Text),StrToInt(Edit2.Text),StrToInt(Edit3.Text)));
  Shape2.Brush.Color:= (RGBToTColor(StrToInt(Edit1.Text),StrToInt(Edit2.Text),StrToInt(Edit3.Text)));
 End;
 

Der "Platz" wird also nicht gebraucht... sieht optisch völlig identisch aus... das Ganze über ShowMessage schaffte nicht besonders viel Vertrauen...
Die Integer Function ist trotzdem 'ne optische Zierde... :-)

Ok, Danke...

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Lazarus beginnen mit Delphi Buch

Beitrag von mse »

Korrekt wäre:

Code: Alles auswählen

 
Function RGBToTColor(R, G, B: Byte): TColor;
  Type
   TRGBCol = Packed Record
     Case Boolean
     Of
      True : (R, G, B, reserve: Byte);
      False: (Col    : TColor);
     End;
  Var
   MyRec: TRGBCol;
 Begin
  MyRec.R:= R;
  MyRec.G:= G;
  MyRec.B:= B;
  Myrec.reserve:= 0;
  Result := MyRec.Col;
 End;
 

oder

Code: Alles auswählen

 
Function RGBToTColor(R, G, B: Byte): TColor;
  Type
   TRGBCol = Packed Record
     Case Boolean
     Of
      True : (R, G, B: Byte);
      False: (Col    : TColor);
     End;
  Var
   MyRec: TRGBCol;
 Begin
  MyRec.Col:= 0;
  MyRec.R:= R;
  MyRec.G:= G;
  MyRec.B:= B;
  Result := MyRec.Col;
 End;
 

(nicht getestet).

Antworten