Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

TP7 псевдо графика

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> TP7 псевдо графика
Имя
Сообщение << Старые топики   Новые топики >>
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 -- бит мерцания
Post #: 1
RE: TP7 псевдо графика - 2010-10-04 10:43:18.523333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Turbo Vision
Post #: 2
RE: TP7 псевдо графика - 2010-10-04 10:58:04.660000   
CepbIu

Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333

quote:

ORIGINAL: _SaZ_

Turbo Vision

я знаю о нём, но оно мне не подходит
Post #: 3
RE: TP7 псевдо графика - 2010-10-04 11:22:14.546666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
А в чём проблема-то? Запрос в гугл не составить?
мышь+DOS+asm
текстовый+видеобуфер+DOS
Или что-то не работает?
Post #: 4
RE: TP7 псевдо графика - 2010-10-04 11:55:39.613333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: CepbIu

я знаю о нём, но оно мне не подходит

Чем не подходит?
Post #: 5
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 - не получилось
Post #: 6
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

я знаю о нём, но оно мне не подходит

Чем не подходит?

тем что использовать его не разрешили
Post #: 7
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.

Если честно - лень всё искать ;) и автора двухтомника, где это всё очень подробно расписано не помню.
Post #: 8
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 - мышь)

всё же был бы очень благодарен если бы переступили лень(;
Post #: 9
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. Там просто не на чем больше писать. Всё остальное выглядит кривым и убогим костылём.
Post #: 10
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. прорисовать курсор думаю будет не сложно(но если у кого есть желание помочь - заранее спасибо)
Post #: 11
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; остальные делали всё по методичке, на паскале.
Post #: 12
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 одевая пиджак паскаля… По-моему просто скучно.
Post #: 13
RE: TP7 псевдо графика - 2010-10-04 18:18:42.316666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Не спорю, но учитывая то, что люди только начинают учиться и чтобы просто иметь представления - имхо так проще.
Post #: 14
RE: TP7 псевдо графика - 2010-10-04 18:22:46.753333   
CepbIu

Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
quote:

ORIGINAL: _SaZ_

Не спорю, но учитывая то, что люди только начинают учиться и чтобы просто иметь представления - имхо так проще.

не начинают, а просто ни когда не было такиз задач
ну и вот, сейчас пару часов - и хороший(ну не плохой) псевдо графический интерфейс готов

да и вот ты писал как у вас в технаре учили… сейчас такого нету, ни кто понятия не имеет что такое прерывание(ну разве что беременности:D), что такое бухер тоже хрен объяснишь… ну не буду даже говорить о том что сушествуют указатели и динамика…
Post #: 15
RE: TP7 псевдо графика - 2010-10-04 18:27:01.610000   
CepbIu

Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
quote:

ORIGINAL: _SaZ_

Не спорю, но учитывая то, что люди только начинают учиться и чтобы просто иметь представления - имхо так проще.

не начинают, а просто ни когда не было такиз задач
ну и вот, сейчас пару часов - и хороший(ну не плохой) псевдо графический интерфейс готов

да и вот ты писал как у вас в технаре учили… сейчас такого нету, ни кто понятия не имеет что такое прерывание(ну разве что беременности:D), что такое бухер тоже хрен объяснишь… ну не буду даже говорить о том что сушествуют указатели и динамика…
Post #: 16
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 это координаты мыши.

Заранее спасибо
Post #: 17
RE: TP7 псевдо графика - 2010-10-05 19:07:21.676666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Размер текстела 8 на 8 пикселей.

З.Ы. чёт массив у тебя неправильный ;)
Post #: 18
RE: TP7 псевдо графика - 2010-10-06 05:49:43.520000   
CepbIu

Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
я этим способ не пробывал, ибо нет представления(даже малейшего) как это реализовать, тк с паскалем почти не сталкивался
Post #: 19
RE: TP7 псевдо графика - 2010-10-06 10:43:07.783333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Каким способом? Сложно координаты на 8 разделить?
Post #: 20
RE: TP7 псевдо графика - 2010-10-06 15:42:36.420000   
CepbIu

Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333

quote:

ORIGINAL: _SaZ_

Каким способом? Сложно координаты на 8 разделить?

что я не понимаю… советуете разделить получаемые мною координаты на 8 и на прямую обратится к видео памяти?
если не сложно - прошу как для тупых(сейчас завал на учёбе и туго соображаю)
Post #: 21
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 ];

Только это не есть хорошо. Если уж создаёшь кнопки на экране - то лучше заведи отдельный массив, в котором храни координаты всех имеющихся кнопок. И при клике определяй, попала ли мышь в одну из кнопок (сравнивая координаты мыши с координатами всех кнопок).
Post #: 22
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
Post #: 23
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 ];

Только это не есть хорошо. Если уж создаёшь кнопки на экране - то лучше заведи отдельный массив, в котором храни координаты всех имеющихся кнопок. И при клике определяй, попала ли мышь в одну из кнопок (сравнивая координаты мыши с координатами всех кнопок).

не правильно понял

а что по поводу совета - я так и делаю(с логикой у меня всё впорядке:))
Post #: 24
RE: TP7 псевдо графика - 2010-10-06 17:04:00.650000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Так, давай чёткий вопрос.

З.Ы. курсор не нужно прорисовывать вручную, для этого достаточно заюзать соответствующие функции 33-го прерывания.
Post #: 25
RE: TP7 псевдо графика - 2010-10-08 05:09:18.453333   
CepbIu

Сообщений: 391
Оценки: 0
Присоединился: 2010-06-26 05:35:50.293333
вот её использовать
mov ax,1 int 33h всем спасибо. вопрос закрыт. если кому что то нужно будет по сабжу - пишите в ЛС, дам библиотеку
Post #: 26
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> TP7 псевдо графика







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.