Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: RTF Editor

Sivun loppuun

ANTI-propellipää [17.07.2009 21:47:10]

#

Onko TextBoxin ja RichTextBoxin ominaisuuksia yhdistää yksinkertaisesti?

Muutamia ominaisuuksia jota haluaisin yhdistää:

- Tabilla hyppiminen (AcceptsTab)
- Sanojen tunnistaminen (AutoCompleteSource)
- Rtf Formaatti (RichTextBox)
- Tekstin kohdistaminen (TextAlign)

Grez [18.07.2009 06:57:29]

#

RTF-formaatissahan on mahdollista käyttää useampaa eri tasausta, joten TextAlign ei ole sille mielekäs. Toki voit muuttaa koko teksti alignin joksikin, eli se sinänsä on siinä.

Autocompletesource on selvästikin suunniteltu yksittäisen tiedon syöttämiseen (esim. URL, tiedostonimi, valinta listalta, jne) ja RTF taas tyypillisesti ei ole mielekäs tuollaiseen. Eli näiden miksaaminen tuntuu äkkiseltään epäluontevalta. Millainen tarve tähän olisi?

En nyt muista kummalla tavalla RTB käyttäytyy tabin osalta, mutta jos se on ikäänkuin AcceptsTab=False, niin käänteinen toiminnallisuus on helppo saada pikku koodinpätkällä.

ANTI-propellipää [18.07.2009 12:39:27]

#

Suunnitelin Autocompletesourceea ns. Sanan auto. tunnistukseen, eli ohjelma ehottaisi sanaa kun sitä on alettu kirjoitaa, (ehdotukset tulisivat ContextMenuStrip componenttiin)...
Eli jos käyttäjä lähtee kirjoittamaan sanaa: Koira, niin muutamat ehdoitukset saattavat olla tyyliin: Koulu, Koti, Koira, jne.

ANTI-propellipää [22.07.2009 19:20:20]

#

Osaatteko sanoa miten vb.netissä tehdään tehdään:

- Lihavoinnin vaihto
- Kursiivi / Ei kursiivia
- Alleviivaus / Ei alleviivausta
- Yliviivaus / Ei yliviivausta
- Teksin sisennys / teksin "ulonnus"

Grez [22.07.2009 19:37:23]

#

RTB.Font.Bold = True tai RTB.Font.Bold = False
RTB.Font.Italic = True tai RTB.Font.Italic = False
RTB.Font.Underline = True tai RTB.Font.Underline = False
RTB.Font.Strikeout = True tai RTB.Font.Strikeout = False
RTB.Margin.Left = 50 'Sisennys 50px

ANTI-propellipää [23.07.2009 13:01:08]

#

En vaan osaa, tai noi ei toimi halutulla tavalla...
tulee vaan ilmoitus että:

Property 'Bold' is 'ReadOnly'
Property 'Italic' is 'ReadOnly'
Property 'Underline' is 'ReadOnly'
Property 'Strikeout' is 'ReadOnly'

ja Error 27 kun yritin tota sisennystä...

Grez [23.07.2009 13:13:13]

#

No jopas, olis vissiin pitänyt ihan kokeillakin. Mites olis

Boldille, valitulle alueelle
RTB.SelectionFont = New Font(RTB.SelectionFont, RTB.SelectionFont.Style Xor FontStyle.Bold)

Ja muille tyyleille vastaavasti.

Tai sitten koko boksille:
RTB.Font = New Font(RTB.Font, RTB.Font.Style Xor FontStyle.Bold)

Ja se sisennys on näköjään RTB.SelectionIndent = 50

ANTI-propellipää [23.07.2009 15:10:18]

#

Kiitti, nyt sain toimimaan.

ANTI-propellipää [23.07.2009 16:43:44]

#

Tuli yksi ongelma eteen Kuvan muokkaamisen kanssa...
eli, kun haluaisin muokata kuvaa niin ohjelman pitäisi avata kuva Paintissa.

ps. Paintin avaaminen onnistuu, mutta miten saan paintin lataamaan halutun kuvan?

Antti Laaksonen [23.07.2009 19:52:05]

#

Tiedoston nimen voi kirjoittaa käynnistyskomennon jälkeen:

Shell("mspaint c:\omat\kuva.bmp", AppWinStyle.NormalFocus)

ANTI-propellipää [03.08.2009 14:10:31]

#

Onko teillä tietoa miten saisin ohjelmani avaamaan muita kuin *.txt ja *.rtf formaatissa olevia tiedostoja?
esim. miten saisin avattua *.doc tiedoston?

