Скачиваний:
25
Добавлен:
01.05.2014
Размер:
1.9 Кб
Скачать
#include <ctype.h>
#include <string.h>

#include "tools.h"

const char msgFTail[] = " быть вещественным числом",
					 msgDWTail[] = " быть целым положительным числом";

BOOL CheckFloatEditor(TWindow *parent, TEdit *Control, unsigned bufLength, double *target, const char *msgHead)
{
	char *buffer = new char[bufLength+1], *errchar;
	double number;
	BOOL error = FALSE;

	Control->GetLine(buffer, bufLength, 1);
	number = strtod(buffer, &errchar);
	if (*errchar)
		error = TRUE;
	else
		if (number == 0)
		{
			for (char *p = buffer; *p; p++)
				if (isdigit(*p))
					break;
			if (!isdigit(*p))
				error = TRUE;
		}

	delete buffer;

	if (error)
	{
		char *message = new char[strlen(msgHead)+34];

		strcpy(message, msgHead);
		strcat(message, msgFTail);
		parent->MessageBox(message, "Ошибка", MB_OK|MB_ICONHAND);
		Control->SetFocus();

		delete message;
		return TRUE;
	}

	if (target)
		*target = number;
	return FALSE;
}

BOOL CheckDwordEditor(TWindow *parent, TEdit *Control, unsigned bufLength, unsigned long *target, const char *msgHead)
{
	char *buffer = new char[bufLength+1];
	unsigned long number;
	BOOL error = FALSE;

	Control->GetLine(buffer, bufLength, 1);
	for (char *p = buffer; *p; p++)
		if (!isdigit(*p))
			break;
	if (*p || p == buffer)
		error = TRUE;
	else
		number = atol(buffer);

	delete buffer;

	if (error)
	{
		char *message = new char[strlen(msgHead)+32];

		strcpy(message, msgHead);
		strcat(message, msgDWTail);
		parent->MessageBox(message, "Ошибка", MB_OK|MB_ICONHAND);
		Control->SetFocus();

		delete message;
		return TRUE;
	}

	if (target)
		*target = number;
	return FALSE;
}

void killZeros(char *str)
{
	if (!strchr(str, '.'))
		return;
	for (unsigned i = strlen(str)-1; i && str[i] == '0'; i--)
		str[i] = '\0';
	if (i && str[i] == '.')
		str[i] = '\0';
}
Соседние файлы в папке SOURCE