har en textbox som är satt som multiline. Vill skriva ut data som finns i den med printer .print. Det funkar, men problemet är att när en radbrytning sker så skriv texten ut längst till vänster igen. Jag har skrivit på följande sätt: Ändra Scale left för att skapa en marginal. Eller så splitar du upp på rader och skriver ut radvis. Har kikat på detta tips, men den säger ifrån på sub SendMessage... Testa: Tyvärr funkade inte det heller, ger snart upp... Hej Igen Fick dettta kodexempel som förslag, men programmet säger ifrån på SendMessage, kan vara ngt att spinna vidare på, några förslag någon? Hej. Hej Nu måste Vi få ordning på ditt problem Hej Sven Hej Om du ska använda API kan du skriva så här: Hej igen Hej alla VB programmerare :-DPrinterutskrift av flerradig textbox
Printer.Print Tab(10), txtMed
jag vill ha all text tabbad på 10:e kolumnen, hur göra?Sv: Printerutskrift av flerradig textbox
Sv: Printerutskrift av flerradig textbox
Sv: Printerutskrift av flerradig textbox
<code>
Printer.Print Tab(10), Replace(txtMed, vbCrLf, Tab(10) & vbCrLf)
</code>
Borde nog funka.Sv: Printerutskrift av flerradig textbox
Expected expression...Sv: Printerutskrift av flerradig textbox
Några synpunkter
Så här bör det till att börja med se ut.
Printer.Print ;Tab(10); Replace(txtMed, vbCrLf, Tab(10) & vbCrLf)
SvenSv: Printerutskrift av flerradig textbox
För att få riktig kontroll
Dim tmpStr As String
tmpStr = Replace(txtMed.Text, vbCrLf, Tab(10) & vbCrLf)
'undra om man kan skriva så (raden ovan Tab(10)
'testa då att byt ut Tab(10) i raden ovan med Space(10)
Printer.Print ;Tab(10);tmpStr
Sven igenSv: Printerutskrift av flerradig textbox
Dim i As Integer
Dim TextLines As Long
Dim TextBuff As String
Dim CharRet As Long
Printer.CurrentY = 2000
' Get number of lines in text box
TextLines = SendMessage(txtList.hwnd, &HBA, 0, 0)
' Extract & print each line in TextBox
For i = 0 To TextLines - 1
TextBuff = Space(1000)
Printer.CurrentX =3000
' Setup buffer for the line!
Mid(TextBuff, 1, 1) = Chr(79 And &HFF)
Mid(TextBuff, 2, 1) = Chr(79 And &H100)
CharRet = SendMessage(txtList.hwnd, &HC4, i, ByVal TextBuff)
Printer.Print Left(TextBuff, CharRet)
Next i Sv: Printerutskrift av flerradig textbox
Ser ut som om deklarationen av SendMessage saknas.
Lägg denna i deklarationsavsnittet på sidan eller i en modul:
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
//freddaSv: Printerutskrift av flerradig textbox
Provkör detta och justera efter behov.
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Any) As Long
Private Sub Command1_Click()
Dim i As Long
Dim TextLines As Long
Dim TextBuff As String
Dim CharRet As Long
Printer.ScaleMode = 7 'Centimeter
Printer.FontName = "Arial"
Printer.FontSize = 10
' Printer.FontBold = True
Printer.CurrentY = 3 ' Centimeter från toppen justera själv
'******* justera efter behov ********
' Get number of lines in text box
TextLines = SendMessage(txtMed.hwnd, &HBA, 0&, 0&)
' Extract & print each line in TextBox
For i = 0 To TextLines - 1
TextBuff = Space(1000)
Printer.CurrentX = 3 ' Centimeter från vänster justera själv
' Setup buffer for the line!
'Chr$(87) = "W" bredaste bokstaven
Mid(TextBuff, 1, 1) = Chr$(87 And &HFF)
Mid(TextBuff, 2, 1) = Chr$(87 And &H100)
CharRet = SendMessage(txtMed.hwnd, &HC4, i,TextBuff)
Printer.Print Left$(TextBuff, CharRet)
Next i
Printer.EndDoc
End Sub
Och skriv nu inte "Det funkar inte" Tala i stället om vad du
får för felmeddelande eller andra kommentarer så man
förstår vad du vill åstadkomma.
mvh
SvenSv: Printerutskrift av flerradig textbox
Jag testade ditt förslag eftersom jag själv är rätt intresserad av utsrkifter men får detta felmedelande.
Complite error Type Mismath.
På denna rad (TextLines = SendMessage(txtMed.hwnd, &HBA, 0, 0) på sista nollan.
Mvh
TobbeSv: Printerutskrift av flerradig textbox
Oki exemplet är taget från Tips O Trix
Kollade ett exempel som jag har som funkar
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Any) As Long
Obs ! skall vara ByVal wParam As Long Dvs byt ut deklarationen
mot den här ovan.
TextLines = SendMessage(txtMed.hwnd, &HBA, 0&, 0&)
Under förutsättning att det finns en txtMed som innehåller ett
antal rade så borde detta funka.
nästa SendMessage skall se ut så här
CharRet = SendMessage(txtMed.hwnd, &HC4, i, TextBuff)
och i skall vara Long
Intresserad av ditt resultat.
SendMessage är ett av dom lurigaste API
mvh
SvenSv: Printerutskrift av flerradig textbox
<code>
Private Const EM_GETLINE = &HC4
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Const EM_GETLINECOUNT = &HBA
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Sub PrintTextBox(Textbox As Textbox, Optional Indent As Long)
Dim Text As String
Dim Line As Long
Dim LineCount As Long
Dim LineIndex As Long
Dim LineLength As Long
LineCount = SendMessage(Textbox.hwnd, EM_GETLINECOUNT, 0&, ByVal 0&)
For Line = 0 To LineCount - 1
LineIndex = SendMessage(Textbox.hwnd, EM_LINEINDEX, Line, ByVal 0&)
LineLength = SendMessage(Textbox.hwnd, EM_LINELENGTH, LineIndex, ByVal 0&)
If LineLength Then
Text = Space$(LineLength)
SendMessage Textbox.hwnd, EM_GETLINE, Line, ByVal Text
Printer.Print Tab(Indent); Text
Else
Printer.Print
End If
Next
End Sub
</code>
Eller om du är smart så gör du på det enkla sättet:
<code>
Sub PrintText(Text As String, Optional Indent As Long)
Dim ScaleLeft As Single
ScaleLeft = Printer.ScaleLeft
Printer.ScaleLeft = -Indent
Printer.CurrentX = 0
Printer.Print Text
Printer.ScaleLeft = ScaleLeft
End Sub
</code>
Tänk på att Indent är i printerns ScaleMode. Så du kan använda TextWidth:
<code>
PrintText Text1.Text, Printer.TextWidth(Space(10))
</code>Sv: Printerutskrift av flerradig textbox
Jag har lagt upp ett exempel i Filarean Programarkivet:API SendMessage Printer
Printer från TextBox typ tidningsspalter.
mvh
SvenSv: Printerutskrift av flerradig textbox
Vill bara tala om att till slut så kom det en lsöning på mitt problem som jag är mkt nöjd med. Det var Andreas Hillqvist som skrev en mkt smart lösning. Jg vill härmed tacka SAMTLIGA för all er hjälp i detta till synes enkla problem. Ett speciellt tack till SvenPon för att engagerat dig så i mitt problem....
Detta är ett helt underbart bra forum och jag hoppas att jag ska kunna återgälda den hjälp ni har givit mig i form av hjälp om/när ni kör fast i något problem..
Väl mött!