Хорошо это работает здесь:
<html>
<head>
<style type="text/css">
span.button {
background: #eee;
border: 1px solid #ccc;
}
span.button input {
background:none;
border:0;
margin:0;
padding:0;
}
</style>
</head>
<body>
<span class="button"><input type="button" name="..." value="Button"/></span>
</body>
</html>
Joel said some good stuff about VB6 back in 2001.
Many VB6 programs are spaghetti, either because they're done as quick and dirty one-offs, or because they're written by hack programmers without training in object oriented programming, or even structured programming.
What I wondered was, what happens if you take top-notch C++ programmers who dream in pointers, and let them code in VB6. What I discovered at Fog Creek was that they become super-efficient кодирующие машины. Код выглядит красиво хорошо, объектно-ориентированный и надежный, но вы не тратите время на использование инструментов которые на уровне ниже, чем ты необходимость. Я годами писал код для C ++ / MFC и годы написания кода на Visual Basic, и позвольте мне сказать вам, VB6 просто намного, намного продуктивнее ...
Одна из особенностей Visual Basic 6 в том, что это не всегда дает вам доступ к полному репертуару Полезности Windows, которые нужно сделать отполированное приложение. Но что это делает лучше, чем любой другой среда программирования, позволяет перейти в код C ++ (или вызвать C API) когда ты в отчаянии или когда тебе нужно that extra speed.
That was written in 2001: when creating a new Windows program today, IMHO the obvious choice for best productivity is VB.Net or C#. (JOKE: C# is just Visual Basic with semicolons.)
Getting back to VB6: there are many good examples of how to call C APIs to do something special or just to run faster. Here's some of my favourite links:
Одна неприятная уловка заключалась в злоупотреблении CallWindowProc
для вызова произвольного кода путем передачи на него указателя. Это технически нарушает контракт этой функции, так как она должна использоваться только с дескрипторами (а не с указателями прямого кода), полученными через GetWindowLong
; но на практике так мало людей знают об этом, что реализация вынуждена допускать произвольные указатели кода. Это позволяет вызывать любой указатель на функцию, если он stdcall
, и принимает 4 аргумента того же размера, что и аргументы WndProc
.
Еще один неприятный трюк, который является следствием вышесказанное заключается в том, что вы можете динамически генерировать код таким образом - просто вставьте его в массив байтов и используйте CallWindowProc
, чтобы перейти к нему. Таким образом, вы можете встроить собственный код, не созданный на основе VB6, в приложение VB6 без каких-либо внешних DLL. Конечно, в наше время, когда бит NX включен по умолчанию, это, вероятно, уже не такая уж хорошая идея (если она вообще когда-либо была) ...
Я не уверен, что он кладет в свои бутерброды, но почти все, что можно найти в Расширенный Visual Basic 6 Мэтью Керленда , - это использование VB6 в программировании «толкни границы». Действительно отличный материал.
Не могу оставить этот вопрос без ответа, в котором упоминается Hardcore Visual Basic Брюса МакКинни, который теперь (замечательно) доступен в Интернете:
Это отличное чтение от автора, который явно любит дух Basic.
Понимание того, что большинство шаблонов проектирования «Банды четырех» полагаются на реализацию интерфейса, а не на наследование, и поэтому их можно легко использовать в Visual BASIC 6.
Возможность сделать это значительно улучшила дизайн моего приложения CAD / CAM.
Подклассы Пола Кэтона, продолжение ЛаВольпа ( http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=68737 ) позволяет делать все, что вам нужно, подключаясь к событиям Windows, без сбоев IDE. Благодаря этому вы можете реализовать в Windows все, что необходимо. В образцах есть безумные вещи, о которых вы, возможно, даже не думали.