/*************************************************************** * Userdefined Objects in GFA-BASIC 3.x * * (c)8/92 Gregi Duchalski * * * * last change 03.08.92 * * * * RUNDEN BUTTON zeichnen * ***************************************************************/ #include #include #include WORD cdecl circlebut(PARMBLK *parmblk) { /* Diese Struktur wird im BASIC angelegt... */ typedef struct { WORD u_handle; /* Bildschirmhandle V~H */ BYTE *u_text; /* Adresse des Textes */ BYTE u_wchar; /* Breite eines Zeichens */ BYTE u_hchar; /* H”he eines Zeichens */ WORD u_pos; /* Pos. d. unterstr. Buchst. */ }USRBLK; WORD xy[4],xy_clip[4],v_handle,x,y,bw,bh,rx,ry; USRBLK *usrblk; usrblk=(USRBLK*) parmblk->pb_parm; v_handle=usrblk->u_handle; /* Bildschirmhandle */ bw=usrblk->u_wchar; /* Zeichenbreite */ bh=usrblk->u_hchar; /* Zeichenh”he */ /* Clipping setzen */ xy_clip[0]=parmblk->pb_xc; xy_clip[1]=parmblk->pb_yc; xy_clip[2]=parmblk->pb_xc+parmblk->pb_wc-1; xy_clip[3]=parmblk->pb_yc+parmblk->pb_hc-1; vs_clip(v_handle,1,xy_clip); /* Kreis zeichnen */ rx=bw-1; ry=bh/2-1; x=parmblk->pb_x+2*bw-rx+1; y=parmblk->pb_y+ry; vsf_interior(v_handle,FIS_HOLLOW); /* Fllmuster */ vsf_perimeter(v_handle,1); /* Umrandung ein */ v_ellipse(v_handle,x,y,rx,ry); /* Selektiert, also ausfllen */ if (parmblk->pb_currstate & SELECTED) { vsf_interior(v_handle,FIS_SOLID); v_ellipse(v_handle,x,y,rx-2,ry-2); } /* Text ausgeben */ x=parmblk->pb_x+2+bw*3; y=parmblk->pb_y+bh-(bh/8)-1; v_gtext(v_handle,x,y,usrblk->u_text); /* Wenn es einen unterstr. Buchst. gibt... */ if (usrblk->u_pos!=0) { xy[0]=x+(usrblk->u_pos-1)*bw; xy[1]=parmblk->pb_y+bh-1; xy[2]=xy[0]+bw-1; xy[3]=xy[1]; v_pline(v_handle,2,xy); } /* Clipping aus */ vs_clip(v_handle,0,xy_clip); return (parmblk->pb_currstate & ~SELECTED); }