Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Wie kann ich ein StringGrid mit Daten füllen?
Mentor86 - Mi 18.06.03 10:25
Titel: Wie kann ich ein StringGrid mit Daten füllen?
Hi Leute,
wie kann ich ein StringGrid füllen? Es soll ein Vigeneré Quadrat werden.
:arrow: Bitte schreibt mir den Quelltext!
MfG
Mentor86
Moderiert von
Tino: Titel geändert.
Mentor86 - Mi 18.06.03 16:47
Hi, ich habe jetzt die erste Zeile alleine geschafft, aber ich weiss nicht wie ich es hinkriegen soll, dass jetzt unter jeder Spalte das Alphabet hinkriegen soll. Ich habe folgenden Quelltext benutzt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var i,x,y,z:integer; begin x:=0; y:=0; z:=65; for i:=1 to 26 do begin stringgrid.cells[x,y]:=chr(z); x:=x+1; z:=z+1; end; end; |
Kann mir jemand helfen?
MfG Mentor
Moderiert von
tommie-lie: Delphi-Tags hinzugefügt
Tweafis - Mi 18.06.03 17:05
Hört sich doch schon besser an ;) Ich finde es nur nicht gut wenn jemand sagt: Schreibt mir den Quellcode. Probier es doch so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function vigenere(x,y: integer; grbuchst: boolean): char; var anfang, ende: char;
function betw(x,a,b: integer): integer; begin if x<a then result:=b-(a-x) else if x>b then result := a+(x-b) else result := x; end;
begin if grbuchst then begin anfang := 'A'; ende := 'Z'; end else begin anfang := 'a'; ende := 'z'; end; result := Chr(betw(Ord(anfang)+(x-1)+(y-1), Ord(anfang), Ord(ende))); end; |
Aufrufen kannst du das dann mit
Stringgrid1.Cells[x,y] := vigenere(x-1,y-1,true);
Falls du denkst: Eigentlich unsinnig, im aufruf -1 und in der Funktion +1, dann denk daran, das dein Stringgrid von 0 ausgeht und das vigenere quadrat an sich unter 1 die reihe versteht, die mit B anfängt (BCDEFGHI...XYZA)
Jedenfalls nach meinem Kryptographie Buch (Geheime Botschaften - Simon Singh)
Der Parameter grbuchst gibt an ob grossbuchstaben zurückggegeben werden sollen. die funktion betw ist eigentlich nur zur besseren übersicht.
Tweafis - Mi 18.06.03 17:35
mit dem +1 -1 musst du noch gucken, ich weiß nicht genau
Mentor86 - Mi 18.06.03 18:07
Danke, ich treff mich gleich mit ´nem Freund, wir werden dann mal schauen, ob wir das hinkriegen.
MfG Mentor
Mentor86 - Fr 20.06.03 17:56
Hi, wir haben jetzt das in der Schule nochmal bvesprochen und der Lehrer hat uns eine Lösung gegeben. Ich verstehe sie nicht ganz. (Vielleicht muss man da Mathe-Profi sein). Kann mir jemand erklären, was da genau passiert? Ich wäre ihm sehr dankbar.
Der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| vigqua:ARRAY[1..26,1..26] of char;
procedure TForm1.Button1Click(Sender: TObject); var s, z, i, j :integer; begin i:=0; for z:=1 to 26 do begin for s:=1 to 26-i do vigqua[s,z]:=chr(s+64+i); j:=0; for s:=26-i+1 to 26 do begin j:=j+1; vigqua[s,z]:=chr(64+j) end; i:=i+1; end; for i:=1 to 26 do for j:=1 to 26 do stringgrid.cells[i-1,j-1]:=vigqua[i,j]; end; |
MfG Mentor
Moderiert von
Tino: Delphi-Tags hinzugefügt.
CenBells - Fr 20.06.03 18:13
mit diesem stück füllt er das stringgrid mit den buchstaben, die in vigqua an stelle [i,j] stehen.
Delphi-Quelltext
1: 2: 3:
| for i:=1 to 26 do for j:=1 to 26 do stringgrid.cells[i-1,j-1]:=vigqua[i,j]; |
Mit folgendem füllt er das dreieck halt so, daß in zeile eins in das Alphabet normal abgetragen wird. Wenn zeile (z) gleich 2 ist, wird in spalte (s) 1 das b geschrieben. Bis zum 'Z'.
Wenn das soweit fertig ist, ist das letzte Feld noch frei. Das erste freie Feld ermittelt er mit s := 26-i+1 und da füllt er in das feld halt den buchstaben 64+j. Ist j = 1, dann wird das A eingefüllt, und so weiter und so fort...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| i:=0; for z:=1 to 26 do begin for s:=1 to 26-i do vigqua[s,z]:=chr(s+64+i); j:=0; for s:=26-i+1 to 26 do begin j:=j+1; vigqua[s,z]:=chr(64+j) end; i := i+1; end; |
[edit]@tino:Danke fürs einfügen der Delphi-tags [edit]
Gruß
Ken
Tweafis - Fr 20.06.03 18:29
Was hat denn dein Lehrer an meiner Funktion auszusetzen? Du musst sie evt. noch um + oder - 1 anpassen aber ads sollte ja kein Problem sein...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!