Problem mit picturebox

hallo

ich habe ein kleines malprogramm geschrieben und komm mit der funktion „speichern“ nicht zurecht…

der name meiner picturebox = „picBlatt“

'beim klick auf öffnen wird ein bestimmtes bild geladen
picBlatt.Picture = LoadPicture(„C:/Mein_Bild.bmp“)

so, nun hab ich das bild in meinem programm

mit „picBlatt.PSet (X, Y), RGB(r, g, b)“ mal ich dann punkte aufs Blatt

so nun zum problem:

wenn ich
savePicture picBlatt.picture, „/Mein_Bild.bmp“
mit diesem befehl speichere wird das alte bild nicht ersetzt und die gezeichneten punkte und so, sind nicht sichtbar!

jetzt hab ichs so probiert:

savePicture picBlatt.Image, „/Mein_Bild.bmp“

jetzt funktioniert es aber wenn ich die .bmp datei dann öffne ist die
Bildbreite und -höhe viel grösser als das wirkliche Bild!!

kann mir jemand helfen??

ich hoffe mein problem ist verständilch…

danke im voraus

mfg
michael

Hallo michael,

Du warst schon auf dem richtigen Dampfer.
Versuch’s mal mit

PicBlatt.Picture = PicBlatt.Image
SavePicture (PicBlatt.Picture …

Gruß, Rainer

Danke erstmals…

aber der befehl

PicBlatt.Picture = PicBlatt.Image

führ zu einer fehlermeldung: ungültige verwendung einer eigenschaft…

was hab ich falsch gemacht?
wo muss ich den befehl reinschreiben?

danke

so, jetzt hab ich den befehl umgedreht

fmHaupt.picInnen.Picture = fmHaupt.picInnen.Image

aber das ergebnis ist gleich wie ohne diesen befehl…

soll ich ein bild ins internet stellen um mein problem klarer zu machen?

mfg
michael

Hallo,

aber der befehl

PicBlatt.Picture = PicBlatt.Image

führ zu einer fehlermeldung: ungültige verwendung einer
eigenschaft…

was hab ich falsch gemacht?

Du hast entgegen Deiner Beschreibung vorher kein Bild geladen.

wo muss ich den befehl reinschreiben?

Wo Du willst, aber vor den Befehl Savepicture. Damit überschreibst Du das geladene Bild mit dem Image.

Gruß, Rainer

Hi,

fmHaupt.picInnen.Picture = fmHaupt.picInnen.Image

aber das ergebnis ist gleich wie ohne diesen befehl…

dann habe ich das Problem wohl falsch verstanden. Das gespeicherte Bild hat die selbe Größe, wie das geladene. Ich dachte, das wäre gewollt. Habe ich das falsch verstanden?

soll ich ein bild ins internet stellen um mein problem klarer
zu machen?

kann nicht schaden … ich schreibe schnell aml ein Beispiel …

Gruß, Rainer

Beispiel
Hi michael,
das Beispiel:

Private Sub cmdLoad\_Click()
 CommonDialog1.ShowOpen
 Picture1.AutoSize = True
 Picture1.Picture = LoadPicture(CommonDialog1.FileName)
End Sub

Private Sub cmdSave\_Click()
 Picture1.Picture = Picture1.Image
 CommonDialog1.ShowSave
 SavePicture Picture1.Picture, CommonDialog1.FileName
End Sub

Das gespeicherte Bild ist identisch mit dem vorher geladenen. Ich hätte zwischendurch auch rummalen können, dann würde es anders aussehen, hätte aber die selbe Größe.

So, jetzt Du, was ist daran, was Du nicht willst? Ich scheine Dein Problem nicht verstanden zu haben.

Gruß, Rainer

also mein programm befindet sich hier:

http://hofemich.ho.funpic.de/software/screenshot/upd…

wenn man einen screenshot macht und ihn danach „bearbeitet“ dann tritt das problem auf…

Hallo,

also mein programm befindet sich hier:

http://hofemich.ho.funpic.de/software/screenshot/upd…

hab’s geladen und laufen lassen.

wenn man einen screenshot macht und ihn danach „bearbeitet“
dann tritt das problem auf…

Ich sehe ein Problem. Meinst Du, daß Teile des Bilds fehlen? Füge nach
dem Snapshot mal ein Doevents ein … übrigens, was flimmert da so?
Noch 'ne Frage. warum machst Du das per Mouseclick? Dann hast Du Dein Projekt doch immer im Vordergrund. Wenn das unsichtbar ist, kannst Du den Inhalt vom Clipboard prüfen und darauf reagieren. Meins liegt im Tray, damit man bei Bedarf etwas einstellen kann … sofort drucken, Namen und Pfad festlegen … :smile:

Aber Du hast ja gesagt, das Bild wird größer … sorry, bei mir nicht. Nur Dein Programm zerstört das Bild. Die Größe stimmt aber.

Gruß, Rainer

danke fürs testen… ich werd es mal auf verschiedenen computern testen…

wie meinst du das im hintergrund laufen lassen??

übrigens ich arbeite eh mit clipboard…

wie soll das ohne mouseklicks funktionieren??

ichversteh nicht genau wie du das meinst…

mfg
michael

Hallo Michael,

danke fürs testen… ich werd es mal auf verschiedenen
computern testen…

wie meinst du das im hintergrund laufen lassen??

Die Form minimieren und im Tray anzeigen statt in der Taskleiste. Dann stört’s nicht.

übrigens ich arbeite eh mit clipboard…

Ja, war klar. Um einen Screenshot zu schießen würde ich aber nicht klicken lassen.

wie soll das ohne mouseklicks funktionieren??

Wie sonst auch, mit der Taste ‚Druck‘. Du mußt nur mit einem Timer den Inhalt des Clipboards überwachen.

ichversteh nicht genau wie du das meinst…

Noch 'n Beispiel …

Option Explicit

Private Sub Form\_Load()
 Timer1.Interval = 100
 Clipboard.Clear
 Picture1.AutoSize = True
 Form1.Hide
End Sub

Private Sub Picture1\_Resize()
 Form1.Width = Picture1.Width
 Form1.Height = Picture1.Height
End Sub

Private Sub Timer1\_Timer()
 If Clipboard.GetData 0 Then
 Form1.Show
 DoEvents
 Picture1.Picture = Clipboard.GetData
 DoEvents
 End If
End Sub

… einfach ‚Druck‘ tippen und die Form wird angezeigt.

Gruß, Rainer

danke fürs testen… ich werd es mal auf verschiedenen
computern testen…

ach ja, bei mir läuft’s auf 'nem Notebook mit WinXP-Home.

Gruß, Rainer

danke, für diesen tipp…

werde ich gleich mal einbauen…

und nochmals vielen dank

naja, habs zuerst mit der api funktion gemacht, bin dann aber draufgekommen, dass es mit sendkey einfacher geht und platz spart :o)

