unit u15R31d;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type
  { TFBildkodierer }

  TFBildkodierer = class(TForm)
    LTitel: TLabel;
    LZahlen: TLabel;
    LBild: TLabel;
    MZahlen: TMemo;
    MBild: TMemo;
    BAnzeige: TButton;
    procedure BAnzeigeClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  FBildkodierer: TFBildkodierer;

implementation

{$R *.lfm}

{ TFBildkodierer }

function erstezahl(var s:string):integer;
var z:string;
begin
  z:='';
  while (length(s)>0) and (s[1]=' ') do delete(s,1,1);    // Leerzeichen löschen
  while (s<>'') and (s[1]<>' ') do begin                     // Ziffern auslesen
    z:=z+s[1];
    delete(s,1,1)
  end;
  while (length(s)>0) and (s[1]=' ') do delete(s,1,1);    // Leerzeichen löschen
  result:=strtoint(z)                       // in Zahl umwandeln und zurückgeben
end;

procedure TFBildkodierer.BAnzeigeClick(Sender: TObject);
var z,s,anz:integer;
    zf1,zf2:string;
    farbe:string;
begin
  MBild.Lines.Clear;
  for z:=1 to MZahlen.Lines.Count do begin
    zf1:=MZahlen.Lines[z-1];
    zf2:='';
    s:=1;
    farbe:=' ';                                 // die erste Zahl ist immer weiß
    while zf1<>'' do begin                         // die ganze Zeile abarbeiten
      anz:=erstezahl(zf1);                    // Anzahl Pixel mit gleicher Farbe
      for s:=1 to anz do zf2:=zf2+farbe;
      if farbe=' ' then farbe:='█'                             // Farbe wechseln
      else farbe:=' ';
    end;
    MBild.Lines.Add(zf2);                               // Bild in Memo anzeigen
  end;
end;

end.

