|
[ ventura @ 17.05.2007. 12:01 ] @
| Pišem neku jednostavnu proof-of-concept applikaciju za PocketPC na VB2005, pa sam naišao na jedan problem.
Naime, zbog pojednostavljivanja dizajna ideja mi je da na formu nalepim PictureBox koji bi bio iste veličine kao forma, a na kome su već nacrtani svi buttoni, i da nakon toga nekako mapiram buttone na toj slici kako bi prilikom korišćenja aplikacije klikom na "button" na slici korisnik mogao dobiti i neki odgovarajući event.
Da li neko možda ima ideju kako ovo rešiti?
|
[ goranvuc @ 17.05.2007. 12:19 ] @
Pa mapiranje je sigurno najgora varijanta, jer se onda moras pomuciti oko interakcije (stanja dugmadni na fokus, mouseover, mousepressed itd.) sto koriscenjem command buttona radis bez problema, a bilo kakva promena pozicije ili velicine nekog od dugmadi je puno fleksibilnija na ovaj nacin. Button kontrola u VB 2005 ima BackgroundImage svojstvo koje potpuno odgovara primeni koju zelis.
Inace za VB 2005 bolje da pitas na .NET forumu, mada ce ti i tamo ovo potvrditi.
Pozdrav!
[ ventura @ 17.05.2007. 12:32 ] @
Hmm.. Ja nisam video da kod mene ima u Button kontroli ima BackgroundImage property, možda zbog toga što sam za target device odabrao PocketPC/Windows CE, on čak ni ne podržava sve boje buttona kako treba... Attachovao sam i screenshot čisto da vidiš...
Imaš li neku ideju kako uraditi image mapping, nema veze što je komplikovano, ionako mi treba to kao neki prototip samo, pravim aplikaciju sa user interface-om čisto da se vidi kako to izgleda, ionako neću praviti ništa drugo osim toga.
Pozdrav,
Danko
[ goranvuc @ 17.05.2007. 12:44 ] @
Ne znam koju verziju koristis - mozda ima sa tim veze, ili sa ovim sto navodis (Target Device), evo ti kako izgleda property screen za projekat tipa Windows Application i button koji se tamo koristi, ovaj tip projekta koji navodis nisam probao jer nemam verziju koja omogucava tvoj tip projekta.
Inace, imagemapping sam radio svojevremeno za Java aplete, znaci bitno je samo koji dogadjaj hoces da iskoristis, npr. ako koristis MouseDown onda treba da u zavisnosti od koordinata misa aktiviras odgovarajucu proceduru, a za interakciju tipa npr. mouseover moras i ucitavati odgovarajucu sliku u odgovarajuci Rectangle - nadam se da si na to mislio.
[ ventura @ 17.05.2007. 12:48 ] @
Definitivno je do verzije... Jer u ovoj verziji za PocketPC gomila kontrola i funkcija mi nije dostupna... Imaš li neki hint za imagemap?
Meni je ideja bila da ako ne postoji neki jednostavnij način, da napravim dve bitmape, jedna koju će korisnik da vidi, a druga u pozadini koja bi imala samo buttone iscrtane i to u različitim bojama, i onda da kada korisnik klikne, ja iščitam koordinate i koje boje je pixel na donjoj bitmapi, i da na osnovu toga pokrenem neki event...
[ goranvuc @ 17.05.2007. 12:52 ] @
Nije losa ideja, "ne trazi puno hleba" 
[ ventura @ 17.05.2007. 13:03 ] @
Sad treba 'samo' da nadjem kojim to funkcijama mogu izvesti, a da postoje i na Windows CE :)
[ goranvuc @ 17.05.2007. 13:06 ] @
Da probas sa "System.Drawing.Bitmap.GetPixel((ByVal x As Integer, ByVal y As Integer) As System.Drawing.Color" na bitmapi u pozadini i za odredjene koordinate misa.
[ Shadowed @ 17.05.2007. 13:09 ] @
Ako su ti virtuelni tasteri jednaki i na jednakom rastojanju, nije veliki problem.
Recimo, ako su dimenzije 20x10px i 3px razmak i neka su koordinate click-a X i Y. Redni broj tastera s leva dobijas tako sto uzmes X \ 23 a odozgo Y \ 13. U sustini, izdelio si celu sliku na bautton-e sa praznim prostorom levo i iznad njega. Zatim, da bi znao da li je kliknuto na button ili prazan prostor, ides X Mod 23 i Y Mod 13. Ako je ostatak veci ili jednak 3, kliknuto je na taj taster, ako je 0,1 ili 2 onda na prazan prostor levo ili iznad njega.
Ukoliko ne ispunjavaju uslove sa pocetka, onda je mozda bolje da imas jedan niz koordinata koje pripadaju tasterima i koristis select case. Onda mozes imati i totalno nepravilan raspored a ako dodas i Z order mogu i da se preklapaju :)
[ Vranac @ 17.05.2007. 13:14 ] @
Ventura, pogledaj ovaj MSDN article
How to Create a Microsoft .NET Compact Framework-based Image Button
http://msdn2.microsoft.com/en-us/library/aa446518.aspx
[ ventura @ 17.05.2007. 13:35 ] @
Kad koristim getpixel puca mi aplikacija, kaze "unexpected error", a kompajlira se sasvim normalno..
Da li sam dobro napisao ovo?
Code:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim bitmap As New Bitmap("\Storage Card\pozadina.bmp")
Dim returnValue As Color
returnValue = Bitmap.GetPixel(50, 50)
MsgBox(returnValue)
End Sub
Samo sam hteo da probam da li ce mi vratiti boju pixela, pa da posle dogradim na kordinate kursora, ali ne prolazi mi ni ovo...
[ goranvuc @ 17.05.2007. 14:17 ] @
Pa ja sam shvatio das vec imas neki PictureBox, ali ako ides na ucitavanje iz fajla da li si probao Shared (staticku za nonVB usere) metodu FromFile(), koja ti vraca Image objekat?
I naravno, gde "puca" aplikacija?
[ ventura @ 17.05.2007. 14:34 ] @
Odustao sam od čitanja boje pixela, jer ni to nije podržano, pa sad idem samo na čitanje koordinata, ali ne mogu da koristim GetCursorPos is user32.dll, jer user32.dll ne postoji :)
[ goranvuc @ 17.05.2007. 14:38 ] @
Pa zar nema nijedan Event koji ti vraca koordinate misa, tj. koji tacno klik zelis da obradis (na koju kontrolu, objekt) ?
[ ventura @ 17.05.2007. 14:40 ] @
Nema... isprobao sam 3-4 razlicita metoda i nijedan ne radi na WinCE...
Poštp mi je PictureBox preko celog forma, stavio sam da na event PictureBox.Click on pokuša da pročita koordinate miša, sračuna koji je to button i pokrene event.. E sad, pročutati koordinate je malo veći problem...
[ goranvuc @ 17.05.2007. 14:51 ] @
Pa argument ti je objekt MouseEventArgs, tako da ti je X i Y: e.X i e.Y tj.
Code:
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Dim argClass As MouseEventArgs
argClass = e
MsgBox("Koordinate su: " & argClass.X.ToString & ", " & argClass.Y.ToString)
End Sub
[ ventura @ 17.05.2007. 15:04 ] @
Ma jok.. Puca i to... Kaže:
Code:
Error
DeviceApplication2.exe
InvalidCastException
a kada recimo na XP-u pokrenem ovaj isti program, normalno mi vraća koordinate kursora, kao i svi prethodni metodi koje sam probavao a koji ne rade na WinCE
[ ventura @ 17.05.2007. 15:10 ] @
Error
DeviceApplication2.exe
InvalidCastException
at DeviceApplication1.Form1.Form1_Click()
at System.Windows.Forms.Control.OnClick()
at System.Windows.Forms.Control.WnProc()
at System.Windows.Forms.Control._InternalWnProc()
at Microsoft.AGL.Forms.EVL.EnterMainLoop()
at System.Windows.Forms.Application.Run()
at DeviceApplication1.Form1.Main()
[ ventura @ 17.05.2007. 15:13 ] @
Error sam direktno copy pasteovao ovde da vidis i detalje šta prijavljuje..
[ goranvuc @ 17.05.2007. 15:14 ] @
Jooooj koji horor!
A ja ti pripremio VB kod za to:
Code:
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Dim argClass As System.Windows.Forms.MouseEventArgs
Dim pixelColor As System.Drawing.Color
argClass = e
If Not PictureBox1.Image Is Nothing Then
pixelColor = New Bitmap(PictureBox1.Image).GetPixel(argClass.X, argClass.Y)
MsgBox("Boja je : " & pixelColor.ToString)
End If
End Sub
[ ventura @ 17.05.2007. 15:20 ] @
A kakvi su to #### na MSDN-u, pazi ovo šta stoji za system.windows.forms.cursor.position:
[mod: razumem frustraciju, been there, ali recnik za nijansu nize...]
Citat:
Platforms
Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.
A onda ispod dole stoji, da ga ni ne primetiš:
Citat:
Windows CE
system.windows.forms.cursor.position is not supported by Windows CE 5
[Ovu poruku je menjao mmix dana 17.05.2007. u 16:41 GMT+1]
[ goranvuc @ 17.05.2007. 15:22 ] @
Cekaj, ja ne spominjem nigde u kodu Cursor.Position, otkuda to?
[ ventura @ 17.05.2007. 15:24 ] @
Ma sa cursor.position sam ja probao najnovije... 99-ti način po redu :)
a inače ovaj tvoj kod radi savršeno pod XP-om, a kad ga prebacim na CE, ista stvar kao onaj prethodni...
Ovo stvarno treba da budeš vidovita Zorka, ili uporan kao mazga, pa dok te eventualno ne usere nešto pa da proradi...
[ goranvuc @ 17.05.2007. 15:26 ] @
Ja odustajem, ne vredi da se mucim kad nemam iste uslove kod sebe. Srecno!
[ ventura @ 17.05.2007. 15:36 ] @
Sad sam na MSDN- iskopao ovo
Control.MousePosition Property
Gets the position of the mouse cursor in screen coordinates.
Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)
Syntax
Visual Basic (Declaration)
Code:
Public Shared ReadOnly Property MousePosition As Point
Visual Basic (Usage)
Code:
Dim value As Point
value = Control.MousePosition
Što je dobro, proverio sam i imam taj System.Windows.Forms.Control.MousePosition, međutim kada sam to ubacio u kod, ovako:
Code:
Public Shared ReadOnly Property MousePosition() As Point
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Dim value As Point
value = Control.MousePosition
MsgBox(value)
End Sub
dobijem error pri buildu:
Code:
------ Build started: Project: DeviceApplication2, Configuration: Release Any CPU ------
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /noconfig /imports:Microsoft.VisualBasic,System,System.Collections,System.Collections.Generic,System.Drawing,System.Diagnostics,System.Windows.Forms /nowarn:42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 /nostdlib /rootnamespace:DeviceApplication1 /sdkpath:"C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE" /netcf /doc:obj\Release\DeviceApplication2.xml /define:"CONFIG=\"Release\",TRACE=-1,_MyType=\"WindowsForms\",PLATFORM=\"AnyCPU\",WindowsCE=TRUE" /reference:"C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\Microsoft.WindowsCE.Forms.dll","C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\System.dll","C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\System.Drawing.dll","C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\System.Windows.Forms.DataGrid.dll","C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\System.Windows.Forms.dll" /main:DeviceApplication1.Form1 /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\DeviceApplication2.exe /resource:obj\Release\DeviceApplication1.Form1.resources /resource:obj\Release\DeviceApplication1.Resources.resources /target:winexe Form1.vb Form1.Designer.vb "My Project\AssemblyInfo.vb" "My Project\Resources.Designer.vb"
C:\Documents and Settings\Danko Vukovic\My Documents\Visual Studio 2005\Projects\DeviceApplication2\DeviceApplication2\Form1.vb(37) : error BC30126: 'ReadOnly' property must provide a 'Get'.
C:\Documents and Settings\Danko Vukovic\My Documents\Visual Studio 2005\Projects\DeviceApplication2\DeviceApplication2\Form1.vb(40) : error BC30634: Statement cannot appear within a property body. End of property assumed.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
[ mmix @ 17.05.2007. 15:44 ] @
ne mozes ti deklarisati propertije za druge klase iz svoje (moze indirektno ako su partial klase, ali ne ovako). Ja koliko sam razumeo taj property vec postoji tako da ne vidim sta postizes deklarisuci ga (nekompletno) u tvojoj klasi?
[ ventura @ 17.05.2007. 15:47 ] @
Kad ga ubacim bez deklarisanja
Code:
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Dim value As Point
value = Control.MousePosition
MsgBox(value)
End Sub
onda dobijem "ArgumentException" kada pokrenem program
[ goranvuc @ 17.05.2007. 15:47 ] @
Pa posto PictureBox nasledjuje System.Windows.Forms.Control tako da moze, ali ne tako kako si naveo (control objekat ne postoji) pa treba:
Code:
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Dim value As Point
value = PictureBox1.MousePosition
MsgBox(value.ToString)
End Sub
[ ventura @ 17.05.2007. 15:55 ] @
Ma ovo je izluđujuće... Opet ista stvar
XP kaže
"{X=434,Y=208}"
a CE kaže
"System.Drawing.Point"
nek se nosi... ko ga izmisli takvog...
[ negyxo @ 17.05.2007. 15:58 ] @
Naterali ste me da probam... evo prost primer sa MouseDown eventom,
Code:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
MessageBox.Show(e.X.ToString() + " - " + e.Y.ToString());
}
radi...
[ ventura @ 17.05.2007. 16:06 ] @
Meni neće uopšte da kompajlira kaže
C:\Documents and Settings\Danko Vukovic\My Documents\Visual Studio 2005\Projects\DeviceApplication2\DeviceApplication2\Form1.vb(37) : error BC31029: Method 'Private Sub PictureBox1_Click(sender As Object, e As System.EventArgs, m As System.Windows.Forms.MouseEventArgs)' cannot handle Event 'Public Event Click(sender As Object, e As System.EventArgs)' because they do not have the same signature.
[ goranvuc @ 17.05.2007. 16:10 ] @
Jedno malo glupo pitanje, posto ne radim mobilne alikacije: Da li uopste mozes da koristis za te namene Windows.Forms biblioteku?
Inace, ovo si verovatno u zurbi zalepio pa ti zato prijavljuje gresku:
'Private Sub PictureBox1_Click(sender As Object, e As System.EventArgs, m As System.Windows.Forms.MouseEventArgs)'
[ ventura @ 17.05.2007. 16:17 ] @
Ovo mi radi normalno:
Code:
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
Label4.Text = "X." & e.X & vbCrLf & "Y." & e.Y
End Sub
Ali kad stavim "Handles MyBase.Click" onda mi javi
"error BC31029: Method 'Private Sub Form1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs)' cannot handle Event 'Public Event Click(sender As Object, e As System.EventArgs)' because they do not have the same signature."
[ goranvuc @ 17.05.2007. 16:23 ] @
Ovo je kljucno, a tu stalno gresis: "they do not have the same signature" dakle, nemaju svi dogadjaji iste parametre, tj. moras da ispostujes originalnu definiciju pri hendlovanju dogadjaja.
[Ovu poruku je menjao goranvuc dana 17.05.2007. u 17:55 GMT+1]
[ ventura @ 17.05.2007. 16:44 ] @
Kako da provalim ko ima kakvu definiciju da bi to ispravio?
[ goranvuc @ 17.05.2007. 16:49 ] @
Pa najlakse ti je da obelezis kljucnu rec, pa desni klik, pa "Go To Definition" i trebalo bi da ti se otvori "Object Browser" prozor i u njemu da se pozicionira na definiciju i kraci opis te kljucne reci, npr. obelezis u ovom dole kodu "MyBase.MouseMove" i vidis ...
[ Vranac @ 17.05.2007. 17:32 ] @
Ovo je za PocketPC 2003, ali mislim da ce raditi i na WinCE 5
Na formu je pictureBox koji se zove imageBox.
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace clickablePictureBox
{
public partial class Form1 : Form
{
int mouseX;
int mouseY;
public Form1()
{
InitializeComponent();
mouseX = 0;
mouseY = 0;
imageBox.MouseMove += new MouseEventHandler(imageBox_MouseMove);
imageBox.Click += new EventHandler(imageBox_Click);
}
void imageBox_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
mouseX = e.X;
mouseY = e.Y;
}
void imageBox_Click(object sender, EventArgs e)
{
String tipText = String.Format("({0}, {1})",mouseX, mouseY);
MessageBox.Show(tipText);
}
}
}
Kada pokrenes u emulatoru i kliknes na form, pojavice ti se message box sa mouse koordinatama.
[ Shadowed @ 17.05.2007. 17:54 ] @
ventrua, stavi picturebox, label i u kod kopiraj ovo:
Code:
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Label1.Text = Control.MousePosition.X & " " & Control.MousePosition.Y
End Sub
Ja nisam mogao da probam jer nisam instalirao ActiveSinc (a mrzi me  ).
[ toxi_programer @ 17.05.2007. 20:56 ] @
A dali bi pomoglo ako bi mogao da nacrtaš sliku za dugme, onda tu sliku da postaviš u pozadinu dugmeta, ali da određeni delovi te slike budu transparentni, pa da dugme ne bude kockasto već u obliku netransparentnih delova te slike?
Ako ovo može, reci mi imam rešenje koje se neverovatno lako implemetira...
[ ventura @ 17.05.2007. 21:19 ] @
Na WindowsCE nije podržana transparencija uopšte...
[ toxi_programer @ 17.05.2007. 21:45 ] @
Ne, ne, ne... Nije potrebno da se podešava transparentna boja... Da ne tupim i ja mnogo, ako rade regioni onda možeš da uradiš ovako kako ja mislim... Poslaću ti link ka tom temski na pp, mislim da je zabranjeno da ovde postavljam linkove...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|