neau33 [03.08.2009 20:25:03]

#

Moikka ANTI-propellipää!

tässä yksi tapa word-tiedoston (.doc) tekstin lukemiseksi vb6:lla...

'Formille: nappi & textiboxi
Private Sub Command1_Click()

  ' Referenssit:

  ' Microsoft Word 11.0 Object Library"
  ' (C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB)
  ' (vaihda versionumero tarvittaessa)

  ' Microsoft WMI Scripting V1.2 Library
  '(C:\WINDOWS\system32\wbem\wbemdisp.TLB)

   tapa_prosessi "WINWORD"

   Dim appWord As Word.Application
   Dim wrdDoc As Word.Document
   Dim tiedosto As String
   tiedosto = Environ("userprofile") & "\Työpöytä\testi.doc"

   Set appWord = New Word.Application
   Set wrdDoc = appWord.Documents.Open(tiedosto)

   wrdDoc.Application.DisplayAlerts = wdAlertsNone
   wrdDoc.Application.Visible = False

   If wrdDoc.Words.Count > 0 Then
      Dim teksti As String
      Text1.Text = ""
      For i = 1 To wrdDoc.Words.Count
         Text1.Text = Text1.Text _
         + wrdDoc.Words(i).Text
      Next i
   End If

   tapa_prosessi "WINWORD"

   Set wrdDoc = Nothing
   Set appWord = Nothing

End Sub

Sub tapa_prosessi(ByVal AppName As String)

  Dim prosessit As Object, prosessi As Object

  Set prosessit = GetObject _
  ("winmgmts:{impersonationLevel=impersonate}") _
  .InstancesOf("Win32_Process")
  For Each prosessi In prosessit
    With prosessi
      If UCase(.Name) = AppName & ".EXE" Then
        .Terminate
      End If
    End With
  Next

End Sub

ANTI-propellipää [03.08.2009 21:20:33]

#

kiitti, Mutta... saisko vielä vb.net versiota (en omista vb6.tta)

neau33 [03.08.2009 22:08:41]

#

Heippa taas ANTI-propellipää!!

voisit sisällyttää jatkossa aiheesi otsikkoon selvennykseksi .NET - liitteen...
no kun nyt tuli tehtyä, niin sitten niile jotka äheltävät vielä VB6:lla...

' Formille: 2 nappi &  tekstboxi

' Projektiin referenssit:

' Microsoft Word 11.0 Object Library"
' (C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB)
' (vaihda versionumero tarvittaessa)

' Microsoft WMI Scripting V1.2 Library
'(C:\WINDOWS\system32\wbem\wbemdisp.TLB)

Dim appWord As Word.Application
Dim wrdDoc As Word.Document
Dim tiedosto As String

Private Sub Form_LOad()

   Command1.Caption = "Avaa"
   Command2.Caption = "Tallenna"
   Command2.Enabled = False

End Sub

Private Sub Command1_Click()

  'samat referenssit kuin edellisessä esimerkissä

   tiedosto = Environ("userprofile") & "\Työpöytä\testi.doc"
   Text1.Text = ""
   avaa_dokumentti (tiedosto)

   If wrdDoc.Words.Count > 0 Then
      Dim teksti As String
      For i = 1 To wrdDoc.Words.Count
         Text1.Text = Text1.Text + wrdDoc.Words(i).Text
      Next i
   End If

   Text1.Tag = Text1.Text
   sulje_dokumentti

   CommandButton2.Enabled = True

End Sub

Private Sub Command2_Click()

   CommandButton1.Enabled = False

   Dim splitti() As String

   If Text1.Tag <> Text1.Text Then

      If Text1.Text <> "" Then
         If InStr(Text1.Text, " ") > 0 Then

            splitti = Split(Text1.Text, " ")

         Else
            ReDim splitti(0)
            splitti(0) = Text1.Text
         End If
         avaa_dokumentti (tiedosto)
         For i = wrdDoc.Words.Count To 1 Step -1
           wrdDoc.Words(i).Delete
         Next i
         For i = 0 To UBound(splitti)
            If i < UBound(splitti) Then
               splitti(i) = splitti(i) + " "
            End If
            wrdDoc.Words.Last.Text = splitti(i)
         Next i

         wrdDoc.Save

      End If

      sulje_dokumentti

   End If

   Command1.Enabled = True

End Sub

