Problem: Scalable canvas with affine transformation

I'm trying to create a canvas that can be scrolled and is scalable through affine transformations. This, I'm trying to achieve by adding a control component to an existing Canvas that listens for MouseEvents and masks the area outside the area defined by the canvas when the control component is created. The base for this component was http://gasi.ch/blog/zooming-in-flash-flex/.
Next I'm explain how the component is supposed to work and then on to the problem.
This is how the canvas is created. In the constructor MouseListeners and a mask canvas is added to dragCanvas.
          var canvasControl:MatrixCanvasMouseControl = new MatrixCanvasMouseControl(dragCanvas);
The listeners work pretty much the same way as in the link I mentioned earlier. So on to the scaling which is the problem.
The scaling is done by first scaling the dragCanvas with method scaleAt(...):
/** START OF MOUSE WHEEL LISTENER */
          // CUT
          // get the mouseevent position in stage
          var eventStagePoint:Point = new Point();
                    eventStagePoint.x = event.stageX;
                    eventStagePoint.y = event.stageY;         
          // scale dragCanvas at that point with scaleAt
          scaleAt(canvas, zoomIn, zoomIn, canvas.globalToLocal(eventStagePoint).x, canvas.globalToLocal(eventStagePoint).y);       
          // CUT
/** END OF MOUSE WHEEL LISTENER  */
         * Scales the matrix through affine transformation.
        public static function scaleAt(sprite:Sprite, scaleX:Number, scaleY:Number, originX:Number, originY:Number):void
            var translateMatrix:Matrix = sprite.transform.matrix;
            // move to origo to preserve form
            translateMatrix.translate(-originX, -originY);
            // scale the matrix
            translateMatrix.scale(scaleX, scaleY);
            // move back to originX, originY
            translateMatrix.translate(originX, originY);
            sprite.transform.matrix = translateMatrix;
This scales the maskCanvas also. Next I'm trying to scale the maskCanvas back to it's original position by:
          MatrixHelper.scaleAt(maskCanvas, (1 / zoomIn), (1 / zoomIn), maskCanvas.globalToLocal(eventStagePoint).x * (1 / zoomIn), maskCanvas.globalToLocal(eventStagePoint).y * (1 / zoomIn));
The problem is that when the Canvas is scaled, the mask  changes it's position when I try to scale it back to it's original size and position (as it's size and position changed when dragCanvas was scaled because maskCanvas is a child of dragCanvas).
This might not be the best way to achieve scrolling. I also thought about extending Canvas and creating a parent Canvas that would contain dragCanvas and maskCanvas as it's children. That way scaling one would not affect the other. The problem with this was that I didn't find a way to do that without overriding Canvas functionality. If anyone knows and could explain how this could be done effectively for example by "decorating" it would be great.
I would really appreciate if anyone could help me with this. I've struggled with it for quite a few hours already.
I know I haven't explained everything clearly, so, please, ask me to clarify things more, if this was not understandable.
Message was edited by: Kimmo Jokinen
Message was edited by: Kimmo Jokinen

OK, I found a hacky solution to my problem by going through every rawChildren of the canvas and then scaling it if it's id didn't match with the one I created in the mouseControl component.
This does not seem like a very elegant way but at least it works.
I'm pretty sure that this should be done whole differently architecturally but I'm not experienced enough to find that way.
So this is how I did it.
for (i = 0; i < canvas.rawChildren.numChildren; i++) {
     child = canvas.rawChildren.getChildAt(i) as Object;
     if (!child is DisplayObject) {
          continue;
     transformAllowed = false;
     displayChild = DisplayObject(child);
     if (displayChild.hasOwnProperty("id") && (displayChild["id"] == "maskCanvas" || displayChild["id"] == "mouseControlArea")) {    
          transformAllowed = false;                                   
     } else {
          transformAllowed = true;
     if (transformAllowed) {
          MatrixHelper.scaleAt(displayChild, zoomOut, zoomOut, canvas.globalToLocal(eventStagePoint).x, canvas.globalToLocal(eventStagePoint).y);

Similar Messages

  • Tab canvas with required fields (problem)

    hi,
    I am using tab canvas with 5 tabs with diff blocks.
    receive
    issue
    adjust
    return
    view
    some fields are required in all tabs.
    when i run the form and in RETURN TAB and enter some data and click the save button the cursor goes to receive tab and focus the required fields with a message
    FIELD MUST BE ENTER
    same for issue tab also...
    i dont want to enter any thing there ..
    how i manage it
    thanks

    Not sure if I understand you correctly. You say some fields are required in all tabs, but also that you 'don't want to enter anything here'. Do you mean that the fields are required, but only if you're entering data on that specific tab? I.e. you don't have to enter all of the tabs.
    If that's the case, are all the tabs based on the same block, or different blocks?

  • Problem in tilelist with dataprovider.

    I have a problem in tilelist. with the dataprovider a get the
    message error
    ArgumentError: Error #2025: The supplied DisplayObject must
    be a child of the caller.
    at flash.display::DisplayObjectContainer/removeChild()
    if i delete the images from the last added to the first one i
    have no prob but if i want to delete from the middle i get the
    message error th sode that i use is
    <mx:TileList id="tileList"
    dataProvider="{imgData}"
    columnCount="4"
    columnWidth="222"
    rowCount="2"
    rowHeight="194"
    themeColor="haloSilver"
    verticalScrollPolicy="on"
    x="0" y="415" width="100%">
    <mx:itemRenderer>
    <mx:Component>
    <mx:VBox horizontalAlign="center"
    verticalAlign="middle" width="222" height="194"
    verticalScrollPolicy="off" horizontalScrollPolicy="off" >
    <mx:Image id="img" width="165" height="126"
    maintainAspectRatio="true" source="{data.asset}" />
    <mx:Label id="txt" text="{data.title}"/>
    <mx:Button id="del" label="Delete"
    click="outerDocument.deleteSnapShot(event)"/>
    </mx:VBox>
    </mx:Component>
    </mx:itemRenderer>
    </mx:TileList>
    the function to add the image is :
    public function addImgToTile(bm:Bitmap):void{
    var bm1:BitmapData = Bitmap(bm1_source.content).bitmapData;
    var bitmap:Bitmap = new Bitmap(bm1);
    var vo:MyVOBm = new
    MyVOBm(bitmap,formatTime(inStream.time));
    imgData.addItem(vo);
    And the function to delete the image is:
    public function deleteSnapShot(ev:Event):void{
    imgData.removeItemAt(tileList.selectedIndex);
    tx for your help

    tx Amy for your help here i give you the code that generate
    the image from streaming video
    <mx:Canvas id="videoHBox" horizontalScrollPolicy="off"
    verticalScrollPolicy="off" backgroundColor="#000000" width="456"
    height="284" y="37">
    </mx:Canvas>
    <mx:Button x="464" y="188" label="In" width="48"
    id="btnIn" click="addStart(inStream.time);" enabled="true"
    visible="true" useHandCursor="true" buttonMode="true" toolTip="Add
    Start Image (shotcut Home)"/>
    <mx:Button id="Btn_add_action" x="464" y="221" label="Add
    Screenshot" click="addImgToTile(bm1)" useHandCursor="true"
    buttonMode="true" toolTip="Add Clip (shotcut insert)"/>
    <mx:TileList id="tileList"
    dataProvider="{imgData}"
    columnCount="4"
    columnWidth="222"
    rowCount="2"
    rowHeight="194"
    themeColor="haloSilver"
    verticalScrollPolicy="on"
    x="0" y="415" width="100%">
    <mx:itemRenderer>
    <mx:Component>
    <mx:VBox horizontalAlign="center"
    verticalAlign="middle" width="222" height="194"
    verticalScrollPolicy="off" horizontalScrollPolicy="off" >
    <mx:Image id="img" width="165" height="126"
    maintainAspectRatio="true" source="{data.asset}" />
    <mx:Label id="txt" text="{data.title}"/>
    <mx:Button id="del" label="Delete"
    click="outerDocument.deleteSnapShot(event)"/>
    </mx:VBox>
    </mx:Component>
    </mx:itemRenderer>
    </mx:TileList>
    variable:
    private var videoHolder:UIComponent = new UIComponent();
    [Bindable] public var imgData:ArrayCollection = new
    ArrayCollection();
    init :
    nc = new NetConnection();
    nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
    nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
    netSecurityError);
    nc.connect(Srv_Name);
    videoHolder.setActualSize(Playing_Video_width,
    Playing_Video_height);
    Playing_Video = new Video(Playing_Video_width,
    Playing_Video_height);
    videoHolder.addChild(Playing_Video);
    Playing_Video.x = 0;
    Playing_Video.y = 0;
    videoHBox.width = Playing_Video.width;
    videoHBox.height = Playing_Video.height;
    videoHBox.addChild(videoHolder);
    functions:
    public function addStart(timecode:Number):void{
    var bm:Bitmap = copyBitmap(videoHBox as
    UIComponent,timecode,"start");
    bm1 = bm;
    img_start_time.text = formatTime(timecode);
    start_time = timecode;
    public function addImgToTile(bm:Bitmap):void{
    var bm1:BitmapData = Bitmap(bm1_source.content).bitmapData;
    var bitmap:Bitmap = new Bitmap(bm1);
    var vo:MyVOBm = new
    MyVOBm(bitmap,formatTime(inStream.time));
    imgData.addItem(vo);
    private function
    copyBitmap(source:UIComponent,timecode:Number,origin:String=''):Bitmap
    try{
    var bmd:BitmapData = new BitmapData( source.width,
    source.height );
    bmd.draw(source);
    corectImg = false;
    catch (err:Error){
    this.setFocus();
    inStream.seek(timecode);
    if (origin == "start") setTimeout(addStart,750,timecode);
    return new Bitmap(bmd);
    public function deleteSnapShot(ev:Event):void{
    imgData.list.removeItemAt(tileList.selectedIndex);
    and the MyVOBm class is :
    package components
    import flash.display.Bitmap;
    [Bindable]
    public class MyVOBm
    private var _asset:Bitmap;
    private var _title:String;
    public function MyVOBm(asset:Bitmap, title:String)
    this.title=title;
    this.asset=asset;
    public function set title(title:String):void{
    _title=title;
    public function get title():String{
    return _title;
    public function set asset(asset:Bitmap):void{
    _asset=asset;
    public function get asset():Bitmap{
    return _asset;

  • Issue with xslt transform

    I'm having a problem with xslt transformations.
    I'm sending a DOMDocument to be transformed into a varchar2. The transformation was into html and I was then printing the returning varchar2 to a web page, along the lines of...
    htp.prn(Xslt.transform(domdoc, xslt.stylesheet( l_stylesheet_bfile)));
    I subsequently broke the varchar2 32k limit so I started playing with transforming into a dom instead of a varchar, then writing the dom to a clob and the printing the clob to the web page in 32k chunks.
    I noticed this produced different results than the first method. Now I'm assuming that this is not because xslt is doing the transformations differently but because it's trying to put my html into a well-formed DOMdocument. I have noticed, though, that things like & #160; seemed to have disappeared.
    Just wondering if I'm doing something wrong, and also any reason why the transform functionality doesn't have an output option of CLOB?
    Thanks
    Jason

    What is the DB version?

  • Long canvas with scroll bar

    Hi. I have a form with a very long canvas containing more items than fit on the screen at a time - meaning some items are far down on the canvas and do not appear unless the user physically uses the mouse and scrolls down. This causes a problem for me because as the user tabs through the various fields the cursor will eventually "appear" to disappear. It has not actually disappeared of course, but it has simply navigated to an item that is further down on the canvas out-of-sight. Thus the user must recognize that this has happened and then use the mouse to scroll down and find the cursor again.
    Is there a way to automatically coordinate this scrolling so that the cursor always stays in view for the user - meaning that the user will never have to manually scroll down to find the cursor? Or worst case, can I programatically scroll down for the user so that the cursor always remains visible?
    Any help would be greatly appreciated. If you have any sample code please send it to: [email protected]
    Thanks in advance.
    Edited by: Buechler on Jun 30, 2009 12:20 PM

    -> 3) Changed the default Window width to 5 and it's height to 12
    Don't do that. That apparently guarantees the problem you have.
    The Window size should be no larger than will fit on the user's screen, and the user running the lowest screen resolution should be your target. We create forms no larger than will fit on the 800x600 layout. Our forms always use the Real,Pixel coordinate system, and I create forms with the window size set to a maximum of 784x442. Those reduced numbers allow the form to fit within a browser window in web forms. Our forms run under both 6i Client/Server AND Web, and there is a pre-form that adjusts the web form window size a little larger, but that is all.
    Also, when you run your form, that scrollbar you see is there because your window is not maximized. Our forms always maximize the window, and even have a when-window-resized trigger with this:
    <pre><font face = "Lucida Console, Courier New, Courier, Fixed" size = "1" color = "navy">DECLARE
    W0 Window := Find_Window('WINDOW0');
    BEGIN
    If Get_Window_Property(W0,Window_State)<>'MAXIMIZE' then
    Set_Window_Property(W0,Window_State,Maximize);
    End if;
    END;</font></pre>
    The wwr trigger ensures the user never sees the Window0 border -- it is useless unless you are running a form with multiple windows, which we never do.
    So.... Maximize your Window0, and then you will see the behavior I have been describing. Create a stacked canvas with a vertical scrollbar, and it will behave even better.

  • Troubles importing Flash 10 Animation with 3D Transform

    I am looking for any workaround/experiences for importing a Flash 10 animation with 3D transforms. Currently, doing this will wig out Captivate 4 and break the embedded animation in all sorts of ways. AS3 support in Captivate is turned on and the same animation will load and play correctly if the 3D transform is removed. All other Flash 10/AS3 possibilites work including motiosn graphs and filters.
    I find the 3D transform option of Flash CS4 to be one of the most powerful features ever introduced in Flash and would allow some incredible breakthrough design possibilities for my Captivate projects, if it would just support it! Any experiences with this issue welcomed. A bug report has been submitted also, but looking for a quicker remedy.

    Problem Resolved!
    I got this tip from Vikram (Adobe Support)
    1. Open your project having Flash Player 10 animations involving 3D transforms.
    2. Click the Edit menu and select Preferences.
    3. Select "Publish settings" under the "Project" section.
    4. Check "Animations" option under the "Externalize resources" section.
    5. Press OK.
    6. Now click the publish button.
    7. In the publish dialog, select Flash Player 10 from the "Flash Player version:" drop down.
    8. Click publish.
    (F4 preview may not work, so use preview in browser)
    Also, you may need to be wary of embedded scripted symbols as they may loose reference to the parent symbol after being embedded in yoru your CP4 project containing 3D transforms. My advice here is to try to script using as much object oriented js as possible in the main timeframe.
    I am using a combination of localConnect and ExternalInterface functions to control the 3D animation from captivate quiz buttons. This process adds a whole new level of interactivity and visual interest to your captivates!

  • Stacked Canvas with one block displaying twice

    I have a question regarding the Stacked Canvas. I have to create a calender for clients. (I am using stacked canvas to do that).
    In the 'calender' table i would have the information like ClientID, Year, weekno, start date, end date.
    So i created two blocks for 'Calender' table in this form. One block for Content canvas with ClientID and Year (Block1). And another block (Block2) on Stacked canvas for weekno, startdate and enddate.(normally there will be 52 weeks sometime 53 weeks)
    On the Block1 it suppose to display the ClientID and Year once. And in the block2 (stacked canvas) it suppose to display 53 rows with weekno and the start/end dates.
    When i create a new row in the block1 for clientid and year (1234, 2008) then the block2 will be populated with 01-jan-2008 to the 31-dec-2008. But the problem i am having is when i try to save it is trying to save two times one from block1 and once from block2 resulting in a unique constraint error.
    how should i structure this so it saves only once?
    I tried to keep the clientid and the year in block1 as non-database items and copied those values into the block2, that way it saves correctly but when i try to query on the upper block it gives me error.

    But you only have one table. You need two tables for master-detail. Can you normalize the calendar table and change it to two tables (master-detail).
    See
    Re: regarding display of records in header and line level
    Gerd offers a solution for two blocks and one table. Maybe that will work for you.
    Message was edited by:
    Mark Roberts

  • **Urgent**: GO_ITEM to pop-up CANVAS with IMAGE in Sun JRE gives error

    Our Forms 10g Environment is this: Forms [32 Bit] Version 10.1.2.0.2 (Production) using Sun JRE i.e. Java Plug-in 1.6.0_06
    Problem is that when we try to navigate to a canvas (from a Button) which has an IMAGE ITEM the form is exited. This happens in every form which has a canvas with an image.
    i.e. In Button, we have code: Go_Item('block123.button1'). Button1 is also in that pop-up canvas.
    Even GO_BLOCK gives the same result.
    If the image is in the same canvas as the button which has GO_ITEM code, then it works.
    Of course this whole things works fine in JInit. But we need to run in Sun JRE.
    Is this a Bug?? Any help would be greatly appreciated.

    christian erlinger wrote:
    Well, as you are on 10.1.2.0.2 I strongly suggest that you apply the latest Patchset (10.1.2.3) the latest CPU Patches and the latest merge Patches. A lot of focus related things are fixed in those patches.
    cheersI will do this and let u know thans.

  • Replace Canvas with Group!??

    Hi,
    I tried to replace the Canvas with a group in the following code
    This works fine:
    1.)
    <mx:TabNavigator id="tn" width="100%" height="100%"> ...
    private function AddForm():void{
        var children:Array=tn.getChildren();
        var form:myCanvas=new myCanvas;
        tn.addChild(form);
        form.label="Form" + (children.length+1).toString();
        tn.selectedChild=form;
    2.)
    I tried to do the same with a group, this have several problems:
    private function AddGroup():void{
        var children:Array=tn.getChildren();
        var form:myGroup=new myGroup;
        tn.addChild(form);
              // runtime: TypeError: Error #1034: Type Coercion failed: cannot convert myGroup@f02ec29 to mx.core.Container.
        form.label="Form" + (children.length+1).toString();
              // compile error 1119: Access of possibly undefined property label through a reference with static type myGroup.    TestModuleService.mxml              TestModuleService/src    line 78    Flex Problem
        tn.selectedChild=form;
              //compile error 1067: Implicit coercion of a value of type myGroup to an unrelated type mx.core:Container.    TestModuleService.mxml              TestModuleService/src    line 80    Flex Problem
    Is it possible to achieve the same result as 1.) using a group?
    Thanks for any pointers!
    Martin Zach

    Hi,
    the reason for my question was, that I didn't understand the advantage of spark. Now I do!
    The follwoing videos explains that wunderfully:
    http://labs.adobe.com/technologies/flashbuilder4/tutorials/
    ->
    Part "Learn about Flex 4 SDK"
    Video: Skinning Components and Applications in Flex 4
    Thanks for your answers!
    Martin Zach

  • The problem I have since I upgraded to Mavericks version 10.9.1 The problem appears only with Mail not with other programs, not even with my browser. When I try to zoom the text of an e-mail I received or sent , I can no longer use the keys Command   to e

    the problem I have since I upgraded to Mavericks version 10.9.1
    The problem appears only with Mail not with other programs, not even with my browser.
    When I try to zoom the text of an e-mail I received or sent , I can no longer use the keys Command + to enlarge the text, although I can reduce it with Command -.
    As I have a problem with my eyes, This is a serious matter for me.
    When I write an e-mail, if I select text and press Command +, it just displaces the text to the right.
    Now, my husband has a USB keyboard. If he connects it to my computer, his regular Command + does not work either, but  he uses the extended keyboard, then it works. Unfortunately, he needs it for a musical application which does not work with a wireless keyboard.

    Firefox 3.6.4 and 3.6.6 use a process called, "plugin-container.exe" which was using up most of my CPU when I opened up multiple tabs that contained Adobe Flash files, and caused Firefox to lock up.
    My solution was to use Firefox 3.5.10 which you can get from the Mozilla website at [http://www.mozilla.com/en-US/firefox/all-older.html]
    I am using Adobe Flash 10.1.53.64 without any problem in this version of Firefox. Check the release notes, I believe it contains all the latest security fixes in "Firefox 3.6.4".
    Hopefully, they will fix Firefox 3.6 in the next version (e.g. Firefox 3.6.7), until then you should probably use "Firefox 3.5.10".

  • I have an alert message in disc utility. Error: storage system verify or repair failed. Problems were found with the partitian map which might prevent booting.

    While running verify disc in disc utility on 251 GB SSD SM256c Media I came up with this message: Alert system verify or repair failed. In the descriptions box of history it said, problems were found with the partitions map which might prevent booting. This is followed by a message in red reading, Error: Storage system verify or repair failed. At the time I was down loading raw pictures off my camera through a card reader across my computer to a relatively new 2TB Western Digital portable hard drive. after about 13 to 15 pictures downloaded that drive faileded. My Mac Book Air works fine, but i get this message now everytime I run disc verify on this disc. The Macintosh HD checks out fine.

    While running verify disc in disc utility on 251 GB SSD SM256c Media I came up with this message: Alert system verify or repair failed. In the descriptions box of history it said, problems were found with the partitions map which might prevent booting. This is followed by a message in red reading, Error: Storage system verify or repair failed. At the time I was down loading raw pictures off my camera through a card reader across my computer to a relatively new 2TB Western Digital portable hard drive. after about 13 to 15 pictures downloaded that drive faileded. My Mac Book Air works fine, but i get this message now everytime I run disc verify on this disc. The Macintosh HD checks out fine.

  • Hi! I can't upgrade my iTunes 10.3.1.55 on my Windows XP 2002 SP3 to the latest version of iTunes. Got the message: "A problem has occured with the Windows Installer-package. A program needed for this installation could not be run." What to do?

    Hi! I can't upgrade my iTunes 10.3.1.55 on my Windows XP 2002 SP3 to the latest version of iTunes. Got the message: "A problem has occured with the Windows Installer-package. A program needed for this installation could not be run." What to do?

    Perhaps let's first try updating your Apple Software Update.
    Launch Apple Software Update ("Start > All Programs > Apple Software Update"). Does it launch and offer you a newer version of Apple Software Update? If so, choose to install just that update to Apple Software Update. (Deselect any other software offered at the same time.)
    If the ASU update goes through okay, try another iTunes install. Does it go through without the errors this time?

  • Why does my iPhone 4 not charge correctly?  Problem is definitely with the phone and not charges or chords.  Phone will charge but very slowly and no icon comes on.  Computer and iTunes doesn't recognize it a being connected.

    My iPhone 4 quit charging correctly.  It does charge but very slowly and icon doesn't indicate it as charging.  I've checked cables and charges and the problem is definetily with the phone.  My car stereo no longer recognizes it as a device.  Neither does the computer.  The real strange thing to me is that when I plug it into my old klispch speaker dock it will play songs.  My battery life is good when it is charged so I don't think its the battery. I've tried resetting the phone and cleaning the charging port.  I'm out of warranty.
    Would disconnecting the battery possibly reset it from some glitch or is the charging port got some bad contacts?

    I checked with the Genius Bar.  It was a new dilema to the lady that was helping me.  She took it to a back room and worked on it but it came out the same.  She gave me some options for repair or credit for replacement.
    I just kept the phone and put up with slowly charging it by plugging it in and then turning it off.
    I couldn't transfer anything from itunes.
    I finally got fed up and bought a new charging port for $10. and a toolkit for $3.  I looked up a video on youTube for the replacement and did it.
    That solved all the problems, it was the charging port, must have been some bad pins or something because it patially worked.

  • Having installed an upgrade for Photoshop Elements 13, I cannot open the application. I get an error message saying "Adobe Photoshop Elements Editor cannot be opened because of a problem. Check with the developer to make sure Adobe Photoshop Elements Edit

    Having installed an upgrade for Photoshop Elements 13, I cannot open the application. I get an error message saying "Adobe Photoshop Elements Editor cannot be opened because of a problem. Check with the developer to make sure Adobe Photoshop Elements Editor works with this version of OS X. You may need to reinstall the application. Be sure to install any available updates for the application and OS X".
    I have since uninstalled and reinstalled the app, but get the same error message.

    Which version of OS X do you have? It's not clear from your post whether "installed an upgrade" means you just installed PSE 13 as an upgrade or you installed an update to PSE 13, like ACR 9 or 13.1. Please clarify.

  • Problem when syncing with MobileMe

    I am using iPhone 3G, software 2.1. I use GMail for email (no problems) but my contacts, and only my contacts, sync through MobileMe.
    The problem is that with MobileMe active, my Contact list, "Mail, Contacts and Calendars" settings and several other minor features simply do not work - they open, pause for a few seconds, then crash. The Mail application also hangs and crashes every other time I open it.
    My local Apple Store restored 2.1, after which my Contact list and Email worked perfectly until I re-activated my MobileMe syncing, after which the problems resumed.
    As the problems occurred only after MobileMe syncing is turned on, I assume this is the cause of the problem, but because "Mail, Contacts..." settings crashes every time I open it I cannot disable MobileMe syncing.
    Any suggestions please? All help gratefully received...

    This was resolved by completely removing the MobileMe account from the iPhone, rebooting it and adding the account again.

Maybe you are looking for