[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]

    {
    -> I'm trying to use the GetImage and PutImage commands from Turbo
    -> Pascal

    Okay.. did you declare a varible that would hold the size you needed? I
    have a little program I wrote to draw a musical staff and put the notes
    up randomly so that I can practice reading music..
    }

    Program MusicNotes;

    Uses
      Crt,
      Dos,
      Graph,
      XtraDos;

    const
      NotePos : Array[1..11] Of Integer =
    (164,179,194,209,224,239,254,269,284,299,314);
      Note : Array[1..11] Of Char =
    ('G','F','E','D','C','B','A','G','F','E','D');

    Procedure Beep;

    begin
      sound(600);
      delay(100);
      nosound;
    end;

    var
      CallUnit : CallH;
      Key : Char;
      P : Pointer;
      Size : Word;
      Y, X,
      MaxX, MaxY,
      grMode,
      grDriver : Integer;

    Begin
    grDriver := Detect;
    InitGraph(grDriver, grMode,'D:\bp\bgi');
    MaxX:=GetMaxX;
    MaxY:=GetMaxY;
    SetColor(white);
    Circle(15,15,15);
    FloodFill(15,15,white);
    Size:=ImageSize(0,0,30,30);
    GetMem(P,Size);
    getImage(0,0,30,30,P^);
    cleardevice;
    Y:=((MaxY Div 2)-60);
    For X:=1 To 5 Do
     Begin
      Line(0,Y,MaxX,Y);
      Y:=Y+30;
     End;
    Randomize;
    Repeat
    X:=Random(11)+1;
      PutImage(320,(NotePos[X]-15),P^,ORPut);
      Repeat
       Key:=Char(CallUnit.KeyReturn);
      Until Key=Note[X];
      Beep;
      PutImage(320,(NotePos[X]-15),P^,XOrPut);
      If (X/2)=(X Div 2) Then
        Line(290,NotePos[x],350,NotePos[x])
        Else
         If X>1 Then
           Line(290,NotePos[x-1],350,NotePos[x-1]);
    Until 3=2;
    End.

    The important part is the SIZE=.. Use that line to create a varbible
    buig enough to hold the image.

[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]