Sub avaa_dokumentti(ByVal nimi As String)

   tapa_prosessi "WINWORD"
   Set appWord = New Word.Application
   appWord.DisplayAlerts = wdAlertsNone
   Set wrdDoc = appWord.Documents.Open(nimi)
   wrdDoc.Application.DisplayAlerts = wdAlertsNone
   wrdDoc.Application.Visible = False

End Sub

Sub sulje_dokumentti()

   wrdDoc.Close False
   tapa_prosessi "WINWORD"
   Set wrdDoc = Nothing
   Set appWord = Nothing

End Sub

Sub tapa_prosessi(ByVal AppName As String)

  Dim prosessit As Object, prosessi As Object

  Set prosessit = GetObject _
  ("winmgmts:{impersonationLevel=impersonate}") _
  .InstancesOf("Win32_Process")
  For Each prosessi In prosessit
    With prosessi
      If UCase(.Name) = AppName & ".EXE" Then
        .Terminate
      End If
    End With
  Next

End Sub

...VB.NET versio seuraa jatkossa...

neau33 [03.08.2009 23:35:19]

#

Heippa taas ANTI-propellipää!!

tässä lupaamani VB.NET versio...

'Väännetty Sharp Develop 3.0:lla
Imports System.Diagnostics
Imports Word 'Projektiin COM referenssi
'Microsoft Word 11.0 Object Library

Imports System.Runtime.InteropServices

'Formille: 2 nappia, tekstiboxi & openFileDialog-kontrolli
Public Partial Class MainForm

   Shared appWord As Word.ApplicationClass
   Shared wrdDoc As Word.Document

   Friend doc_name As String = String.Empty

   Public Sub New()

      Me.InitializeComponent()

   End Sub

   Sub MainFormLoad(sender As Object, e As EventArgs)

      button1.Text = "  AVAA  "
      button2.Text = "TALLENNA"
      button2.Enabled = False

   End Sub

   Sub Button1Click(sender As Object, e As EventArgs)

      OpenFileDialog1.FileName = ""
      OpenFileDialog1.InitialDirectory = _
      Environment.GetFolderPath( _
      Environment.SpecialFolder.Desktop)
      OpenFileDialog1.Filter = _
      "Word Document (*.doc)|*.doc"

      If openFileDialog1.ShowDialog() = _
      System.Windows.Forms.DialogResult.OK Then

         doc_name = OpenFileDialog1.FileName
         textBox1.Text = ""
         Open_Document(doc_name)
         If wrdDoc.Words.Count > 0 Then
            For i As Integer = 1 To wrdDoc.Words.Count
               textBox1.Text += wrdDoc.Words(i).Text
            Next i
            textBox1.Tag = textBox1.Text
            button2.Enabled = True
         End If
         Close_Document
      Else
         doc_name = String.Empty
      End If

   End Sub

   Sub Button2Click(sender As Object, e As EventArgs)

      If doc_name = String.Empty Then
         Exit Sub
      End If

      button1.Enabled = False

         Dim splitti() As String

         If textBox1.Tag <> textBox1.Text Then

           If textBox1.Text <> "" Then

             If textBox1.Text.IndexOf(" ") > -1 Then
               splitti = textBox1.Text.Split(" ")
               Else
                  ReDim splitti(0)
                  splitti(0) = textBox1.Text
               End If
               Open_document(doc_name)
               For i As Integer = wrdDoc.Words.Count To 1 Step -1
                     wrdDoc.Words(i).Delete
               Next i
               For i As Integer = 0 To UBound(splitti)
                  If i < splitti.GetUpperBound(0) Then
                     splitti(i) = splitti(i) + " "
                  End If
                  wrdDoc.Words.Last.Text = splitti(i)
               Next i

               wrdDoc.Save: textBox1.Tag = textBox1.Text

            End If

         Close_Document

      End If

      button1.Enabled = True

   End Sub

   Sub Open_Document(ByVal document As String)

      Kill_Process("WINWORD")
      appWord = New Word.ApplicationClass
      wrdDoc = appWord.Documents.Open(document)
      wrdDoc.Application.DisplayAlerts = False
      wrdDoc.Application.Visible = False

   End Sub

   Sub Close_Document()

      wrdDoc.Close(False)
      Kill_Process("WINWORD")
      wrdDoc = Nothing
      appWord = Nothing

   End Sub

   Sub Kill_Process(ByVal AppName As String)

      Dim MyProcess As Process() = _
      Process.GetProcessesByName(AppName)

      If Not MyProcess Is Nothing Then
         For i As Integer = MyProcess.GetLowerBound(0) _
         To MyProcess.GetUpperBound(0)
            Try
               MyProcess(i).Kill()
            Catch ex As Exception
            End try
         Next
      End If

      MyProcess = Nothing

   End Sub

