Помогите реализовать сортировку, слов. У меня в одном ТехтБоксе
слова, через пробел, по нажатию кнопки надо вывести в другой
ТекстБокс, эти слова, только уже отсортированные по алфавиту. Если,
у кого-нить есть примерчик, то плз дайте. Иль хоть намекните, как это
сделать?
Ответ:
Есть такой простой способ.
Делаешь невидимый ListBox, задаешь свойство Sorted=True.
Слова тебе надо перекинуть из Text1 в Text2
Private Sub Command1_Click()
Dim words() As String
Dim i As Integer
Text2.Text = ""
words = Split(Text1.Text, " ")
With List1
.Clear
For i = 0 To UBound(words)
.AddItem words(i)
Next
For i = 0 To .ListCount - 1
Text2.Text = Text2.Text & .List(i) & " "
Next
End With
В Text2, если надо - убери последний пробел.
Дмитрий Данелия
Вот почти всё что у меня готовое по сортировке (см. прикрепленный файл vb.rar)
Что такое VB .NET, чем он лучше и хуже обычного VB6?
Вопрос:
Что такое VB .NET, чем он лучше и хуже обычного VB6?
Ответ:
Минус вижу только один - вес .NET Framework (24 MB), который нужен для
работы прог, созданных на .NET... Ну и ещё системные требования самого
VS .NET.
Плюсов много. Всё перечислять долго. В .NET Framework много новых
возможностей можно найти от поиска и сортировки массивов до отправки
почты и криптографии. Также более высокая надёжность, полная поддержка
ООП, многопоточность... Советую студию приобрести и самому посмотреть.
ASP+ - просто супер.
Ненарадуюсь ADO+.
В общем на это стоит посмотреть в любом случае.
Такой вопрос. Как организовать заливку Picture плавно переходящим
цветом?
Ответ:
Этот пример создает Form/Picture Box с фоном, например как в
инсталяционной
программе
Установите свойство формы AutoRedraw в True.
Sub Gradient(TheObject As Object, ByVal Redval As Long, ByVal Greenval
As _
Long, ByVal Blueval As Long, ByVal Direction As Integer)
Dim Step As Integer, Reps As Integer, FillTop As Integer
Dim FillLeft As Integer, FillRight As Integer, FillBottom As Integer
If Direction < 1 Or Direction > 4 Then Direction = 1
FillTop = 0
FillLeft = 0
If Direction < 3 Then
Step = (TheObject.Height / 100)
If Direction = 2 Then FillTop = TheObject.Height - Step
FillBottom = FillTop + Step
FillRight = TheObject.Width
Else
Step = (TheObject.Width / 100)
If Direction = 4 Then FillLeft = TheObject.Width - Step
FillRight = FillLeft + Step
FillBottom = TheObject.Height
End If
For Reps = 1 To 100
If Direction = 2 And Reps = 100 Then FillTop = 0
If Direction = 4 And Reps = 100 Then FillLeft = 0
Redval = Redval - 3
Greenval = Greenval - 3
Blueval = Blueval - 3
If Redval <= 0 Then Redval = 0
If Greenval <= 0 Then Greenval = 0
If Blueval <= 0 Then Blueval = 0
TheObject.Line (FillLeft, FillTop)-(FillRight, FillBottom), RGB(Redval, _
Greenval, Blueval), BF
If Direction < 3 Then
If Direction = 1 Then
FillTop = FillBottom
Else
FillTop = FillTop - Step
End If
FillBottom = FillTop + Step
Else
If Direction = 3 Then
FillLeft = FillRight
Else
FillLeft = FillLeft - Step
End If
FillRight = FillLeft + Step
End If
Next Reps
End Sub
Private Sub Form_Load()
'Поэкспериментируйте над цифрами 200, 100, 300
'Замените "1" на 2, 3 или 4
Gradient Me, 200, 100, 300, 1
'Gradient Picture1, 200, 100, 300, 1
End Sub
Private Sub Form_Resize()
'Положите здесь те же номера, что и выше
Gradient Me, 200, 100, 300, 1
'Gradient Picture1, 200, 100, 300, 1
End Sub
Алексей
Вот эти три строки зальют твой PictureBox плавным цветом
(свойство PictureBox Visible = false)
Private Sub Command2_Click()
For i = Picture1.Top To Picture1.Top + Picture1.Height
Line (Picture1.Left, i)-(Picture1.Left + Picture1.Width, i), RGB(0, 0, i
(Picture1.Height / 255)) 'Синий цвет
Next i
End Sub
Иногда в МСДН проскакивают такие слова:
The low-order word of lParam specifies the new width of the client area.
The high-order word of lParam specifies the new height of the client area.
Как это понять и как получить эти старшие и младшие слова?
Ответ:
Есть несколько путей:
1. Создать структуру
type DOUBLEWORD
loword as integer
hiword as integer
end type
Потом обьявить переменную и скопировать в неё
dim dw as DOUBLEWORD
CopyMemory(dw,inp,4), где inp это входящея переменная типа long
2. Сдвигом
dim loword as integer
dim hiword as integer
loword=(inp and 65535)
hiword=(((inp-loword)/65535))' кажется так, я неуверен
Слово (word). Длина 16 бит, на VB это integer.
Двойное слово (dword, doubleword), длина 32 бит, на VB это long.
Соответственно, чтобы получить старшее и младшее слово, нужно long разбить на два integer.
Что-то я не въехал (это наверно от большого ума), всё говорят о каких-то инсталяторах, без которых ничего не работает. А что, просто экзешник нельзя создать и радоваться жизни?
Есть текстбокс с длинным предложением. (мультелине=фалсе)
Как мне по нажатию на кнопку разместить это предложение в 3-х текстбоксах,что бы все члены предложения были видны? Вообще возможно ли это?
Private Sub Command1_Click()
Open "c:\1.txt" For Append As #1
Write #1, "text"
Close #1
End Sub
Используя этот код, получается дописать одну строчку в конце, а не в начале файла как требуется. Помогите решить проблему… Возможно ли строчки в файле сравнивать с записываемыми данными, и если они совпадают, то перемещать строку в начало файла. Возможно ли удалять повторяющиеся или пустые строчки в файле.
Как в VB можно напечатать данные из сетки MSFlexGrid с помощью CommonDialog? И вообще как управляется печать через CommonDialog? С сохранением файла все понятно, а с печатью нет.
И еще как в VB можно открыть(запустить) любой файл, например, xls или txt?
Ответы:
Вопрос:
КАК СДЕЛАТЬ ЧТОБЫ КОПИРОВАЛСЯ ФАИЛ (который яапустил) В ВЫБРАННУЮ ДИРЕКТОРИЮ или КАК ЗАСУНУТЬ В АВТОЗАПУСК ??
На Win95 прекрасно работает WinAPI ExitWindowsEx, или как-то так. В других ОС от MS надо сначала дать программе "права", которые позволяют выключить компьютер. Правильнее сказать - выставить необходимые привилегия для программы и использовать ту же функцию.
function OpenProcessToken (ProcessHandle : THandle; DisiredAccess :
DWORD; var TokenHandle : THandle) : Bool; stdCall;
function LookPrivilegeValue (lpSystemName, lpName : PChar; val
lpLuid : TLargeInteger) : Bool; stdCall;
function AdjustTokenPrivileges (TokenHandle : THandle;
DisableAllPrivileges : Bool; const NewState : TTokenPrivileges; var
ReturnLength : DWORD) : Bool; stdCall; OverLoad;
Могу скинуть иходники под Delphi 6 :)
Вопрос:
Помогите разобраться, надо найти окно по имени и закрыть его.
Делаю:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function PostMessage& Lib "user32" Alias "PostMessageA"
(ByVal hwnd As _
Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
Public Const WM_CLOSE = &H10
Dim sCaption As String
Dim h As Long
sCaption = "Calculator"
h = FindWindow(vbNullString, ByVal sCaption)
If h > 0 Then PostMessage h, WM_CLOSE, 0&, 0&
Оператор для работы в сети, что то новое, я все время думал что Winsock это библиотека, или контрол Winsock.ocx - подключай этот компонент к проекту и работай с ним!
Вопрос решается через комплексные числа.
Если кто не знает (хотя я их кажется в классе 10-ом учил, хотя и понял только на первом курсе), то вот пример:
Вот от этого и надо танцевать. Буквы вместо чисел ставить я не стал, во избежание путаницы. Напомню лишь только, что 35 это в градусах. Там надо ещё подтесать....
Вопрос:
Как сделать так, чтобы таймер в порядке убывания отсчитывал какой-то промежуток времени, и всё это время куда-то выводил результат о том, сколько времени осталось?
Я так понял, что тебе требуется сделать программу либо для опроса либо для тестирования или что-то типа того. Вот, например, отсчитывать время так:
Это в модуль:
Public TimeMinutes, TimeSeconds As Integer
Public Function FGetTime(X As String) 'функция преобразовывает в формат
времени
If Len(X) = 1 Then
FGetTime = "0" & X
Else
FGetTime = X
End If
End Function
Public Function FFGetTime() As String
If Len(CStr(TimeSeconds)) = 1 Then
FFGetTime = TimeMinutes & ":" & "0" & TimeSeconds
End If
If Len(CStr(TimeMinutes)) = 1 Then
FFGetTime = "0" & TimeMinutes & ":" & TimeSeconds
End If
If (Len(CStr(TimeSeconds)) = 1) And (Len(CStr(TimeMinutes)) = 1) Then
FFGetTime = "0" & TimeMinutes & ":" & "0" & TimeSeconds
End If
End Function
На форму помести таймер TmrClock и метку lblTime. А также не забудь задать необходимое время, например, в событии Form_Load. Ну и куда-нибудь впиши запуск таймера:
Private Sub Form_Load()
TimeMinutes = 1
TimeSeconds = 28
End Sub
Private Sub TmrClock_Timer()
TimeSeconds = TimeSeconds - 1
If (TimeSeconds = 0) And (TimeMinutes = 0) Then
Beep
TmrClock.Enabled = False
LblTime.ForeColor = &HFF&
LblTime.Caption = "Время истекло"
'какие-то действия
Exit Sub
End If
If TimeSeconds = 0 Then
TimeSeconds = 60
TimeMinutes = TimeMinutes - 1
End If
LblTime.Caption = FFGetTime
End Sub
Сам все это в таком виде не проверял, но в целом виде я писал это для своей программы. Там все пашет. Если что - пиши.
Private Sub Form_Load()
s = 10
Label1.Caption = Str(s)
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Timer()
s = s - 1
Label1.Caption = Str(s)
If s = 0 Then
MsgBox "Поехали!", vbExclamation, "Запуск прошёл успешно"
End
End If
End Sub
Вопрос:
Как сделать так, чтобы при наведении на кнопку появлялось пояснение?
Функция Rnd генерирует дробное число от 0 до 1. Чтоб получить, например, число от 1 до 10, нужно испльзовать такую конструкцию:
int(rnd*10)+1
Чтоб каждый раз выдавалась новая последовательность нужно перед всем этим написать оператор Ramdomize. Иначе RND будет выдавать каждый раз одну и ту же последовательность.
Случайное число можно сгенерировать двумя, почти что одиноковыми способами:
1. i=rnd*5' В этом случае сгенерируется число в промежутке от 0 до 5. Недостаток этого варианта в том, что при каждом первом обращении число будет одно и тоже.
2. Всё так же но в процедуре Form_load (или любой другой) пропиши Randomize Timer. В это случае число будет действительно случайным.
Private Sub Form_Load()
Randomize
End Sub
Private Sub Command1_Click()
n = 10
Text1 = Int(Rnd * n) + 1
'Генерируется случайное число от 1 до 10
End Sub
Вопрос:
Если ввести переменную в раздел глобальных переменных на одной форме, будет ли одна видна другой?
Не уверен в этом, поэтому никогда не описывал глобальные переменные в модулях форм. Проще создать новый модуль (BAS), присвоить ему имя, а затем декларировать в нём все необходимые глобальные переменные. В дальнейшем не придётся перебирать кучу модулей в поисках имени переменной - всё будет находиться в одном месте. В крайнем случае можно всё это дело украсить комментариями.
Даже если кнопка не твоя (угловая), то должно работать это:
в событии QueryUnload формы:
dim pass as string
pass=inputbox("Куда!!! А попросить?") 'Может что забыл?!
if pass="пожалуйста" then
msgbox "Ладно. Вали отсюда!!!"
else
msgbox "Стоять бояться!"
cancel=1
end if
Можете заполнить эту форму, либо отослать вопрос СЮДА
Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.