mfg
michael

Hi michael,

dann liefere ich mal noch meinen Code nach, eine Form nur noch als Trayicon anzuzeigen …

in der form:

Option Explicit

Private Sub Form\_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim cEvent As Single
cEvent = X / Screen.TwipsPerPixelX
Select Case cEvent
 Case LeftUp
 Form1.WindowState = 0
 Me.Show
 Case RightUp
 Form1.WindowState = 0
 Me.Show
End Select
End Sub

Private Sub Form\_QueryUnload(Cancel As Integer, UnloadMode As Integer)
 TrayDelete
End Sub

Private Sub Form\_Resize()
 DoEvents
 If Form1.WindowState = 1 Then
 TrayAdd hwnd, Me.Icon, "System Tray", MouseMove
 Me.Hide
 End If
End Sub

in einem Modul:

Option Explicit

'[Tray Constants]
Const NIF\_MESSAGE As Long = &H1 'Message
Const NIF\_ICON As Long = &H2 'Icon
Const NIF\_TIP As Long = &H4 'TooTipText
Const NIM\_ADD As Long = &H0 'Add to tray
Const NIM\_MODIFY As Long = &H1 'Modify
Const NIM\_DELETE As Long = &H2 'Delete From Tray

'[Type NotifyIconData For Tray Icon]
Private Type NOTIFYICONDATA
 cbSize As Long
 hwnd As Long
 uId As Long
 uFlags As Long
 uCallBackMessage As Long
 hIcon As Long
 szTip As String \* 64
End Type

'[Return Events]
Public Enum TrayRetunEventEnum
 MouseMove = &H200 'On Mousemove
 LeftUp = &H202 'Left Button Mouse Up
 LeftDown = &H201 'Left Button MouseDown
 LeftDbClick = &H203 'Left Button Double Click
 RightUp = &H205 'Right Button Up
 RightDown = &H204 'Right Button Down
 RightDbClick = &H206 'Right Button Double Click
 MiddleUp = &H208 'Middle Button Up
 MiddleDown = &H207 'Middle Button Down
 MiddleDbClick = &H209 'Middle Button Double Click
End Enum

'[Modify Items]
Public Enum ModifyItemEnum
 ToolTip = 1 'Modify ToolTip
 Icon = 2 'Modify Icon
End Enum

'[API]
Private TrayIcon As NOTIFYICONDATA
Private Declare Function Shell\_NotifyIcon Lib "shell32" Alias "Shell\_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

'[Add to Tray]
Public Sub TrayAdd(hwnd As Long, Icon As Picture, \_
 ToolTip As String, ReturnCallEvent As TrayRetunEventEnum)
 With TrayIcon
 .cbSize = Len(TrayIcon)
 .hwnd = hwnd
 .uId = vbNull
 .uFlags = NIF\_ICON Or NIF\_TIP Or NIF\_MESSAGE
 .uCallBackMessage = ReturnCallEvent
 .hIcon = Icon
 '.szTip = ToolTip & vbNullChar
 .szTip = "Screenshot" & vbNullChar
 End With
 Shell\_NotifyIcon NIM\_ADD, TrayIcon
End Sub

'[Remove From tray]
Public Sub TrayDelete()
 Shell\_NotifyIcon NIM\_DELETE, TrayIcon
End Sub

'[Modify the tray]
Public Sub TrayModify(Item As ModifyItemEnum, vNewValue As Variant)
 Select Case Item
 Case ToolTip
 TrayIcon.szTip = vNewValue & vbNullChar
 Case Icon
 TrayIcon.hIcon = vNewValue
 End Select
 Shell\_NotifyIcon NIM\_MODIFY, TrayIcon
End Sub

… das Modul ist leider nicht von mir. :smile: Ich habe aber daran herumgebastelt und es deutlich vereinfacht, verkürzt. Eventuell kannst Du’s ja gebrauchen.

Gruß, Rainer

danke
danke, werd ich sicher gebrauchen können…