TP7 псевдо графика
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
TP7 псевдо графика - 2010-10-04 10:39:27.690000
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
Слбственно вопрос такой - каким образом в Borland TP 7 можно сделать кнопку, на которую можно бы было нажать курсором мыши? Вот что смог найти
Адрес видеопамяти в текстовом режиме B800:0000
адресация по 2 байта...
0-15 -- Код символа для отображения по таблице аскилл
16-24 -- цвет символа
25-31 -- цвет фона
32 -- бит мерцания
|
|
|
RE: TP7 псевдо графика - 2010-10-04 10:43:18.523333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Turbo Vision
|
|
|
RE: TP7 псевдо графика - 2010-10-04 10:58:04.660000
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
quote:
ORIGINAL: _SaZ_ Turbo Vision я знаю о нём, но оно мне не подходит
|
|
|
RE: TP7 псевдо графика - 2010-10-04 11:22:14.546666
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
А в чём проблема-то? Запрос в гугл не составить? мышь+DOS+asm текстовый+видеобуфер+DOS Или что-то не работает?
|
|
|
RE: TP7 псевдо графика - 2010-10-04 11:55:39.613333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: CepbIu я знаю о нём, но оно мне не подходит Чем не подходит?
|
|
|
RE: TP7 псевдо графика - 2010-10-04 12:02:26.306666
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
мешает не очень хорошее знание асм если возможно - можно бы было пример вод есть хороший код, он прорисовывает курсор мыши .model tiny
.code
org 100h
.186
start:
mov ax,12h
int 10h
mov ax,0
int 33h
mov ax,1
int 33h
mov ax,000Ch
mov cx,0002h
mov dx,offset handler
int 33h
mov ah,0
int 16h
mov ax,000Ch
mov cx,0000h
int 33h
mov ax,3
int 10h
ret
handler:
push 0A000h
pop es
push cs
pop ds
push сх
push dx
mov ax, 2
int 33h
cmp word ptr previous_X,-1
je first_point
call line_bresenham
exit_handler:
pop dx
pop сх
mov previous_X,cx
mov previous_Y,dx
mov ax,1
int 33h
retf
first_point:
call putpixel1b
jmp short exit_handler
line_bresenham:
mov ax, сх
sub ax,previous_X
jns dx_pos
neg ax
mov word ptr X_increment,1
jmp short dx_neg
dx_pos: mov word ptr X_increment,-1
dx_neg: mov bx,dx
sub bx,previous_Y
jns dy_pos
neg bx
mov word ptr Y_increment,1
jmp short dy_neg
dy_pos: mov word ptr Y_increment,-1
dy_neg: shl ax,1
shl bx,1
call putpixel1b
cmp ax,bx
jna dx_le_dy
mov di,ax
shr di,1
neg di
add di,bx
cycle:
cmp ex,word ptr previous_X
je exit_bres
cmp di,0
jl fractlt0
add dx,word ptr Y_increment
sub di,ax
fractlt0:
add cx,word ptr X_increment
add di,bx
call putpixel1b
jmp short cycle
dx_le_dy:
mov di,bx
shr di,1
neg di
add di,ax
cycle2:
cmp dx,word ptr previous_Y
je exit_bres
cmp di,0
jl fractlt02
add cx,word ptr X_increment
sub di,bx
fractlt02:
add dx,word ptr Y_increment
add di,ax
call putpixel1b
jmp short cycle2
exit_bres:
ret
putpixel1b:
pusha
xor bx,bx
mov ax,dx
imul ах,ах,80
push cx
shr сх,3
add ах,сх
mov di,ax
mov si,di
pop cx
mov bx,0080h
and cx,07h
shr bx,cl
lods es:byte ptr some_label
or ax,bx
stosb
рора
ret
previous_X dw -1
previous_Y dw -1
Y_increment dw -1
X_increment dw -1
some_label:
end start
пробывал собрать FASM 1.67.26 - не получилось
|
|
|
RE: TP7 псевдо графика - 2010-10-04 12:03:52.076666
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
quote:
ORIGINAL: _SaZ_ quote:
ORIGINAL: CepbIu я знаю о нём, но оно мне не подходит Чем не подходит? тем что использовать его не разрешили
|
|
|
RE: TP7 псевдо графика - 2010-10-04 14:14:37.230000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Понимаешь, если подходить глобально - то тебе надо свою библиотеку компонент писать. Я когда только начинал учить паскать баловался таким. Знания ассемблера тут совершенно ни к чему. Всё можно сделать средствами паскаля. Достучаться к видео-памяти можно как-то так (может, индексы в другом порядке или синтаксис не такой): var
scr:array[0..25,0..79,0..1] of byte absolute $B800:$0000; Для вызова прерываний (чтобы мышь ловить) вроде есть функция intr. Если честно - лень всё искать ;) и автора двухтомника, где это всё очень подробно расписано не помню.
|
|
|
RE: TP7 псевдо графика - 2010-10-04 14:31:34.490000
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
quote:
ORIGINAL: _SaZ_ Понимаешь, если подходить глобально - то тебе надо свою библиотеку компонент писать. Я когда только начинал учить паскать баловался таким. Знания ассемблера тут совершенно ни к чему. Всё можно сделать средствами паскаля. Достучаться к видео-памяти можно как-то так (может, индексы в другом порядке или синтаксис не такой): var
scr:array[0..25,0..79,0..1] of byte absolute $B800:$0000; Для вызова прерываний (чтобы мышь ловить) вроде есть функция intr. Если честно - лень всё искать ;) и автора двухтомника, где это всё очень подробно расписано не помню. да верно, intr вызывает прерывание(насколько помню 33 - мышь) всё же был бы очень благодарен если бы переступили лень(;
|
|
|
RE: TP7 псевдо графика - 2010-10-04 15:07:14.106666
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: CepbIu пробывал собрать FASM 1.67.26 - не получилось Это пример для masm/tasm. Его надо переделывать под fasm – у фасма несколько иной синтаксис. quote:
ORIGINAL: _SaZ_ Понимаешь, если подходить глобально - то тебе надо свою библиотеку компонент писать. Я когда только начинал учить паскать баловался таким. Знания ассемблера тут совершенно ни к чему. Всё можно сделать средствами паскаля. Достучаться к видео-памяти можно как-то так (может, индексы в другом порядке или синтаксис не такой): … Как я понимаю речь не о том, что лучше/удобнее, а о том что надо использовать. ;) Кроме того, я абсолютно не согласен: в досе надо писать на asm. Там просто не на чем больше писать. Всё остальное выглядит кривым и убогим костылём.
|
|
|
RE: TP7 псевдо графика - 2010-10-04 15:18:49.143333
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
всем спасибо, решение оказалось очень простым uses dos;
var r:registers;
rx,ry:byte;
begin
r.ax:=3;
intr($33,r);
rx:=r.cx;
ry:=r.dx;
end. прорисовать курсор думаю будет не сложно(но если у кого есть желание помочь - заранее спасибо)
|
|
|
RE: TP7 псевдо графика - 2010-10-04 17:00:46.260000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: rgo Кроме того, я абсолютно не согласен: в досе надо писать на asm. Там просто не на чем больше писать. Всё остальное выглядит кривым и убогим костылём. Не совсем понимаю, почему для учебных целей (разобраться с прерываниями / видео-памятью) нужно учить ещё один язык программирования. Нас в своё время в техникуме именно так и учили: паскаль -> архитектура ЭВМ (регистры, видео-память, прерывания, устройства монитора/принтера, буфер клавиатуры и т.п.) -> Си / Asm -> Си + WinAPI -> Базы, сети, веб и пр. Цепочку до сих пор считаю достаточно эффективной, хотя архитектуру ЭВМ можно было давать сразу (или параллельно) после сишки. Для приобретения понимания в таких задачах паскаль - самое оно. Вот те, кому это действительно было интересно смело писали procedure SetVideoMode( mode: byte );
asm;
mov ah, $10
mov al, mode
int $10
end; остальные делали всё по методичке, на паскале.
|
|
|
RE: TP7 псевдо графика - 2010-10-04 17:36:16.523333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: _SaZ_ Не совсем понимаю, почему для учебных целей (разобраться с прерываниями / видео-памятью) нужно учить ещё один язык программирования. Это просто прикольно. Во всяких там win/*nix, не очень. А в досе… ы. Один грязный хак, на другом: закидываем данные в приложение прямой записью в буфер клавиатуры биоса. Но буфер клавиатуры короткий, неудобно по 15 символов за раз писать, значит выделим новый буфер и подменим биосу указатель на буфер. Памяти не хватает в 64K сегменте, с многими сегментами возиться неохота: разместим одноразовый код в начале сегмента выполним его, и скопируем остальной код на место одноразового. Часть этого замучаешься делать на C/Pascal – надо очень дружить с линкером. А иногда и никакая дружба не поможет. Часть таких хаков делается и на C, и на Pascal, но это уже будет неуважением к этим языкам. Не, в досе только на асме. DOS – это ОС для хулиганов от программирования. И соваться в DOS одевая пиджак паскаля… По-моему просто скучно.
|
|
|
RE: TP7 псевдо графика - 2010-10-04 18:18:42.316666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Не спорю, но учитывая то, что люди только начинают учиться и чтобы просто иметь представления - имхо так проще.
|
|
|
RE: TP7 псевдо графика - 2010-10-04 18:22:46.753333
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
quote:
ORIGINAL: _SaZ_ Не спорю, но учитывая то, что люди только начинают учиться и чтобы просто иметь представления - имхо так проще. не начинают, а просто ни когда не было такиз задач ну и вот, сейчас пару часов - и хороший(ну не плохой) псевдо графический интерфейс готов да и вот ты писал как у вас в технаре учили… сейчас такого нету, ни кто понятия не имеет что такое прерывание(ну разве что беременности:D), что такое бухер тоже хрен объяснишь… ну не буду даже говорить о том что сушествуют указатели и динамика…
|
|
|
RE: TP7 псевдо графика - 2010-10-04 18:27:01.610000
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
quote:
ORIGINAL: _SaZ_ Не спорю, но учитывая то, что люди только начинают учиться и чтобы просто иметь представления - имхо так проще. не начинают, а просто ни когда не было такиз задач ну и вот, сейчас пару часов - и хороший(ну не плохой) псевдо графический интерфейс готов да и вот ты писал как у вас в технаре учили… сейчас такого нету, ни кто понятия не имеет что такое прерывание(ну разве что беременности:D), что такое бухер тоже хрен объяснишь… ну не буду даже говорить о том что сушествуют указатели и динамика…
|
|
|
RE: TP7 псевдо графика - 2010-10-05 17:05:39.143333
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
у меня появился дополнительный вопрос - вот получил я координаты мыши… прорисовал с помощью line курсор… в данный момент при передвижении что бы не оставлять след он просто закрашивает за собой место. Знаю что можно сделать что бы он при прохождении какого либо участка запоминал в буфер что находится под них, а когда покидал этот участок обратно возвращял это значени. можно маленький пример как это реализовывается? то что
type tscr=array[0..24,0..79,0..2]of byte;
var scr:tscr absolute $B800:$0000;
....
scr[5,5,0]:=ord(a);
я понимаю, но вот как считать что под курсором если известны координаты(например, 200;156) и потом обратно нарисовать считанное? курсор вот так прорисован
Line(r.cx,r.dx,r.cx+10,r.dx+10);
Line(r.cx,r.dx,r.cx+3,r.dx+7);
Line(r.cx,r.dx,r.cx+8,r.dx+3);
координаты x и y это координаты мыши. Заранее спасибо
|
|
|
RE: TP7 псевдо графика - 2010-10-05 19:07:21.676666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Размер текстела 8 на 8 пикселей. З.Ы. чёт массив у тебя неправильный ;)
|
|
|
RE: TP7 псевдо графика - 2010-10-06 05:49:43.520000
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
я этим способ не пробывал, ибо нет представления(даже малейшего) как это реализовать, тк с паскалем почти не сталкивался
|
|
|
RE: TP7 псевдо графика - 2010-10-06 10:43:07.783333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Каким способом? Сложно координаты на 8 разделить?
|
|
|
RE: TP7 псевдо графика - 2010-10-06 15:42:36.420000
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
quote:
ORIGINAL: _SaZ_ Каким способом? Сложно координаты на 8 разделить? что я не понимаю… советуете разделить получаемые мною координаты на 8 и на прямую обратится к видео памяти? если не сложно - прошу как для тупых(сейчас завал на учёбе и туго соображаю)
|
|
|
RE: TP7 псевдо графика - 2010-10-06 16:06:15.380000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Тебе, как я понял, нужно координаты мыши привести в соответствие с координатами символа на экране? Если да, то формула очень простая: символ = мышь div 8; мышь = символ * 8; Соответственно, считать то, что под курсором - это что-то вроде ch := scr[ r.ry div 8, r.rx div 8, 0 ]; Только это не есть хорошо. Если уж создаёшь кнопки на экране - то лучше заведи отдельный массив, в котором храни координаты всех имеющихся кнопок. И при клике определяй, попала ли мышь в одну из кнопок (сравнивая координаты мыши с координатами всех кнопок).
|
|
|
RE: TP7 псевдо графика - 2010-10-06 16:16:04.580000
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
quote:
ORIGINAL: Свеча Яблочковa Я делал графическое приложение на TP7, с кнопками, для реализации работы с мышью юзал юнит f_mouse (вбей в гугле), там все очень просто и без проблем, которые возникают при использовании костылей. так не интересно:) так не интересно, но вот всё что мне нужно http://borlpasc.narod.ru/docym/farpract/gl4/4_1.htm если кому интересно, это все функции 33h
|
|
|
RE: TP7 псевдо графика - 2010-10-06 16:17:36.483333
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
quote:
ORIGINAL: _SaZ_ Тебе, как я понял, нужно координаты мыши привести в соответствие с координатами символа на экране? Если да, то формула очень простая: символ = мышь div 8; мышь = символ * 8; Соответственно, считать то, что под курсором - это что-то вроде ch := scr[ r.ry div 8, r.rx div 8, 0 ]; Только это не есть хорошо. Если уж создаёшь кнопки на экране - то лучше заведи отдельный массив, в котором храни координаты всех имеющихся кнопок. И при клике определяй, попала ли мышь в одну из кнопок (сравнивая координаты мыши с координатами всех кнопок). не правильно понял а что по поводу совета - я так и делаю(с логикой у меня всё впорядке:))
|
|
|
RE: TP7 псевдо графика - 2010-10-06 17:04:00.650000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Так, давай чёткий вопрос. З.Ы. курсор не нужно прорисовывать вручную, для этого достаточно заюзать соответствующие функции 33-го прерывания.
|
|
|
RE: TP7 псевдо графика - 2010-10-08 05:09:18.453333
|
|
|
CepbIu
Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
|
вот её использовать mov ax,1
int 33h всем спасибо. вопрос закрыт. если кому что то нужно будет по сабжу - пишите в ЛС, дам библиотеку
|
|
|
|
|