Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
ВнизТерминал на канве Найти похожие ветки
← →
DmT (2008-05-28 11:22) [0]Суть такая:
Надо рисовать на канве терминал(командную строку)
при этом чтобы можно было прокручивать текст
текст моноширинный.
← →
clickmaker © (2008-05-28 11:25) [1]а не проще ее в Memo выводить?
← →
DmT (2008-05-28 11:30) [2]Еслиб можно было на мемо выводить, я бы не спрашивал ;-)
ну по сути сейчас все сводится к тому что мне надо получить строку номер которой задан в переменной(ну назавем Pos).
при этом стоит учесть что одна сторока может не влазить на одну "экранную " строку, и тогда она займет большее кол-во строк.
← →
Palladin © (2008-05-28 11:32) [3]а, представляешь, в мемо так и есть, сколько бы линий на экране не занимала строка при включеном WordWrap индекс у нее будет один
← →
DmT (2008-05-28 11:50) [4]да мне по барабану на мемо! мне вообще нельзя использовать компоненты!
Все что есть - канва и рисование. и из этого надо слепить командную строку типа bash или cmd
← →
Palladin © (2008-05-28 11:52) [5]и чего ты тогда хочешь"то? кода готового? волшебного пендаля? с какой целью твой пост возник? даже вопроса нет, некий поток сознания
← →
DmT (2008-05-28 11:56) [6]
> ну по сути сейчас все сводится к тому что мне надо получить
> строку номер которой задан в переменной(ну назавем Pos).
> при этом стоит учесть что одна сторока может не влазить
> на одну "экранную " строку, и тогда она займет большее кол-во строк.
вот что мне надо.
← →
DiamondShark © (2008-05-28 12:25) [7]
> вот что мне надо.
Надо -- делай.
А телепаты в отпуске, поэтому тут никто не в курсе, откуда и каким образом у тебя надо получить строку, номер чего в чём у тебя задан и откуда у тебя взялась канва при запрете на компоненты.
Если вся проблема в том, как нарисовать строку на канве, то втыкай в функцию DrawText, она и рисует, и перенос делает и расчёт высоты и ширины строк производит.
Если это не то, что ты хотел, то потрудись выражать свои мысли яснее. То, что ты тут написал, хоть и похоже на русский текст, но смысла имеет очень мало.
← →
DmT (2008-05-28 12:32) [8]контролов нет по тому что это будет переноситься на мобилу(на си)
А прошу тут, просто потому что это один из лучших форумов по программированию.
DrawText не подходит.
вот чисто примерное описание нужного терминала
type
TTerminal=class(TObject)
Left,Top:integer; //тут
Heigth,Width:integer; //и тут все понятно
Text:string; //собсно текст терминала
Pos:integer; //номер строки которая выводится в самом низу выделенной области(ну или с небольшим отступом)
private
{...}
public
{...}
end;
← →
Умище (2008-05-28 12:54) [9]
> DmT (28.05.08 12:32) [8]
Стандартный подход - для каждой строки/объекта, которые выводятся на канву, создаётся структура, в которой хранятся все атрибуты, в том числе и текущие координаты объекта на канве.
← →
DiamondShark © (2008-05-28 12:58) [10]
> контролов нет по тому что это будет переноситься на мобилу(на
> си)
> А прошу тут, просто потому что это один из лучших форумов
> по программированию.
Дешёвая лесть тебе не поможет, потому что этот форум хоть и один из лучших по программированию, но программируют тут преимущественно на Дельфи под Винду на ПК, а не на си на мобилу.
Но -- фигня. Тут ещё и одни из лучших телепатов и пытателей партизан. Видишь, не прошло и трёх постов, как ты раскололся и про си, и про мобилу.
Продолжим пытать, или сам расскажешь, что за мобила, какой у неё API?
Сам-то пробовал её API поизучать? Мысли возникали?
Надеюсь, ты понимаешь, что с такой постановкой: "написать чего-то для какой-то там безымянной мобилы" тебе мало кто поможет?
← →
DmT (2008-05-28 13:13) [11]Да я и не скрывался. И кстати лесть тут не причем.
На мобилах Siemens, Motorola, SonyEricsson появилась такая фича - Elf Pack
http://ru.wikipedia.org/wiki/Executable_and_Linkable_Format
Конкретно я пишу для моторолы. и на си перепишу сам.
API полностью не раскрыт, но его уже достаточно для создания подобного приложения. ну канва, фс и системные ф-и есть + куча всяких других ф-й.
Сам по себе терминал хотелось бы оформить в лучших традициях =)
Цель - вывод отладочной информации + тестово-исполнительная часть. ну и функции работы с фс.
на этом надеюсь флуд закончен.
← →
Плохиш © (2008-05-28 13:17) [12]
> DmT (28.05.08 11:22)
> Суть такая:
> Надо рисовать на канве терминал(командную строку)
> DmT (28.05.08 12:32) [8]
> контролов нет по тому что это будет переноситься на мобилу(на
> си)
Есть подозрение, что мобилу можно будет выбрасывать после первого же запуска этой чудо поделки горе-кодера... И вообще какой-то длинный и тернистый путь ты выбрал для реализации бесполезной фичи, хотя бы потому, что API у мобилы и виндовс для PC отличаются, сначала убъёшь несколько лет своей драгоценной жизни на реализацию того, что, возможно, в API мобилы делается одной функцией...
← →
Умище (2008-05-28 13:20) [13]Удалено модератором
← →
DmT (2008-05-28 13:20) [14]Удалено модератором
← →
DiamondShark © (2008-05-28 14:02) [15]Удалено модератором
← →
DiamondShark © (2008-05-28 14:03) [16]Ты действительно не понимаешь, что реализация твоей задачи зависит от того, какие примитивы доступны в твоём "непольностью раскрытом" API?
А эту информацию из тебя приходится клещами вытягивать, хотя это именно ТЫ должен был её максимально подробно изложить.
Допустим, в твоём API есть такие примитивы: "Определить размеры видимой части канвы", "Вывести строку (символ) в заданную позицию", "Определить размеры строки (символа)".
В этом случае твоя задача -- дедсадовская задачка на алгоритмирование.
Есть у тебя такие примитивы? Если есть, в чём проблема?
Рассказывай, что ты пытался делать, и в чём трудность?
← →
Умище (2008-05-28 14:06) [17]Удалено модератором
← →
DmT (2008-05-28 21:14) [18]Вся возможная работа с канвой имеется.
Т.е. получить длинну строки, размеры канвы и т.д.
вообщем вот:
/*******************************/
//создать Canvas
UIS_DIALOG_T UIS_CreateColorCanvas( SU_PORT_T *port,
DRAWING_BUFFER_T * drawing_buffer,
BOOL use_soft_icon_area );
/* Цвета поумолчанию
BackgroundColor - white
FillColor - white
ForegroundColor - blue
*/
/*******************************/
// рисует линию
void UIS_CanvasDrawLine(GRAPHIC_POINT_T begin,
GRAPHIC_POINT_T end,
UIS_DIALOG_T handle);
// рисует закрашенный прямоугольник
void UIS_CanvasFillRect(GRAPHIC_REGION_T region,
UIS_DIALOG_T handle);
// рисует прямоугольник
void UIS_CanvasDrawRect(GRAPHIC_REGION_T region,
BOOL fill, // заливка
UIS_DIALOG_T handle);
// рисует закруглённый прямоугольник
void UIS_CanvasDrawRoundRect(GRAPHIC_REGION_T region,
UINT16 arcW, // горизонтальный диаметр скругления
UINT16 arcH, // вертикальный диаметр скругления
BOOL fill,
UIS_DIALOG_T handle);
// рисует дугу окружности или эллипса
void UIS_CanvasDrawArc(GRAPHIC_REGION_T region,
UINT16 startAngle, // начальный угол.
UINT16 arcAngle, // конечный угол
BOOL fill,
UIS_DIALOG_T handle);
// рисует многоугольник
void UIS_CanvasDrawPoly(UINT16 number_of_vertices,
GRAPHIC_POINT_T *array,
BOOL fill,
UIS_DIALOG_T handle);
/*******************************/
// рисует строку
void UIS_CanvasDrawColorText( WCHAR *string,
UINT16 offset,
UINT16 strlen, // длинна строки
GRAPHIC_POINT_T anchor_point, // координаты точки привязки
UINT16 anchor_value, // значение точки привязки. Например: ANCHOR_LEFT | ANCHOR_TOP
UIS_DIALOG_T handle);
// задаёт шрифт
UINT32 UIS_CanvasSetFont( UINT8 font_id, // 0 - NetMonitor, 1- General Font... загляните в MotoLangEditor
UIS_DIALOG_T handle);
//возвращает стиль шрифта
UINT8 UIS_CanvasGetFontStyle(UIS_DIALOG_T handle);
// задает стиль шрифта
UINT32 UIS_CanvasSetFontStyle(UINT8 font_style, UIS_DIALOG_T handle);
// возвращает размер строки
UINT32 UIS_CanvasGetStringSize( WCHAR * str,
GRAPHIC_METRIC_T * string_size, // размер строки
UINT8 font_id );
// размер шрифта
UINT32 UIS_CanvasGetFontSize ( UINT8 font_id, GRAPHIC_METRIC_T * font_size);
/*******************************/
// рисует картику
UINT32 UIS_CanvasDrawImage(UINT8 picture_type, // тип. откуда будем брать картинку. DRM, файл....
PICTURE_TYPE_UNION_T picture_data,
GRAPHIC_POINT_T anchor_point,
UINT16 anchor_value,
UINT8 drawOp,
UIS_DIALOG_T handle);
UINT32 UIS_CanvasDrawWallpaper(CANVAS_IMAGE_HANDLE_T image_handle,
GRAPHIC_REGION_T srcArea,
GRAPHIC_REGION_T destRegion,
UINT8 drawOp,
WALLPAPER_LAYOUT_T layout,
UIS_DIALOG_T handle);
// открывает картинку
CANVAS_IMAGE_HANDLE_T UIS_CanvasOpenImage(UINT8 picture_type,
PICTURE_TYPE_UNION_T picture_data);
// открывает картинку и получает её размер
CANVAS_IMAGE_HANDLE_T UIS_CanvasOpenImageAndGetSize(UINT8 picture_type,
PICTURE_TYPE_UNION_T picture_data,
GRAPHIC_POINT_T *attributes);
// закрывает картинку
UINT32 UIS_CanvasCloseImage(CANVAS_IMAGE_HANDLE_T image_handle);
// изменение размера
UINT32 UIS_CanvasResizeImage(CANVAS_IMAGE_HANDLE_T image_handle,
UINT16 percent, // zoom в процентах
GRAPHIC_REGION_T srcArea, // Исходный размер изображения
GRAPHIC_REGION_T destRegion,// новый размер
UINT8 drawOp,
UIS_DIALOG_T handle);
// возвращает размер изображения
GRAPHIC_POINT_T UIS_CanvasGetImageSize(UINT8 picture_type,
PICTURE_TYPE_UNION_T picture_data);
// устанавливает аттрибут
UINT32 UIS_CanvasSetImageAttribute(CANVAS_IMAGE_HANDLE_T image_handle,
IMAGE_ATTRIBUTE_TYPE_T attribute_type,
void* attribute_value);
// получает аттрибут
UINT32 UIS_CanvasGetImageAttribute(CANVAS_IMAGE_HANDLE_T image_handle,
IMAGE_ATTRIBUTE_TYPE_T attribute_type,
void* attribute_value);
// преобразует картинку в буфер pointer
UINT32 UIS_CanvasDecodeImageToPointer(CANVAS_IMAGE_HANDLE_T image_handle, void* pointer);
// вставляет буфер pointer
UINT32 UIS_CanvasInsert(UIS_DIALOG_T handle,void* pointer, GRAPHIC_POINT_T point);
// перемещает регион
UINT32 UIS_CanvasMoveRegion(GRAPHIC_REGION_T source_region,
GRAPHIC_REGION_T dest_region,
UIS_DIALOG_T handle);
/*******************************/
// задает цвет заливки
void UIS_CanvasSetFillColor(COLOR_T color);
// возвращает цвет заливки
COLOR_T UIS_CanvasGetFillColor(void);
// задает цвет для линий, прямоугольников, текста.....
void UIS_CanvasSetForegroundColor(COLOR_T color);
// возвращает цвет для линий, прямоугольников, текста.....
COLOR_T UIS_CanvasGetForegroundColor(void);
void UIS_CanvasSetBackgroundColor(COLOR_T color);
COLOR_T UIS_CanvasGetBackgroundColor(void);
// ширина линии
void UIS_CanvasSetLineWidth(UINT16 width);
UINT16 UIS_CanvasGetLineWidth(void);
/*******************************/
// обновление экрана
void UIS_CanvasRefreshDisplayRegion(UIS_DIALOG_T handle, GRAPHIC_REGION_T region);
void UIS_CanvasRefreshDisplayBuffer(UIS_DIALOG_T handle);
/*******************************/
//возвращает возможную глубину цвета в битах
UINT32 UIS_CanvasGetColorDepth (void);
// возвращает размер дисплея
GRAPHIC_POINT_T UIS_CanvasGetDisplaySize(void);
трудность в том что мне надо сначало написать парсер строк(это пол беды) и ещё делить строки на несколько если она не влазит в одну строку на экране.
Ну и в завершении всего надо чтобы работал скрул, но я упростил для себя задачу: просто передается переменная Pos в которой указан номер строки которая должна быть нарисована в самом низу экрана(канвы)
← →
DmT (2008-05-29 09:19) [19]Ну разделитель строк я написал:
function restring(str:Ansistring; width:integer):Ansistring;
var i,j:integer;
begin
i:=0;j:=0;
while (i<Length(str)) do begin
j:=j+1;i:=i+1;
if (j = width) then begin
result:=result+#13#10;
j:=1;
end;
if(str[i-1]=#10)then j:=1;
result:=result+str[i];
end;
оталось только скрол написать
← →
brother © (2008-05-29 10:34) [20]скролл на канве? и как его прокручивать? клавиатурой? или мышей?)))
если клавой то ты близко к цели...
подскажу, отрисовывай текст не с начальных символов... мозг включен?
← →
DmT (2008-05-29 11:26) [21]включен))
С клавиатуры естественно.
допустим по нажатию вниз/вверх, скролимся.
ну в общем виде надо так чтобы скролился до указаной строки.
← →
DmT (2008-05-29 21:49) [22]Дак есть какие нибудь идеи по реализации моей простьбы?
Пожалуйста.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.042 c