End Class

ANTI-propellipää [04.08.2009 10:02:40]

#

Kiitti,
Sain toimimaan lähes halutulla tavalla, mutta en saa kuvia näkymään...

neau33 [04.08.2009 12:27:05]

#

MOI taas ANTI-propellipää!!!

tässä sulle 'toimiva' viritelmä...

Imports System.Diagnostics
Imports Word 'Projektiin COM referenssi
'Microsoft Word 11.0 Object Library

Imports System.Runtime.InteropServices

'Formille: 2 nappia, richTextBoxi & openFileDialogi
Public Partial Class MainForm

   Shared appWord As Word.ApplicationClass
   Shared wrdDoc As Word.Document

   Friend doc_name As String = String.Empty

   Public Sub New()

      Me.InitializeComponent()

   End Sub

   Sub MainFormLoad(sender As Object, e As EventArgs)

      button1.Text = "  AVAA  "
      button2.Text = "TALLENNA"
      button2.Enabled = False

   End Sub

   Sub Button1Click(sender As Object, e As EventArgs)

      openFileDialog1.Multiselect = False
      openFileDialog1.InitialDirectory = _
      Environment.GetFolderPath( _
      Environment.SpecialFolder.Desktop)
      openFileDialog1.Filter = _
      "Word Document (*.doc)|*.doc"
      openFileDialog1.DefaultExt = ".doc"
      openFileDialog1.FilterIndex = 0
      openFileDialog1.FileName = ""
      openFileDialog1.DereferenceLinks = False
      openFileDialog1.RestoreDirectory = True

      If openFileDialog1.ShowDialog() = _
      System.Windows.Forms.DialogResult.OK Then

         Dim tempRtfPath As String = _
         openFileDialog1.FileName.Substring(0, _
         openFileDialog1.FileName.LastIndexOf( _
         "\")) + "\tempFile.rtf"
         richTextBox1.Text = ""
         Open_Document(OpenFileDialog1.FileName)
         If wrdDoc.Content.Text <> "" Then

            wrdDoc.SaveAs(tempRtfPath, 6)
            wrdDoc.Close()
            richTextBox1.LoadFile(tempRtfPath)
            kill(tempRtfPath)
            richTextBox1.Tag = richTextBox1.rtf
            button2.Enabled = True

         End If
         Close_Document
      Else
         openFileDialog1.FileName = ""
      End If

   End Sub

   Sub Button2Click(sender As Object, e As EventArgs)

      If OpenFileDialog1.FileName = "" Then
       Exit Sub
      End If

      button1.Enabled = False

       If richTextBox1.Tag <> richTextBox1.rtf Then

          If richTextBox1.rtf <> "" Then
             Open_Document(OpenFileDialog1.FileName)
             wrdDoc.Content.Text = richTextBox1.Rtf
             wrdDoc.SaveAs(OpenFileDialog1.FileName, 0)
             richTextBox1.Tag = richTextBox1.Text
             Close_Document
          End If

       End If

       button1.Enabled = True

   End Sub

   Sub Open_Document(ByVal document As String)

       Kill_Process("WINWORD")
       appWord = New Word.ApplicationClass
       wrdDoc = appWord.Documents.Open(document)
       wrdDoc.Application.DisplayAlerts = False
       wrdDoc.Application.Visible = False

   End Sub

   Sub Close_Document()

      On Error Resume Next
      wrdDoc.Close(False)
      Kill_Process("WINWORD")
      wrdDoc = Nothing
      appWord = Nothing

   End Sub

   Sub Kill_Process(ByVal AppName As String)

      Dim MyProcess As Process() = _
      Process.GetProcessesByName(AppName)

      If Not MyProcess Is Nothing Then

         For i As Integer = MyProcess.GetLowerBound(0) _
         To MyProcess.GetUpperBound(0)
            Try
               MyProcess(i).Kill()
            Catch ex As Exception
            End try
         Next
      End If

      MyProcess = Nothing

   End Sub

End Class

ANTI-propellipää [04.08.2009 16:08:12]

#

Kiitti,
Sain toimimaan...

neau33 [05.08.2009 19:44:28]

#

Moikka taas ANTI-propellipää!

pikku korjaus edelliseen esimerkkiin...voit poistaa tai lisätä kuvia rtfBoxiin ja tallentaa tiedoston lopulta word-dokumenttina (.doc)

Imports System.Diagnostics
Imports Word 'Projektiin COM referenssi
'Microsoft Word 11.0 Object Library

Imports System.Runtime.InteropServices

'Formille: 2 nappia, richTextBoxi & openFileDialogi
Public Partial Class MainForm


   Private appWord As Word.ApplicationClass
   Private wrdDoc As Word.Document
   Private tempRtfPath As String

   Friend doc_name As String = String.Empty

   Public Sub New()

      Me.InitializeComponent()

   End Sub

   Sub MainFormLoad(sender As Object, e As EventArgs)

      button1.Text = "  AVAA  "
      button2.Text = "TALLENNA"
      button2.Enabled = False

   End Sub

   Sub Button1Click(sender As Object, e As EventArgs)

      openFileDialog1.Multiselect = False
      openFileDialog1.InitialDirectory = _
      Environment.GetFolderPath( _
      Environment.SpecialFolder.Desktop)
      openFileDialog1.Filter = _
      "Word Document (*.doc)|*.doc"
      openFileDialog1.DefaultExt = ".doc"
      openFileDialog1.FilterIndex = 0
      openFileDialog1.FileName = ""

      openFileDialog1.DereferenceLinks = False
      openFileDialog1.RestoreDirectory = True

      If openFileDialog1.ShowDialog() = _
      System.Windows.Forms.DialogResult.OK Then

         tempRtfPath = _
         openFileDialog1.FileName.Substring(0, _
         openFileDialog1.FileName.LastIndexOf( _
         "\")) + "\tempFile.rtf"
         richTextBox1.Text = ""
         Open_Document(OpenFileDialog1.FileName)

         If wrdDoc.Content.Text <> "" Then
            wrdDoc.SaveAs(tempRtfPath,6)
            Dim theText As Object = _
            wrdDoc.Content.Text
            wrdDoc.Close()
            richTextBox1.LoadFile(tempRtfPath)
            kill(tempRtfPath)
            richTextBox1.Tag = richTextBox1.rtf
            button2.Enabled = True
         End If
         Close_Document
      Else
         openFileDialog1.FileName = ""
      End If

   End Sub

   Sub Button2Click(sender As Object, e As EventArgs)

      If OpenFileDialog1.FileName = "" Then
         Exit Sub
      End If

      button1.Enabled = False

      If richTextBox1.Tag <> richTextBox1.rtf Then

         If richTextBox1.rtf <> "" Then
            Close_Document
            richTextBox1.SaveFile(tempRtfPath)
            Open_Document(tempRtfPath)
            wrdDoc.SaveAs(OpenFileDialog1.FileName, 0)
            richTextBox1.Tag = richTextBox1.rtf
            Close_Document
            Kill(tempRtfPath)
         End If

      End If

      button1.Enabled = True

   End Sub

   Sub Open_Document(ByVal document As String)

      Kill_Process("WINWORD")
      appWord = New Word.ApplicationClass
      wrdDoc = appWord.Documents.Open(document)
      wrdDoc.Application.DisplayAlerts = False
      wrdDoc.Application.Visible = False

   End Sub

   Sub Close_Document()

      On error resume next
      wrdDoc.Close(False)
      Kill_Process("WINWORD")
      wrdDoc = Nothing
      appWord = Nothing

   End Sub

   Sub Kill_Process(ByVal AppName As String)

      Dim MyProcess As Process() = _
      Process.GetProcessesByName(AppName)

      If Not MyProcess Is Nothing Then

         For i As Integer = MyProcess.GetLowerBound(0) _
         To MyProcess.GetUpperBound(0)
            Try
               MyProcess(i).Kill()
            Catch ex As Exception
            End try
         Next

      End If

      MyProcess = Nothing

   End Sub

End Class

ANTI-propellipää [17.08.2009 16:14:36]

#

Miten kuva lisätään tiedostoon ns. "oikeaoppisesti", itse olen käyttänyt tätä:

- RichTextBox1.Controls.Add(PictureBox1)

Mutta miten saisin tämän jälkeen liikutettua kuvaa haluttuun paikkaan, ja vaihtamaan kuvan "tilaa" eli onko se teksitin ylä/ala puolella...

Kuvan muokkaaminen pitäisi onnistua oik. hiirtä klikkaamalla ja ToolStrip:istä...

Kiitos jo etukäteen...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta