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



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: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...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.all diese Sachen lernst du mit learning by doing nur recht oberflächlich
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...
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;
Da nehme ich doch lieber das hier.... hübsch klein und sehr praktisch... und immer gleiche Werte...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;
Code: Alles auswählen
Function RGB2TColor(R, G, B: Byte): Integer;
Begin
Result:= R Or (G Shl 8) Or (B Shl 16);
End;
Das ging mir auch so, nur bei mir gab es nicht mal HTML.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?
Es gab sogar Zeitschriften mit Delphi Code. Ich glaube PC-Magazine oder so ähnlich.Dafür hatte es fast in jeder PC-Zeitschrift Code-Ausschnitte.
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...Und warum nehmt ihr nicht einfach die Fkt. aus der Unit Graphics
Was nützt mir aber eine Funktion, die scheinbar keine Stabilen Werte zurück gibt?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...
Also meinen Segen hast du... du kannst Random benutzen wann immer du möchtest...grins...Was nützt mir aber eine Funktion, die scheinbar keine Stabilen Werte zurück gibt?
Dafür kann ich auch Random nutzen....
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;
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.pluto hat geschrieben:Es gab sogar Zeitschriften mit Delphi Code. Ich glaube PC-Magazine oder so ähnlich.Dafür hatte es fast in jeder PC-Zeitschrift Code-Ausschnitte.
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.
Aaaah ja, hab's gerade mal gesichtet:Result:=MyRec.Col; //das letze byte ist undefiniert
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;
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;
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;