Помогите с текстом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
новичоок
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 03.06.2006 (Сб) 14:15

Помогите с текстом

Сообщение новичоок » 03.06.2006 (Сб) 14:19

Народ, вот делаю программу для своей домашней библиотеке, хочу сделать чтоб файлы *.TXT открывались в виде книги как в прогах для чтения книг (Text-Reader programs, ToM Reader) я сделал чтоб файлы открывались ToM Reader , хочется сделать такую вещь самому , а как не соображу. Может кто знает как помогите.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 03.06.2006 (Сб) 18:17

Что значит ввиде книги?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.06.2006 (Сб) 18:35

Имеется в виду ассоциирование программы с расширением.

В поиск.

новичоок
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 03.06.2006 (Сб) 14:15

Сообщение новичоок » 03.06.2006 (Сб) 19:57

Нет надо чтоб текстовый файл открывался не как обычно на одном листе , а как в книге, возьми открой книгу и поймещь. Вот посмотри присоеденяю картинку :D
Вложения
текст книгой.JPG
текст книгой.JPG (192.93 Кб) Просмотров: 1235

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 03.06.2006 (Сб) 20:25

Берёшь 2 лейбла и помещаешь в каждый текста сколько надо... Потом смещаешь...
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 03.06.2006 (Сб) 20:33

Label'ам ставишь BackStyle = Transperant, WordWrap = True

под лэйблы кладёшь Image с изображением книги (без текста, разумеется)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

новичоок
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 03.06.2006 (Сб) 14:15

Сообщение новичоок » 04.06.2006 (Вс) 19:53

Мужики, ну здорово не пинайте меня, я только месяц VB пробую.
Сделал как вы сказали , но текстовый файл открывается в одном Label
помогите как сделать чтоб он открывался сначала в одной Label и дойдя до конца Label начинал открываться в другой Label

zaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 27.03.2006 (Пн) 23:04

Сообщение zaf » 04.06.2006 (Вс) 20:04

новичоок писал(а):Мужики, ну здорово не пинайте меня, я только месяц VB пробую.
Сделал как вы сказали , но текстовый файл открывается в одном Label
помогите как сделать чтоб он открывался сначала в одной Label и дойдя до конца Label начинал открываться в другой Label


Код: Выделить всё
A = Str(Text)
If A > 10000 Then ' Тогда первые 10000 символов в одну сторону другие в другую сторону

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 04.06.2006 (Вс) 20:06

zaf
:shock:
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

zaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 27.03.2006 (Пн) 23:04

Сообщение zaf » 04.06.2006 (Вс) 20:15

Роман-вб писал(а):zaf
:shock:


чАво? :wink:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 04.06.2006 (Вс) 22:03

Код: Выделить всё
A > 10000
- неправильно. Правильно так
Код: Выделить всё
Len(A) > 10000
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

новичоок
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 03.06.2006 (Сб) 14:15

Сообщение новичоок » 05.06.2006 (Пн) 21:24

Мужики, ну никак невъеду, че надо делать "не бейте новичка"
Вот мой код, честно говорю взял с исходника:
Dim strFileName As String
Dim strFileContent As String
Dim nFreeFile As Long
Dim nFileLenght As Long

Private Sub cdStart_Click()
cdCommonDialog.ShowOpen
strFileName = cdCommonDialog.FileName
nFreeFile = FreeFile

If strFileName <> "" Then
Open strFileName For Input As nFreeFile
nFileLenght = FileLen(strFileName)
strFileContent = Input(nFileLenght, #nFreeFile)
Label1.Caption = strFileContent
Label2.Caption = strFileContent
End If
End Sub

как сделать чтоб он открывался сначала в одной Label и дойдя до конца Label начинал открываться в другой Label

Если я Вас зае... то так и скажите пристовать небуду заранее благодарен :) :) :)

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 05.06.2006 (Пн) 23:58

как сделать чтоб он открывался сначала в одной Label и дойдя до конца Label начинал открываться в другой Label


Интересно, а где конец у лейбла?

Выгрузи текст в переменную, и Mid$'ом нарежь ;о)
Пора уже всем хорошим людям собраться и убить всех плохих людей.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.06.2006 (Вт) 6:38

Я бы порекоммендовал делать не Label на страницу, а Label на строчку. и делить текст на строчки сплитом, а потом показывать нужный range массива.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 06.06.2006 (Вт) 7:25

А я бы порекомендовал делать не Label на строчку, а Label на страницу, просто туда добавлять текст по строкам (разделенный сплитом)

zaf
Лучше так:

Код: Выделить всё
Dim strFileName As String
Dim strFileContent As String
Dim nFreeFile As Long
Dim nFileLenght As Long

Private Sub cdStart_Click()

   cdCommonDialog.ShowOpen
   strFileName = cdCommonDialog.FileName
   nFreeFile = FreeFile

   If strFileName <> "" Then

      Open strFileName For Input As nFreeFile
      nFileLenght = FileLen(strFileName)
      strFileContent = Input(nFileLenght, #nFreeFile)

      Dim nChr As Long

      For nChr = 1 To 1000 'Символы 1-1000 помещаются на Label1
         Label1.Caption = Label1.Caption & Mid(strFileContent, nChr, 1)
      Next

      For nChr = nChr To 2000 'Символы 1000-2000 помещаются на Label2
         Label2.Caption = Label2.Caption & Mid(strFileContent, nChr, 1)
      Next

   End If

End Sub
Подпись находится в стадии разработки...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.06.2006 (Вт) 7:57

Угу.
Текст такого вот содержания:
Код: Выделить всё
- Да.
- Нет!
- ДА!
- НЕТ!!!
[ещё десяток таких же строк]


Говоришь, 1000 символов в этом случае на страницу будет?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.06.2006 (Вт) 8:25

Дорабатывай.
Код: Выделить всё
Option Explicit

Private Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, ByRef lpParam As Any) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function GetClientRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long


Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Private Type CHARRANGE
  cpMin As Long
  cpMax As Long
End Type

Private Type FORMATRANGE
  hdc As Long
  hdcTarget As Long
  rc As RECT
  rcPage As RECT
  chrg As CHARRANGE
End Type

Private Type POINTL
  x As Long
  y As Long
End Type

Private Const WM_USER As Long = &H400
Private Const EM_FORMATRANGE As Long = (WM_USER + 57)
Private Const WM_SETTEXT As Long = &HC
Private Const WS_CHILD As Long = &H40000000
Private Const WM_GETFONT As Long = &H31
Private Const WM_SETFONT As Long = &H30

Private Const ES_MULTILINE As Long = &H4&

Private Const EM_GETLINECOUNT As Long = &HBA
Private Const EM_LINEINDEX As Long = &HBB
Private Const EM_CHARFROMPOS As Long = &HD7
Private Const EM_LINEFROMCHAR As Long = &HC9


Private h As Long
Private WithEvents btnUp As CommandButton, WithEvents btnDown As CommandButton

Private CurPage As Long
Private TotalLinesCount As Long, VisibleLinesCount As Long

Private Sub btnDown_Click()
  CurPage = CurPage + 2
 
  DrawPage Me.Controls("shpLeftPage"), CurPage
  DrawPage Me.Controls("shpRightPage"), CurPage + 1
End Sub

Private Sub btnUp_Click()
  CurPage = CurPage - 2
  If CurPage < 0 Then CurPage = 0
 
  DrawPage Me.Controls("shpLeftPage"), CurPage
  DrawPage Me.Controls("shpRightPage"), CurPage + 1
End Sub



Private Sub Form_Load()
  Dim s As String, pl As POINTL, r As RECT
 
  Me.Width = 9330
  Me.Height = 7560
 
  With Me.Controls.Add("vb.shape", "shpLeftPage")
    .Left = 120
    .Top = 120
    .Width = 4215
    .Height = 6855
    .Visible = True
  End With
 
  With Me.Controls.Add("vb.shape", "shpRightPage")
    .Left = 4560
    .Top = 120
    .Width = 4215
    .Height = 6855
    .Visible = True
  End With
 
  Set btnUp = Me.Controls.Add("vb.CommandButton", "btnUp")
  btnUp.Left = 4560 + 4215 + 50
  btnUp.Top = 120
  btnUp.Width = 300
  btnUp.Height = 300
  btnUp.Font.Name = "Wingdings"
  btnUp.Caption = "й"
  btnUp.Visible = True
 
  Set btnDown = Me.Controls.Add("vb.CommandButton", "btnDown")
  btnDown.Left = 4560 + 4215 + 50
  btnDown.Top = Me.Controls("shpRightPage").Top + Me.Controls("shpRightPage").Height - 300
  btnDown.Width = 300
  btnDown.Height = 300
  btnDown.Font.Name = "Wingdings"
  btnDown.Caption = "к"
  btnDown.Visible = True
 
  h = CreateWindowEx(0, "RichEdit20A", vbNullString, WS_CHILD Or ES_MULTILINE, 0, 0, Me.ScaleX(Me.Controls("shpLeftPage").Width, Me.ScaleMode, vbPixels), Me.ScaleY(Me.Controls("shpLeftPage").Height, Me.ScaleMode, vbPixels), Me.hwnd, 0, App.hInstance, ByVal 0&)
  SendMessage h, WM_SETFONT, SendMessage(Me.hwnd, WM_GETFONT, 0, ByVal 0&), ByVal 0&
 
 
  Open "c:\book.txt" For Input Access Read As #1
  s = Input$(LOF(1), 1)
  Close #1
 
  SendMessage h, WM_SETTEXT, 0, ByVal s
  TotalLinesCount = SendMessage(h, EM_GETLINECOUNT, 0, ByVal 0&)
 
  GetClientRect h, r
  pl.x = r.Left + 1
  pl.y = r.Bottom - 1
 
  VisibleLinesCount = SendMessage(h, EM_LINEFROMCHAR, SendMessage(h, EM_CHARFROMPOS, 0, pl), ByVal 0&)
