Вывод графики...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Вывод графики...

Сообщение Шурик » 21.06.2004 (Пн) 13:31

Я особа с графикой на ВБ не дружил :) Для многих не секрет как это делалось раньше в DOS.
Допустим как на ASM:
Код: Выделить всё
mov ax,1
mov dx,100
....
....
....
int &H13


или как на Turbobasic'е:
Код: Выделить всё
reg 1,1
reg 3,100
....
....
....
Call Interrupt &H13

Короче говоря я хочу вывести графику без GDI, DirectX и т.п.
Вот по этому и спрашиваю, можно ли выводить графику через прямое записывание байтов в видеопамять, соответсвенно без вызова прерывания на изменение видеорежима??? И вообще если это возможно, то рационально вобще использовать этот метод??? И поможет использование ASM в VB???
Токо не смейтесь над моим вопросом, просто не сталкивался особо с графикой в VB. Если будите смеяца, я тогда тоже сосмеху умру :lol: :lol: :lol:
Оптимист понимаешь 8) :D

CyberYen
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 10.03.2004 (Ср) 18:14

Сообщение CyberYen » 21.06.2004 (Пн) 13:52

Шурик писал(а):Короче говоря я хочу вывести графику без GDI, DirectX и т.п.

А смысл? Если не ошибаюсь, GDI, DirectX и т.п опт. и упрощает работу с графикой.... :roll:

Lord_Satan
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 08.12.2001 (Сб) 10:26
Откуда: П.-К.

Сообщение Lord_Satan » 21.06.2004 (Пн) 13:56

SAFEARRAY не канает?
вроде как тоже байтики пишеш в память
Space Ace says: "Whant to be a DREAD courier?"

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 21.06.2004 (Пн) 14:02

CyberYen писал(а):
Шурик писал(а):Короче говоря я хочу вывести графику без GDI, DirectX и т.п.

А смысл? Если не ошибаюсь, GDI, DirectX и т.п опт. и упрощает работу с графикой.... :roll:

Это понятно, я просто думаю что так быстрее...хотя и не уверен :?
Lord_Satan писал(а):SAFEARRAY не канает?
вроде как тоже байтики пишеш в память


Ну и как это должно выглядеть???

Lord_Satan
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 08.12.2001 (Сб) 10:26
Откуда: П.-К.

Сообщение Lord_Satan » 21.06.2004 (Пн) 15:04

Ну примеров полно
есть даже modArraySubst, вроде правильно написАл, он по инету гуляет

а выглядит так:

Грузиш пиктуру в image
получаеш указатель на начало данных в свой массив...........

блин в этом же форуме есть примеры,
или вы шутить изволите?

лучше ответь на мою тему
http://bbs.vbstreets.ru/viewtopic.php?t=8276
Space Ace says: "Whant to be a DREAD courier?"

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 21.06.2004 (Пн) 15:46

Да нафига мне массивы... мне нужно так:
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.06.2004 (Пн) 16:07

NT просто прибьет твой процесс за нарушение границ по памяти, вот и все. Или сам свалишься рано или поздно, что еще более вероятно.
И еще: а на чьем именно окне ты собираешься рисовать эти загогулины? Окно зарефрешат, и нет твоей зарисовки...

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 21.06.2004 (Пн) 16:16

Ennor писал(а):NT просто прибьет твой процесс за нарушение границ по памяти, вот и все. Или сам свалишься рано или поздно, что еще более вероятно.
И еще: а на чьем именно окне ты собираешься рисовать эти загогулины? Окно зарефрешат, и нет твоей зарисовки...


Вооооооо....... Спасибо дружище что разъяснил... (я тоже об этом думал, но не знал, что оно так и есть) Вобщем как я понял это не реально.... Зато идея была хорошая :D Тогда еще вопросик. А какие участки памяти нельзя использовать????

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.06.2004 (Пн) 16:23

При работе в среде NT у тебя вся память - виртуальная. Ну, 4 гига, типа :) И друг от друга процессы ой как хорошо изолированы. Средства общения есть, ясен пень, но по умолчанию все закрыто по полной.
Признаться, не знаю, как именно винда с железной видеопамятью работает, но то, что рисовать по-хорошему тебе позволено только в своих окнах - это точно. Отсюда думай сам - сделать прозрачное окно на весь экран, и на его hWnd... Как говорится, "дайте мне адрес видеобуфера, и я переверну экран", (С) не помню.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 21.06.2004 (Пн) 16:46

Блин проклятая винда, фиг куда залезешь :D
Да, с прозрачностью - тоже альтернатива. Спасибо за подсказку. :D :wink:

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 22.06.2004 (Вт) 0:42

2 Шурик: Тёзка, как говорится - что хотели, то и получайте. :)

Как на рисунке показано так у тебя и будет.

Копируй код в форму и запускай
Код: Выделить всё
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Type POINTAPI
        x As Long
        y As Long
End Type
Dim WDC As Long
Dim PT As POINTAPI
Dim PEN As Long
Private Sub Form_Activate()
WDC = GetDesktopWindow
WDC = GetWindowDC(WDC)
PEN = CreatePen(0, 1, vbRed)
SelectObject WDC, PEN
Do
GetCursorPos PT
LineTo WDC, PT.x, PT.y
MoveToEx WDC, PT.x, PT.y, PT
Sleep 2
DoEvents
Loop
End Sub
Private Sub Form_Unload(Cancel As Integer)
DeleteObject PEN
End
End Sub


P.S Я помню, что ты просил без GDI, но зато точ в точ как на рисунке :D :roll:

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 22.06.2004 (Вт) 12:34

Спасибо огромное!!! :D
Попробую... 8)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList