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 … 
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.
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…