End Sub


Private Sub DrawPage(ByVal s As Shape, ByVal PageNum As Long)
  Dim f As FORMATRANGE
 
 
  f.rc.Left = Me.ScaleX(s.Left, Me.ScaleMode, vbTwips)
  f.rc.Right = f.rc.Left + Me.ScaleX(s.Width, Me.ScaleMode, vbTwips)
  f.rc.Top = Me.ScaleY(s.Top, Me.ScaleMode, vbTwips)
  f.rc.Bottom = f.rc.Top + Me.ScaleY(s.Height, Me.ScaleMode, vbTwips)
 
  f.rcPage = f.rc
 
  f.hdc = Me.hdc
  f.hdcTarget = Me.hdc
 
 
  f.chrg.cpMin = SendMessage(h, EM_LINEINDEX, PageNum * VisibleLinesCount, ByVal 0&)
  f.chrg.cpMax = SendMessage(h, EM_LINEINDEX, (PageNum + 1) * VisibleLinesCount, ByVal 0&)
 
  If f.chrg.cpMin = -1 Then Exit Sub
  'If f.chrg.cpMax = -1 Then
  '
  'End If
   
  SendMessage h, EM_FORMATRANGE, 1, f
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 06.06.2006 (Вт) 9:00

GSerg
o_O
Ты думаешь, новичоок способен доработать ЭТО???
Подпись находится в стадии разработки...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.06.2006 (Вт) 9:19

Ну да. Это примерно как, чтобы научился плавать, бросить в воду.
Нагрузив кирпичами.
Лучший способ понять что-то самому — объяснить это другому.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 06.06.2006 (Вт) 9:22

Antonariy
Ну нет, если плавание - элементарно, то VB для новичка - это ужасно сложный набор строчек и символов!
Подпись находится в стадии разработки...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.06.2006 (Вт) 9:29

Если отбросить декларации функций и констант, а также код, которые создаёт контролы (потому что их можно накидать в дизайнере), остаётся 20 простых и понятных строчек. Вникать в суть которых даже не надо. Просто вызывать DrawPage.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 06.06.2006 (Вт) 11:30

В том-то и вся проблемма, что "декларации функций и констант, а также код, которые создаёт контролы" создают основную массу программного кода...
Подпись находится в стадии разработки...

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 06.06.2006 (Вт) 15:36

Давайте-ка разберемся: как вырезать, допустим, три слова из середины строки?
Подпись находится в стадии разработки...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.06.2006 (Вт) 15:40

видимо вначале надо определится, что это за слова, потом найти их (InStr) и вырезать (Mid$)
Весь мир матрица, а мы в нем потоки байтов!

новичоок
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 03.06.2006 (Сб) 14:15

Сообщение новичоок » 06.06.2006 (Вт) 16:27

Ребята огромное всем спасибо за помощь
Конь
прав для меня все это сложновато. Сейчас вот обложился книгами по
Visual Basic 6 сижу читаю, думаю для меня это будет полезно

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 07.06.2006 (Ср) 8:57

новичоок
Нестрашно, через пару лет будешь даже без книг разбираться! (как я:) )

!Viper!
А если слово не известно, известно только его положение в тексте (порядок)
Подпись находится в стадии разработки...

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 07.06.2006 (Ср) 9:03

А если слово не известно, известно только его положение в тексте (порядок)


Нестрашно, через пару лет будешь даже без книг разбираться! (как я )


Как первое противоположно второму... Конь лукавит!

Тогда только Mid$ :о/
Пора уже всем хорошим людям собраться и убить всех плохих людей.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 07.06.2006 (Ср) 9:19

Конь писал(а):!Viper!
А если слово не известно, известно только его положение в тексте (порядок)


Хм... Тогда Split() -> замена нужных по индексу слов на "" -> Join

или поиск разделителей заданное количество раз и все-тот же Mid$
Весь мир матрица, а мы в нем потоки байтов!

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 07.06.2006 (Ср) 9:46

Как первое противоположно второму... Конь лукавит!


Это вас как понять? :)
Подпись находится в стадии разработки...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 07.06.2006 (Ср) 10:48

Это первое:

А если слово не известно, известно только его положение в тексте (порядок)


А это второе:

Нестрашно, через пару лет будешь даже без книг разбираться! (как я )


Первое противоречит второму, ибо если бы было второе, то не было бы первого. А если есть первое, то второе не есть истина. :)
Весь мир матрица, а мы в нем потоки байтов!

След.

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

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

Сейчас этот форум просматривают: Google-бот и гости: 81

    TopList