Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ООП / ООП / Laba4_1 / CStr

.cpp
Скачиваний:
8
Добавлен:
18.02.2017
Размер:
3.26 Кб
Скачать
//---------------------------------------------------------------------------

#include "Lab4.h"
#pragma hdrstop

#include "CStr.h"

CStr::CStr()
{
}

char * CStr::Ret()
{
char *u;
u = new char[n];
for (int i = 0; i <= n; i++) u[i]=ptr[i];
u[n]='\0';
return u;
}

void CStr::Paste(int p,char *s1)
{
int k=0,t=0;
while (s1[k]!='\0') k++;
char *f=&ptr[n];
f = new char[k];
n=n+k; int j=0;
for (int i = n; i >= p+k; i--) ptr[i]=ptr[i-k];
for (int i = p; i < p+k; i++) {ptr[i]=s1[t]; t++;};
int r=0;
}

char * CStr::Copy(bool q)
{
if (e>=b)
{
int k=0;

char *u;
if (q){
u = new char[n+b-e];
for (int i = 0; i < n+1; i++) if ((i<b) || (i>e)) {u[k]=ptr[i]; k++;};
u[k-1]='\0';
}

if (!q) {
u = new char[e-b+1];
for (int i = 0; i < n+1; i++) if ((i>=b) && (i<=e)) {u[k]=ptr[i]; k++;};
u[k]='\0';
}

return u;
}
}

void CStr::Delete(bool q)
{
if (e>=b) {
char *s=this->Copy(q);
(*this)=s;
delete []s;
}
}

void CStr::operator = (char * ptr1)
{
delete []ptr;
int i=0;
while (ptr1[i]!='\0') i++;
n=i; ptr = new char[i];
for (int i = 0; i < n; i++) ptr[i]=ptr1[i];
};

void CStr::SetMark(int i)
{
	if (b>e) {b=i; e=i;}
	else
	{
		if (i==e+1) e=i; else if (i==b-1) b=i; else if (i==e) e=i-1;
		else if (i==b) b=i+1; else {b=i; e=i;};
	}
}

CStr::~CStr()
{
delete []ptr;
}

CStr::CStr(int x)
{
ptr = new char[x];
for (int i = 0; i < x; i++) ptr[i]=' ';
ptr[x]='\0'; n=x;
}

CStr::CStr(char *ptr1)
{
int i=0;
while (ptr1[i]!='\0') i++;
n=i; ptr = new char[i];
for (int i = 0; i < n; i++) ptr[i]=ptr1[i];
};

void CStr::Draw()
{
Form1->Image1->Canvas->Pen->Width=1;
Form1->Image1->Canvas->Pen->Color = clBlack;
Form1->Image1->Canvas->MoveTo(x,y);
Form1->Image1->Canvas->LineTo(x+w*n,y);
Form1->Image1->Canvas->MoveTo(x,y+h);
Form1->Image1->Canvas->LineTo(x+w*n,y+h);

//++++++++++++++++++++++++++++++
LOGFONT lf;
HFONT hPrevFont, hFont;
AnsiString asFontName="Arial";

ZeroMemory (&lf, sizeof (lf));

lf.lfEscapement = 0;
lstrcpy (lf.lfFaceName, asFontName.c_str());
lf.lfHeight = h-2;
hFont = CreateFontIndirect(&lf);

hPrevFont = SelectObject (Form1->Image1->Canvas->Handle, hFont);
//+++++++++++++++++++++++++++++++


for (int i = 0; i < n; i++) {
Form1->Image1->Canvas->Brush->Color = clWhite;
if ((b<=i) && (i<=e)) {
Form1->Image1->Canvas->Brush->Color = clBlue;
}
Form1->Image1->Canvas->Rectangle(x+i*w,y,x+(i+1)*w,y+h);
Form1->Image1->Canvas->TextOutA(x+i*w+5,y+1,ptr[i]);
}

Form1->Image1->Canvas->Brush->Color = clWhite;
if (cons_f) {
Form1->Image1->Canvas->Brush->Color = RGB(255,255,0);
}
Form1->Image1->Canvas->Rectangle(x-w/2,y,x,y+h/2);

Form1->Image1->Canvas->Brush->Color = clWhite;
if (edit_f) {
Form1->Image1->Canvas->Brush->Color = RGB(255,255,0);
}
Form1->Image1->Canvas->Rectangle(x-w/2,y+h/2,x,y+h);


DeleteObject(hFont);

}

//---------------------------------------------------------------------------

int CStr::Click(int xn,int yn)
{

if ((yn>=y) && (yn<=y+h))
{

for (int i = 0; i < n; i++) {
if (((x+i*w)<=xn) && (xn<(x+(i+1)*w))) return i+1;
}

if (((x-w/2)<=xn) && (xn<=x)) {
if ((y+h/2)<=yn) return -2; else return -1;
}

}
return 0;
}

#pragma package(smart_init)
Соседние файлы в папке Laba4_1