2013年9月30日 星期一

win7 Aero 動畫效果的速度,可以調整嗎?

這次重灌系統之後(沒有灌win8,因為有些案子還是win32的案子,64位元的交給內部的win server 2012  64 bit VM)
所有GUI中有關的動畫元素都會變慢,連firefox的頁籤出現消失也一樣
這問題,就算是重灌了driver還是一樣
OK,答案是出在機碼上面
請到
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
加上一個機碼「
DesktopLivePreviewHoverTime」
資料型態是DoubleWord,值看你怎麼給(我是給Decimal 100)
設定完之後重開機就可以看到效果了

2013年9月14日 星期六

android: 在ScrollView->relativelayout中的背景圖無法延伸涵蓋整個大螢幕!?

layout:
=================================
 <ScrollView xmlns:....
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
      <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitXY"
        android:background="@drawable/welcome_bg"
        android:gravity="fill_vertical|fill_horizontal">
        ....
        ....
        ...
     </RelativeLayout>
</ScrowView>
=================================
在手機上沒這問題,在大平版上就會出現穿迷你裙的窘態
這時只差一個屬性就可以了:
=================================
 <ScrollView xmlns:....
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
   android:fillViewport="true">
     ...
      ....其他不必改
    .....
================================

2013年9月12日 星期四

android : 回上一頁之外還要求其再執行create函數

有時在查詢結果頁後,帶到明細去修改再回去時,你會發現查詢結果頁還是之前暫存的狀態
(因為只是執行resume...那類的activity函數),如何解決這問題?
除了在原先的明細修改中用了 this.finish(); 回上一頁之外,
還是要用到intent 的串頁方式
參考如下:
=================================================
  class QueryResultList extends Activity{
   
  void gotoDetail(){
        intent it....
        startActivity(it);
       
  }
 }

  class DetailItemEditor extends Activity{
     ...
     ...
     ....
    void back(){
        //回上一頁
  Intent itBack2List=new Intent();
        //把以下的串接放在intent queue的最上面,別把目前的activity放上去,
        //不然在QueryResultList 頁的「回上頁」又會跑到目前的activity了.
           itBack2List.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
           itBack2List.setClass(查詢條件頁.ctx4Back ,
                                           QueryResultList.class);
          ((Activity)me).finish();      
 startActivity(itBack2List);

    }
 }
=======================================
這樣,在DetailItemEditor 執行back時,就會重新執行create動作了
加油囉!!

2013年9月4日 星期三

Android : repeat (hold) button

原文出處:
http://stackoverflow.com/questions/7938516/continuously-increase-integer-value-as-the-button-is-pressed
為了怕被移除,先抄個備份吧:
============================================
private boolean mAutoIncrement = false;
private boolean mAutoDecrement = false;
public int mValue;
private Handler repeatUpdateHandler = new Handler();
EditText txtQty;
class RptUpdater implements Runnable {
   public void run() {
       if( mAutoIncrement ){
           increment();
           repeatUpdateHandler.postDelayed( new RptUpdater(), 100 );
       } else if( mAutoDecrement ){
           decrement();
           repeatUpdateHandler.postDelayed( new RptUpdater(), 100 );
       }
   }
}
public void decrement(){
if(mValue==0)return;
   mValue--;
   txtQty.setText( ""+mValue );
}
public void increment(){
   mValue++;
   txtQty.setText( ""+mValue );
}
@Override protected void onCreate(Bundle savedInstanceState) {
           ...
          ...
          ....
         txtQty=(EditText)findViewById(id.txtProdQtyInDialog);
mValue=prod2Proc.orderQty;
txtQty.setText(""+mValue);
Button btnQtyAdd=(Button)findViewById(id.btnQtyPlus);
Button btnQtyMinus=(Button)findViewById(id.btnQtyMinus);

btnQtyAdd.setOnClickListener(
        new OnClickListener(){
@Override
public void onClick(View arg0) {
      increment();
}
         
        }
        );
btnQtyAdd.setOnLongClickListener( 
           new View.OnLongClickListener(){
               public boolean onLongClick(View arg0) {
                   mAutoIncrement = true;
                   repeatUpdateHandler.post( new RptUpdater() );
                   return false;
               }
           }
   );   

btnQtyAdd.setOnTouchListener( new View.OnTouchListener() {
       public boolean onTouch(View v, MotionEvent event) {
           if( (event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL) 
                   && mAutoIncrement ){
               mAutoIncrement = false;
           }
           return false;
       }
   });  
btnQtyMinus.setOnClickListener(
        new OnClickListener(){
@Override
public void onClick(View arg0) {
      decrement();
}
         
        }
        );
btnQtyMinus.setOnLongClickListener( 
           new View.OnLongClickListener(){
               public boolean onLongClick(View arg0) {
                   mAutoDecrement = true;
                  repeatUpdateHandler.post( new RptUpdater() );
                   return false;
               }
           }
   );   

btnQtyMinus.setOnTouchListener( new View.OnTouchListener() {
       public boolean onTouch(View v, MotionEvent event) {
           if( (event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL) 
                   && mAutoDecrement ){
               mAutoDecrement = false;
           }
           return false;
       }
   });  
         ...
           ...
          ...
==============================================================
     以上,加油

2013年9月1日 星期日

Properties.System.Media.Duration.Value在 server 2012會成為null !?

在製做多媒體後台時,一定會使用到一些媒體相關的函數
最常在問的就是該媒體播放時間多久(以供廣告成本推估參考)
c#在這方面是有範例
參考這個連結
總之就是下載WindowsAPICodePack,呼叫shell
--------------------------------------------------------------
ShellFile so = ShellFile.FromFilePath(file);
double nanoseconds = 0;
Double.TryParse(so.Properties.System.Media.Duration.Value.ToString(), nanoseconds );
注意這裡取得的 nanoseconds 的單位是 100 nanoseconds,所以要換算成秒的話,可以將變數 nanoseconds 乘以 0.0001 再除以 1000。
--------------------------------------------------------------
很簡單吧,那我幹嘛寫這篇?
以上是在win7 ultimate ,vs2012跑的,很正常,也很稱職
問題來了,如果是在windows server 2012 的vs2012呢?
對不起,Properties.System.Media.Duration.Value.ToString()會出現null
最基本的原因是server 2012預設是不灌media player的,而上述的函數靠的就是呼叫shell去叫media player功能.
所以在server 2012要執行這程式時,請安裝media player
怎麼裝?參考這連結 
裝完就沒事嗎?代志不是這樣就收工去領便當了
請把之前下載的WindowsAPICodePack的「source\WindowsAPICodePack」下的「WindowsAPICodePack」方案(solution)下的core、shell等專案(project)的建置目標都改為64位元平台,build一下,再把你之前要呼叫Properties.System.Media.Duration.Value的專案參考到你build出來的dll(Microsoft.WindowsAPICodePack.Shell.dll & Microsoft.WindowsAPICodePack.dll)

以上,加油了