Zitat von
Sophia_X:
@Oxmyx
Ich bewunder es, wie schnell ihr so was hinkriegt. Übung macht den Meister, ne? Mir persönlich macht programmieren ziemlich viel spaß, aber mir mangelt es noch zu sehr an Kenntnise. Durch so ein Spiel kann man echt viel lernen und man hat ein Erfolgserlebnis.
Dein Quelltext hilft mir sehr viel weiter. Darauf wäre ich nie gekommen. Was ich gar nicht so verstehe ist folgendes:
Delphi-Quellcode:
for i := 1 to 10 do begin
ZeroMemory(@AutoName, sizeof(AutoName));
strlfmt(@AutoName, 32, 'Auto%d', [i]);
Wusste gar nicht, dass es so ein @ gibt. Und das %
Das @ ist der Adress-Operator. Wenn man ein @ vor eine Variable schreibt, dann liefert dieser Operator die Speicheradresse dieser Variablen zurück.
AutoName ist ja ein "array[0..31] of Char", also ein Array mit 32 Char-Variablen drin. Da jede Char-Variable ein Zeichen enthalten kann, ist ein Array of Char also so etwas wie ein "string".
Mit der Funktion ZeroMemory lösche ich den Speicherbereich, an der dieser Zeichenstring steht. Weil es kann sein, dass dort noch irgendwas steht, und dass das Char-Array wirklich ganz leer (mit Nullen gefüllt) ist, überschreibe ich einfach den gesamten Speicherbereich, den das Array einnimmt, mit Nullen (nichts anderes macht die ZeroMemory-Funktion).
Die Funktion strlfmt formatiert einen String nach einem vorgegeben Format. Der erste Parameter ist der String, in den geschrieben werden soll. Der zweite Parameter ist die größe des Arrays (da ein "Char" ein Byte groß ist, und das Array 32 Chars enthält, ist die Größe des Arrays also 32 Byte). Der dritte Parameter ist das Format des Strings. Das %d ist ein Formatsymbol. Es besagt. dass an dieser Stelle etwas in den String eingefügt werden soll (das "d" hinter dem % besagt, dass ein Ganzzahl-Wert an dieser Stelle eingefügt werden soll). Der einzufügende Wert steht im vierten Parameter.
Nachdem die Funktion ausgeführt wurde, steht im ersten Schleifendurchlauf in AutoName "Auto1", im zweiten Schleifendurchlauf steht in AutoName "Auto2", etc., weil strlfmt immer die Zählvariable hinter "Auto" setzt. Dann sucht FindComponent im 1. Schleifendurchlauf nach "Auto1" (und das ist ja der Name eines TImage-Steuerelements!), im 2. Schleifendurchlauf nach "Auto2", etc.