Falsche Funktion benutzt. Es soll StrToInt sein und nicht IntToStr.
cParam.data_b := Byte(StrToInt('$' + Edit1.Text));
Umzutypen sollte vielleicht auch noetig sein.
DeviceIoControl(hDIO, IOCTL_SYS_DIO_WRITE, @cParam, SizeOf(cParam), nil, 0, nReturn, nil);
Zuviel C in letzter Zeit.
IOCTL_SYS_DIO_WRITE = DWORD((WDT_TYPE shl 16) or (2 shl 14) or ($805 shl 2) or 0);
Das forciert den richtigen Typ.