PDA

View Full Version : [VB6] Ciclo for troppo lento


wingman87
06-10-2006, 20:42
Ho creato un programmino x ritagliare i form e farli della forma che si vuole. Il codice funziona e il risultato è molto carino, anche se lo devo ancora raffinare, ora è molto grezzo, ma c'è un problema: è troppo lento.
Vi allego tutto il progetto, quello che vorrei ottenere è che il form venga ritagliato quasi istantaneamente, anche perchè la prova l'ho fatta con un form piccolo, se il form è molto grande ci mette molto di più..
La colorazione in rosso l'ho messa solo per verificare la velocità del ciclo.
Vi ringrazio!

wingman87
09-10-2006, 13:42
Uppo! Pensavo che magari leggendo i pixel direttamente dall'immagine potrebbe aumentare in velocità, ma come faccio a caricarmi un'immagine e a leggerne i pixel?

wingman87
09-10-2006, 13:54
Un'altra cosa, non è possibile leggere i pixel dell'immagine senza che questa sia visibile?

wingman87
09-10-2006, 14:17
Ho risolto, il codice non è istantaneo come avrei voluto ma è molto più veloce di prima..

wingman87
09-10-2006, 15:12
Ho superato la problematica della velocità, ora ho altri problemi, siccome con questo progetto vorrei creare un oggetto piuttosto versatile vorrei che si adattasse più o meno a tutti i casi, ho notato ad esempio che se nel form è impostato un borderstyle diverso da 0 il programma non funziona bene. Runtime questa proprietà non si può modificare, allora come faccio? E un'altra cosa, ho impostato la proprietà showintaskbar=true, xò vorrei far apparire un menu cliccando col destro sull'icona, come si fa? Grazie!

okay
09-10-2006, 16:27
Ho superato la problematica della velocità, ora ho altri problemi, siccome con questo progetto vorrei creare un oggetto piuttosto versatile vorrei che si adattasse più o meno a tutti i casi, ho notato ad esempio che se nel form è impostato un borderstyle diverso da 0 il programma non funziona bene. Runtime questa proprietà non si può modificare, allora come faccio? E un'altra cosa, ho impostato la proprietà showintaskbar=true, xò vorrei far apparire un menu cliccando col destro sull'icona, come si fa? Grazie!

Se togli il DoEvents è + veloce.
guarda se ti sono utili questi:
http://www.studentsofgamedesign.com/VBGT_Optimizing.htm



per il popup cosa intendi, forse, intendi l'icona nella taskbar in cui ci clicchi e si apre il menu?. Oppure la tipica finestrella con un help scritto in essa?

wingman87
09-10-2006, 22:11
Se togli il DoEvents è + veloce.
guarda se ti sono utili questi:
http://www.studentsofgamedesign.com/VBGT_Optimizing.htm



per il popup cosa intendi, forse, intendi l'icona nella taskbar in cui ci clicchi e si apre il menu?. Oppure la tipica finestrella con un help scritto in essa?
Il DoEvents l'ho tolto ma ho proprio cambiato il codice, ne ho fatto uno molto più veloce, cmq grazie x il consiglio. X il popup intendo la prima. Tra l'altro anche la proprietà showintaskbar non è settabile runtime.. La cosa si fa problematica..

okay
09-10-2006, 22:35
Il DoEvents l'ho tolto ma ho proprio cambiato il codice, ne ho fatto uno molto più veloce, cmq grazie x il consiglio. X il popup intendo la prima. Tra l'altro anche la proprietà showintaskbar non è settabile runtime.. La cosa si fa problematica..

non sto in postazione ma se cerchi con google: "visual basic systray" troverai molti sorgenti adatti allo scopo.

gabryk
10-10-2006, 09:14
Guarda io ho sempre usato questo codice trovato in giro ed ha sempre funzionato bene, ovviamente puoi rimaneggiarlo alla bisogna...

Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias _
"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As _
NOTIFYICONDATA) As Long
Public 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
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
'Make your own constant, e.g.:
Public Const NIF_DOALL = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_RBUTTONDOWN = &H204
'2) Add a form to the project, and add the following code:
Public Sub CreateIcon()
Dim Tic As NOTIFYICONDATA
Tic.cbSize = Len(Tic)
Tic.hwnd = Picture1.hwnd
Tic.uID = 1&
Tic.uFlags = NIF_DOALL
Tic.uCallbackMessage = WM_MOUSEMOVE
Tic.hIcon = Picture1.Picture
Tic.szTip = "Visual Basic Demo Project" & Chr$(0)
erg = Shell_NotifyIcon(NIM_ADD, Tic)
End Sub

Public Sub DeleteIcon()
Dim Tic As NOTIFYICONDATA
Tic.cbSize = Len(Tic)
Tic.hwnd = Picture1.hwnd
Tic.uID = 1&
erg = Shell_NotifyIcon(NIM_DELETE, Tic)
End Sub

'3) Add two command buttons (command1 and command2) and a
'picture box (picture1) to the form. For the picture
'property of the form, select an icon.
'To to Click event of Command1, add the following code:
CreateIcon
'To the Click event of Command2, add the following code:
DeleteIcon
'To the MouseMove event of Picture1, add the following code:
X = X / Screen.TwipsPerPixelX
Select Case X
Case WM_LBUTTONDOWN
Caption = "Left Click"
Case WM_RBUTTONDOWN
Caption = "Right Click"
Case WM_MOUSEMOVE
Caption = "Move"
Case WM_LBUTTONDBLCLK
Caption = "Double Click"
End Select
'4) Run the project.
' Click on Command1.
' The icon you selected in Picture1 should appear in the
' tray area. Now, move the mouse over the icon.
' The caption of the form should change to "Move".
' Left click the icon, and the caption will change to
' "Left". Right click the icon, and the caption will
' change to "Right". Double Click the icon, and the
' caption will change to "Double". To delete the icon
' from the tray, click Command2.