Inhalt Picturebox in Zwischenablage

hallo Primax,

mir ist da noch etwas eingefallen.

Du kannst auf deinem Formular ein 'RichTextBox.Control' einsetzen und dieses schon komplett formatiert mit Überschriften, Adressfelder,Texte, Bild usw. füllen.

Einfügen von Bilder in die RTF-Box geht sehr einfach mit der Zwischenablage. :)

Mit dem ShellExecute-Befehl kannst du dann das RTF-Dokument mit MS Word aufrufen lassen.

Das wars schon. :(

ANI
 
Morgen ANI

wenn ich dich jetzt richtig verstanden habe, soll ich die Images alle auf dem Form direkt erstellen, und dann mit savepicture das Form quasi als Image speichern.
Probiere das jetzt mal aus. Melde mich dann...

P.S.: habe gerade damit angefangen, was ist A1...A5 ein laufender Name für Bilder?

Hallo ANI,
es läuft! zumindest zum Teil! Das mit dem Bild, habe ich nun dank deiner Hilfe hin bekommen.
Aber jetzt möchte ich an jedes Bild noch ein Label anfügen. Wie mache ich das? Bei einem Label gibt es ja keine Loadpic.!
grüße
Primax

Noch etwas, das erstellte Bild ist max. so groß wie mein Screen!? Wenn meine grafische Ausgabe aber z.B. höher als der Screen ist, werden nur die Bilder angezeigt, die auf einen Screen 1024*768 passen. Auf mein Ausgabefrom ist aber mehr als nur dieser Ausschnitt vorhanden. Wie kann ich die volle Ausgabe in eine Datei speichern?
grüße primax
 
Zuletzt bearbeitet:
hallo Primax,

A1, A2, A3 usw. wären deine Images auf deinem großen Bild, was du erstellen möchtest. Z.B. sollen die kleinen Bilder nur 200 x 200 Pixel groß sein. Also ist A1.width = 200 und A1.Height = 200.

Wenn dein Bild größer als die Form wird, benutze bitte eine Picturebox. Diese kann im ausgeblendeten Zustand wesentlich größer als dein Screen dargestellt werden. AutoRedraw = True

Um ein Label an das Bild zu kleben machst du folgendes:

'printen von oben, unterhalb vom Image
PictureBox1.CurrentY = A1.height + 10
'printen von Links, Text zentrieren
PictureBox1.CurrentX = (A1.width/2) - (PictureBox1.Textwidth("Labeltext")/2)
'Label schreiben
PictureBox1.Print "Labeltext"

Ich hoffe du verstehs dies einigermassen.

ANI
 
guten morgen

doch doch habe es einigermaßen verstanden...

Aber direkt noch eine Anmerkung:
Das was du jetzt vorgeschlagen hast ist ja ein Print auf die Form. Dabei kann ich nicht die Hintergrundfarbe einstellen wie das bei einem Label möglich ist

Anbei noch ein kleines Problem! Ich habe die Ausgabe nun so umgebaut, wie du es vorgeschlagen hast. Das heißt ich erstelle sie auf einer PictureBox mit paintpicture. Jetzt kann ich aber die Hintergrundfrabe nicht mehr ändern, denn dann sind die erstellten Bilder wieder weg! Die Idee... ich habe das Form für die Bildschirmausgabe mit einem blauen Hintergrund, wenn ich es drucken lasse, soll es aber mit weißem Hintergrund gedruckt werden.... hast du dazu auch eine Idee?

grüße Primax
 
hallo Primax,

natürlich kannst du für das Label, welches du unter die Images hast printen lassen, den Hintergrund ändern. Printe vorher, bevor du den Namen unter das Bild printest, ein Rechteck mit der dementsprechenden FillColor-Farbe.

Um eine Picturebox einzufärben, gehst du folgendermaßen vor:

Picturebox.Cls
Picturebox.Backcolor = DeineFarbe

Dies muß erfolgen bevor der erste Zugriff (Print) auf die Picturebox stattfindet.

Nun kommt eine entscheidene Frage:
Ist der Prozess, der die Images in die PictureBox printet wiederholbar?

Wenn Ja, kein Problem. Dann einfach die BackColor-Farbe austauschen und den gleichen Prozess noch einmal durchlaufen lassen.

Wenn Nein, dann erstellst du dir einfach gleichzeitig zwei Pictureboxen (PicVorschau, PicDrucken), die eine mit blauem und die andere mit weisem Hintergrund.
Dann in beiden den gleichen Füllprozess ablaufen lassen.

Ich hoffe, daß ich mich verständlich ausgedrückt habe.

ANI
 
Hallo Ani

Als erstes Mal muß ich Dir ein großes Lob aussprechen, Deine Tipps waren echt super! Vielen Dank für die viele Hilfe!

Anbei habe ich aber noch ein klitze kleines Problemchen...
Bei der Ausgabe erstelle ich nun mit painpicture Bilder auf dem Ausgabeform. Ich habe im Formload des forms eine prozedure, in der ich Scrollbalken einbinde... Das funktioniert soweit sehr gut. Ich rufe das Fenster auf, als erstes (in der Formload-Funktion) wird die Erstellung ausgeführt, und danach werden die Scrollbalken angezeigt (falls erforderlich).
Das Problem ist nun, ich habe eine andere Funktion auf dem Formular, mit der man die Anordnung der Objekte ändern kann. Und zwar folgendermaßen:
Als erstes fragt dich das Programm wieviele Objekte du in horizontaler Richtung erstellen möchtest und dann zu jedem horizontalen Objekt wieviele vertikalen Objekte du erstellen möchtest.
Und genso ist es auch Programmiert (der Ablauf ist genauso, nicht gefaket!)
Jetzt habe ich das Problem, das nach dem Umsortieren, zwar die Picturebox, die für die Scrollbalken relevant ist, vergrößert wird, aber es werden keine Scrollbalken dazu angezeit!
Ich hätte gedacht, das die Scrollbalken mit meiner Prozedure automatisch erscheinen, sobald sich die Größe des Forms dem entsprechen ändert! Hast du eine Idee?

Grüße Primax...

Hier der Code für die Scrollbalken...
Picture1, ist die Picturebox die im Hintergrund liegt. Sie wird immer mit der Anordnung geändert!

Private Sub Form_Load()
If Not Lademerker Then
Umrechnungsfaktor = 20
Call Ausgabe 'Hier rufe ich die normale Ausgabe auf! Das Ändern der Anordnung wird erst auf dem erstellten Formular gestartet!
End If

'wird für die Scrollbalken benötigt
FrmLoading = True
With Me
.Width = 5000 \ Umrechnungsfaktor
.Height = 4000 \ Umrechnungsfaktor
End With
With Picture1
.BorderStyle = 0
.Move 0, 0
PicBoxWidth = .Width
PicBoxHeight = .Height
End With
With Picture2
.Height = HGHTWDTH
.Width = HGHTWDTH
.BorderStyle = 0
.ZOrder 0
End With
With HScroll1
.left = 0
.Height = HGHTWDTH
.TabStop = False
.ZOrder 0
End With
With VScroll1
.Top = 0
.Width = HGHTWDTH
.TabStop = False
.ZOrder 0
End With
FrmLoading = False
End Sub

Private Sub Form_Resize()
If FrmLoading Or Me.WindowState = vbMinimized Then Exit Sub
Call GetScrollBars
End Sub

Private Sub GetScrollBars()
Dim Height As Single
Dim Width As Single
Dim HScroll As Boolean
Dim VScroll As Boolean

On Error Resume Next
Width = Me.ScaleWidth
Height = Me.ScaleHeight

HScroll = CBool(Width < PicBoxWidth)
If HScroll Then
Height = Height - HGHTWDTH
End If

VScroll = CBool(Height < PicBoxHeight)
If VScroll Then
Width = Width - HGHTWDTH

If Not HScroll Then
HScroll = CBool(Width < PicBoxWidth)
If HScroll Then
Height = Height - HGHTWDTH
End If
End If
End If
If HScroll Then
With HScroll1
.Top = Height
.Width = Width
.Min = 0
.Max = PicBoxWidth - Width
.LargeChange = Picture1.Width * 0.1
.SmallChange = .LargeChange / 4
.Visible = True
End With
Else
With HScroll1
.Value = 0
.Visible = False
End With
End If
If VScroll Then
With VScroll1
.left = Width
.Height = Height
.Min = 0
.Max = PicBoxHeight - Height
.LargeChange = Picture1.Height * 0.1
.SmallChange = .LargeChange / 4
.Visible = True
End With
Else
With VScroll1
.Value = 0
.Visible = False
End With
End If
If HScroll1.Visible And VScroll1.Visible Then
With Picture2
.Move VScroll1.left, HScroll1.Top
.Visible = True
End With
Else
Picture2.Visible = False
End If
End Sub

Private Sub HScroll1_Change()
Picture1.left = -HScroll1.Value
End Sub

Private Sub HScroll1_Scroll()
HScroll1_Change
End Sub

Private Sub VScroll1_Change()
Picture1.Top = -VScroll1.Value
End Sub

Private Sub VScroll1_Scroll()
VScroll1_Change
End Sub
 
hallo Primax,

was mir als erstes dazu einfallen würde, ist: Prüfe mal deine Form ob ScaleModeauf Twips eingestellt wurde/ist. Nach meines erachtens arbeitet VB immer mit Pixel, wenn Top, Left usw. positioniert wird.

Es kann wahrscheinlich sein, das die beiden Scrollbalken da sind, aber außerhalb deine Form und daher nicht sichtbar.
.
Ansonsten kann ich an Deinem Code so keinen Fehler feststellen.

ANI
 
Hallo Ani

das passt alles soweit, aber daran liegt es glaube ich nicht!

Kann es sein, das es ein Problem ist, wenn ich zur Laufzeit ein bereits geladenes Formular vergrößer? Das dann die Scrollbalken, die in der Form_load-Prozedure stehen, die Größenänderung nicht mitbekommen?

Kann ich die Scrollbalken nicht in der Änderungsprozedure erneut anpassen? Wenn ja, wie mache ich das?

Grüße Primax
 
hallo Primax,

setze mal an die Stelle im Code, wo du HScroll1.Top und VScroll1.Left mit Zahlen füllst, einen Haltepunkt mit F9. Starte dann dein Programm und prüfe mal die Werte, die an Top und Left übergeben werden. Dann weist du, wo deine Scrollbalken sitzen.

ANI
 

Neue Beiträge

Zurück