Jag hittade en tråd som jag tyckte täckte mitt behov: Tack SvenPon, den biten blev bra. At göra en snygg Printerrutin är ett knåpgöra, men man blir så djä.. tillfredställd Jo den var ju fin, men det var tyvärr inte mycket som jag kunde använda mig av. Jag fick bort några ovälkommna radbrytningar men.... Du skall använda Måste reagera lite på Svens uttalande! Detta kanske är till någon hjälp? Måste bara svara på SvenPon:s utalande. Efter väldigt lång tid med testande, inköp av nya papper osv så har jag löst problemet. Uhmmmmmmmmmmmmmmmmmm ! Nja inte riktigt. Kika på DrawText() api anropet. Finns en tråd som kan var till hjälp: Tack Andreas. Roger skrev > svära över andra personers fel och brister!Skriva ut till Printer
<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
'***********
Private Sub cmdSkriv_Click()
Dim Text As String
Dim Line As Long
Dim LineCount As Long
Dim LineIndex As Long
Dim LineLength As Long
Dim Indent As Long
LineCount = SendMessage(Text2.hwnd, EM_GETLINECOUNT, 0&, ByVal 0&)
For Line = 0 To LineCount - 1
LineIndex = SendMessage(Text2.hwnd, EM_LINEINDEX, Line, ByVal 0&)
LineLength = SendMessage(Text2.hwnd, EM_LINELENGTH, LineIndex, ByVal 0&)
If LineLength Then
Text = Space$(LineLength)
SendMessage Text2.hwnd, EM_GETLINE, Line, ByVal Text
Printer.Print Tab(Indent); Text
Else
Printer.Print
End If
Next
End Sub
</code>
Vad som händer är att documentet lägger sig i kö, men sen så händer ingenting.
Någon som har en idé till förbättring?Sv: Skriva ut till Printer
Men sen är det ju det med marginalerna, hur ändrar jag det.
Jag tittade lite på Pelles "PrintKurs", men...
<code>
Printer.FontName = "Arial"
Printer.FontSize = 12
Printer.FontBold = True
Printer.CurrentX = 700 '200
Printer.CurrentY = 700
Printer.Print "MuliLanguage, skriv följande svenska meningar till språk som talas i " & Trim(del)
Printer.FontSize = 8
Printer.FontBold = False
Printer.CurrentX = 1000
Printer.CurrentY = 700
</code>
Jag ville alltså ha en överskrivt (som du ser). med en viss fontstorlek, därefter så ville jag ner ett antal rader (chansar på Printer.CurrentX = 1000
Printer.CurrentY = 700) och sen skriva ut resten med teckenstorleken 8.
Två saker går åt he---te.
Jag får inget mellanrum mellan rubrik och text, samt att i rubriken får jag marginal, men inte resten.
Går detta att fixa till??Sv: Skriva ut till Printer
när det blir en snygg utskrift.
Ta hem mitt uppskick Programarkivet:551 Segeltävlingar , där lade jag ner ganska mycket
tid och energi på jus Printerrutinen.Sv: Skriva ut till Printer
Det största problemet är att jag får inte till top och sid marginalerna. Inte ens efter att ha lus läst din kod.
Några tips?Sv: Skriva ut till Printer
Printer.ScaleMode = 7 'Centmeter
Då har du koll på CurrentX och CurrentY i cm Obs också 10 delar
Printer.FontSize = 18
Printer.CurrentX = 2.5 :Printer.CurrentY = 1.5
Printer.Print "Rubrikrad"
Printer.FontSize = 10
Printer.Print
Printer.Print
Printer.CurrentX = 2.5
Printer.Print "Brödtext" ' testa att sätta ; eller , direkt efter "Brödtext";
Printer.Print "Mera Brödtext"
Printer.EndDoc
'Det flyger inte in nån djä... stekta sparvar i käften på en.
Har lagt ner hundratals timmar på sådana här problem, testa för helvete !!
Blir så djä.. sur på nissar som tror att man skall lösa hela deras prob och när man märker
att dom ens inte provat och analyserat de förslag man kommit med. !
Rådet blir som vanligt " Gå över till frimärkssamling", mycket enklare.Sv: Skriva ut till Printer
Det är väl ingen som tvingar dig till att svara på inlägg, men du väljer att göra det, då borde du inte ha en sådan uppblåst attityd och svära över andra personers fel och brister!
// RogerSv: Skriva ut till Printer
<code>
Private Sub cmdSkriv_Click()
Dim Text As String
Dim Line As Long
Dim LineCount As Long
Dim LineIndex As Long
Dim LineLength As Long
Dim Indent As Long
Dim RowHeight As Single
Dim X AS single, Y As Single
Dim MarginLeft AS single, MarginTop As Single
RowHeight = Printer.TextHeight("")
MarginLeft = Printer.ScaleX(2.5, vbCentimeters)
MarginTop = Printer.ScaleX(1.5, vbCentimeters)
X = MarginLeft
Y = MarginTop
LineCount = SendMessage(Text2.hwnd, EM_GETLINECOUNT, 0&, ByVal 0&)
For Line = 0 To LineCount - 1
LineIndex = SendMessage(Text2.hwnd, EM_LINEINDEX, Line, ByVal 0&)
LineLength = SendMessage(Text2.hwnd, EM_LINELENGTH, LineIndex, ByVal 0&)
If LineLength Then
Text = Space$(LineLength)
SendMessage Text2.hwnd, EM_GETLINE, Line, ByVal Text
Printer.CurrentX = X
Printer.CurrentY = Y
Printer.Print Tab(Indent); Text
End If
Y = Y + RowHeight
If Y > Printer.ScaleHeight Then
Y = MarginTop
Printer.NewPage
End If
Next
End Sub
</code>Sv: Skriva ut till Printer
Om du för ett ögonblick tror att det första jag gör, när jag får problem, är att skriva hit, då tror du fel.
Jag sitter alltid och försöker att lösa mina problem själv, endera via mina böcker, utskrivna koder eller internet, innan jag ställer frågorna här.
Om du hade tagit dig tid att läsa mitt inlägg, så såg du att jag hade fått ett lustigt problem, då borde du har förstått att jag hadde problem.
Om man sedan använder sig av den attityden som du har, då borde man söka hjälp, du har tydligen problem med att umgås med människor. Allt hänger inte på en fd marin officer.
Mycket besviken på dig SvenPonSv: Skriva ut till Printer
Jag var tvungen att lägga det i en array, för att jag skulle få med marginalen på vänster sida.
<code>
Hela = Split(Form1.Text2.Text, vbCrLf)
Dim i As Integer
Printer.CurrentX = 2.5
For i = 0 To UBound(Hela)
Bit = Hela(i)
Printer.CurrentX = 2.5
Printer.Print Bit
Next
Printer.Print
</code>
Nu kan jag änteligen gå vidare till nästa problem.Sv: Skriva ut till Printer
Inte underlgt jag blir irreterad , har get ett svar som är heltäckande,
så ökar du bara tempot och frågar sånt som ligger framför dig på bordet.
Ha det
SvenSv: Skriva ut till Printer
Jag trodde att allt var klart, men det visar sig att om arrayen är för lång, då skriver den "utanför" papperet.
Suck.
En tanke, kan man inte få in texten i en picturebox, skulle det bli lättare?Sv: Skriva ut till Printer
[Printer.print för textsträng]Sv: Skriva ut till Printer
Där fick jag de uppslag jag behövde. Jag skrotade min kod (snyft) och använde den ena av dem.
När jag sedan körde en replace på vbCrl-tecken innan texten klistrades in i min textbox, så blev det kanon.
Tack alla för hjälp(gäller SvenPon också)Sv: Skriva ut till Printer
Hade frågan legat i NybörjarForum hade det blivit ett annat tonläge.!