2012年5月23日 星期三

[javascript]日期計算

加365日
alert(addDate(4,365,'0960301'));
→顯示 0970229


加一年 減一日
addDate(4,-1,addDate(1,1,'1000301'));
→顯示 1000229

function addDate(type,NumDay,dtDate){
  var date = new Date();
  type = parseInt(type); //類型
  lIntval = parseInt(NumDay);//間隔
  date.setYear(parseInt(dtDate.substr(0,3),10) + 1911); //年設定
  date.setMonth(parseInt(dtDate.substr(3,2)-1,10) ); //月設定
  date.setDate(parseInt(dtDate.substr(5,2),10)); //日設定

  switch(type){
     case 1 ://年
        date.setYear(date.getYear() + lIntval)
        break;
     case 2 ://季度
        date.setMonth(date.getMonth() + (lIntval * 4) )
        break;
     case 3 ://月
        date.setMonth(date.getMonth() + lIntval)
        break;
     case 4 ://天
        date.setDate(date.getDate() + lIntval)
        break;
     default:
    }
 
   return  LPad(""+parseInt(date.getYear()-1911),"0",3) +'' +  LPad(""+parseInt(date.getMonth()+1),"0",2) + '' +  LPad(""+parseInt(date.getDate()),"0",2);
 }


//向左補零
function LPad(str,sub,len)
{
   var str1=str;
   while(1)
   {
      var i=str1.length;
   if (i>=len)
   {
   break;
   }
   else
   {
         str1=sub+str1;
      }
   }
   return str1;
}


2012年5月7日 星期一

存取資料庫+讀寫EXCEL

package dbConnection;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import jxl.Workbook;
import jxl.write.Alignment;
import jxl.write.Colour;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class jdbcmysql {
 private Connection con = null; // Database objects
 // 連接object
 private Statement stat = null;
 // 執行,傳入之sql為完整字串
 private ResultSet rs = null;
 // 結果集
 private PreparedStatement pst = null;

 // 執行,傳入之sql為預儲之字申,需要傳入變數之位置
 // 先利用?來做標示

 public jdbcmysql() {
  

 }

 // 建立table的方式
 // 可以看看Statement的使用方式
 public void createTable() {
  String createdbSQL = "CREATE TABLE User (" + "    id     INTEGER "
    + "  , name    VARCHAR(20) " + "  , passwd  VARCHAR(20))";
  try {
   stat = con.createStatement();
   stat.executeUpdate(createdbSQL);
  } catch (SQLException e) {
   System.out.println("CreateDB Exception :" + e.toString());
  } finally {
   Close();
  }
 }

 // 新增資料
 // 可以看看PrepareStatement的使用方式
 public void insertTable(String name, String passwd) {
  String insertdbSQL = "insert into User(id,name,passwd) "
    + "select ifNULL(max(id),0)+1,?,? FROM User";
  try {
   pst = con.prepareStatement(insertdbSQL);

   pst.setString(1, name);
   pst.setString(2, passwd);
   pst.executeUpdate();
  } catch (SQLException e) {
   System.out.println("InsertDB Exception :" + e.toString());
  } finally {
   Close();
  }
 }

 // 刪除Table,
 // 跟建立table很像
 public void dropTable() {
  String dropdbSQL = "DROP TABLE User ";
  try {
   stat = con.createStatement();
   stat.executeUpdate(dropdbSQL);
  } catch (SQLException e) {
   System.out.println("DropDB Exception :" + e.toString());
  } finally {
   Close();
  }
 }

 /**
  * 取得 Oracle連線conn
  * 
  * @return
  * @throws IOException
  * @throws ClassNotFoundException
  * @throws SQLException
  */
 public static Connection OracleConn() throws IOException,
   ClassNotFoundException, SQLException {

  // Oracle 正式機  

 }

 /**
  * 取得 MSSQL連線conn
  * 
  * @return
  * @throws IOException
  * @throws ClassNotFoundException
  * @throws SQLException
  */
 public static Connection MSSQLConn() throws IOException,
   ClassNotFoundException, SQLException {

  

 }

 /**
  * 取得 Oracle連線conn
  * 
  * @return
  * @throws IOException
  * @throws ClassNotFoundException
  * @throws SQLException
  */
 public static Connection OracleConnTest() throws IOException,
   ClassNotFoundException, SQLException {

  

 }

 /**
  * 取得 MSSQL連線conn
  * 
  * @return
  * @throws IOException
  * @throws ClassNotFoundException
  * @throws SQLException
  */
 public static Connection MSSQLConnTest() throws IOException,
   ClassNotFoundException, SQLException {

 
 }

 // 查詢資料
 // 可以看看回傳結果集及取得資料方式
 public static ResultSet MSSelectTable(String Comm) throws IOException,
   SQLException, ClassNotFoundException {

  Connection connectino = null; // Database objects
  // 連接object
  Statement statement = null;
  // 執行,傳入之sql為完整字串
  ResultSet resultSet = null;
  connectino = MSSQLConn();
  statement = connectino.createStatement();

  // 取繳款書統計使用數量中,有使用的日期。
  resultSet = statement.executeQuery(Comm);
  return resultSet;

 }

 public static Integer MSTableCount(String Comm) throws IOException,
   SQLException, ClassNotFoundException {

  Connection connectino = null; // Database objects
  // 連接object
  Statement statement = null;
  // 執行,傳入之sql為完整字串
  ResultSet resultSet = null;
  connectino = MSSQLConn();
  statement = connectino.createStatement();

  // 取繳款書統計使用數量中,有使用的日期。
  resultSet = statement.executeQuery(Comm);
  return resultSet.getInt(1);

 }

 public static ResultSet ORSelectTable(String Comm) throws IOException,
   SQLException, ClassNotFoundException {

  Connection connectino = null; // Database objects
  // 連接object
  Statement statement = null;
  // 執行,傳入之sql為完整字串
  ResultSet resultSet = null;
  connectino = OracleConn();
  statement = connectino.createStatement();

  // 取繳款書統計使用數量中,有使用的日期。
  resultSet = statement.executeQuery(Comm);
  return resultSet;

 }

 public static void ExportEXL(String FileName, String inputp[][], int rows,
   int columns) {

  try {
   /*
    * 1. 建立Workbook 也就是整份的Excel檔案,可指定檔名。 WritableWorkbook workbook =
    * Workbook.createWorkbook(new File("test.xls"));
    */
   System.out.println("建立Workbook!");
   WritableWorkbook workbook = Workbook.createWorkbook(new File(
     FileName + ".xls"));

   /*
    * 2. 建立Sheet 也就是每個Excel檔案下面可以跳tag的sheet表。 WritableSheet sheet =
    * workbook.createSheet("My Sheet", 0); 第一個參數是sheet
    * name,第二個參數是第幾張sheet,從0開始。
    */
   System.out.println("建立Sheet!");
   WritableSheet sheet = workbook.createSheet("First Sheet", 0);

   // 3. 設定Cell格式(可省略,就會是預設的格式)
   System.out.println("設定Cell格式!");
   WritableCellFormat cellFormat = new WritableCellFormat();
   WritableFont myFont = new WritableFont(WritableFont
     .createFont("標楷體"), 12);
   cellFormat.setFont(myFont); // 指定字型
   myFont.setColour(Colour.BLACK);
   // cellFormat.setBackground(Colour.LIGHT_BLUE); // 背景顏色
   cellFormat.setAlignment(Alignment.CENTRE); // 對齊方式

   // 4. 增加一個文字儲存格Cell
   System.out.println("建立EXCEL內的title!");
   Label label = new Label(0, 0, "Table Name");

   System.out.println("建立EXCEL內的內文!");

   for (int c = 0; c < columns; c++) {
    for (int r = 0; r < rows; r++) {
     label = new Label(c, r, inputp[c][r]);
     sheet.addCell(label);
    }
   }

   // 5. 寫入及結束文件
   workbook.write(); // 寫入
   System.out.println("寫入完成!");
   workbook.close(); // 關閉
   System.out.println("關閉完成!");
  } catch (IOException e) {
   System.out.println("EXL IOException:" + e.toString());
  } catch (Exception e) {
   System.out.println("EXL Exception:" + e.toString());
  }

 }

 // 完整使用完資料庫後,記得要關閉所有Object
 // 否則在等待Timeout時,可能會有Connection poor的狀況
 private void Close() {
  try {
   if (rs != null) {
    rs.close();
    rs = null;
   }
   if (stat != null) {
    stat.close();
    stat = null;
   }
   if (pst != null) {
    pst.close();
    pst = null;
   }
  } catch (SQLException e) {
   System.out.println("Close Exception :" + e.toString());
  }
 }

 public static String[][] RStoArray(ResultSet resultSet, String rsData[][])
   throws SQLException {
  ResultSetMetaData rsmd = resultSet.getMetaData();
  int columnsCount = rsmd.getColumnCount();
  int rowCount = 0;
  String[][] temp = new String[columnsCount][100000];
  while (resultSet.next()) {
   for (int r = 1; r <= columnsCount; r++) {
    String CN = rsmd.getColumnName(r);
    temp[r - 1][rowCount] = resultSet.getString(CN);
   }
   rowCount += 1;
  }
  rsData = new String[columnsCount][rowCount];
  for (int i = 0; i < temp.length; i++) {
   System.arraycopy(temp[i], 0, rsData[0], i, rowCount);
  }

  // for (int c = 0; c < rowCount; c++) {
  // for (int r = 0; r < rows; r++) {
  // inputp[][] = temp[][] ;
  // }
  // }
  int a = 0;
  a++;
  return rsData;
 }

 // 查詢所有table名稱和數量
 public void SelectMSSQLAllTableNameAndCount() throws IOException,
   ClassNotFoundException {
  try {
   // MSSQL select all table name
   String SQLCommStr = "Select table_name From information_schema.tables Where table_type='BASE TABLE'";
   // Oracle select all table name
   // String SQLCommStr = "Select table_name From User_Tables Order by table_name"

   ResultSet resultSet = null;
   System.out.println("SQL指令撈資料!");
   resultSet = MSSelectTable(SQLCommStr);
   System.out.println("SQL指令撈資料[完成]!");

   // 轉換
   ResultSetMetaData rsmd = resultSet.getMetaData();
   int columnsCount = rsmd.getColumnCount();
   // int rowsCount = MSTableCount()
   String[][] rsData = new String[columnsCount][];
   rsData = RStoArray(resultSet, rsData);
   // 取得資料庫資訊

   System.out.println("轉換完成!");

   String[] Count = new String[rsData[0].length];
   String[] Time = new String[rsData[0].length];

   for (int i = 0; i < rsData[0].length; i++) {

    SQLCommStr = "Select Count(*) From " + rsData[0][i];
    long StartTime = System.currentTimeMillis(); // 取出目前時間
    resultSet = MSSelectTable(SQLCommStr);
    long ProcessTime = System.currentTimeMillis() - StartTime; // 計算處理時間
    Time[i] = Long.toString(ProcessTime) + " ms" ;
    
    // 轉換
    rsmd = resultSet.getMetaData();
    columnsCount = rsmd.getColumnCount();
    // int rowsCount = MSTableCount()
    String[][] tempCount = new String[columnsCount][];
    System.out.println(i + 1 + " : " + rsData[0][i] + " OK! - " + Time[i]);
    tempCount = RStoArray(resultSet, tempCount);
    // 取得資料庫資訊
    Count[i] = tempCount[0][0];
   }

   String[][] printStr = new String[3][rsData[0].length];
   System.arraycopy(rsData[0], 0, printStr[0], 0, rsData[0].length);
   System.arraycopy(Count, 0, printStr[1], 0, rsData[0].length);
   System.arraycopy(Time, 0, printStr[2], 0, rsData[0].length);
   
   ExportEXL("20120508 MSSQL", printStr, rsData[0].length, 3);
   System.out.println("產出完成 OK!");

   // for (int i=0 ; i<=rsData)
   // SQLCommStr = "Select Count(*) From";

  } catch (IOException e) {
   System.out.println("EXL IOException:" + e.toString());
  } catch (Exception e) {
   System.out.println("EXL Exception:" + e.toString());
  }

 }

 public void SelectOracleAllTableNameAndCount() throws IOException,
   ClassNotFoundException {
  try {
   // MSSQL select all table name
   //String SQLCommStr = "Select table_name From information_schema.tables Where table_type='BASE TABLE'";
   // Oracle select all table name
    String SQLCommStr = "Select table_name From User_Tables Order by table_name" ;

   ResultSet resultSet = null;
   System.out.println("SQL指令撈資料!");
   resultSet = ORSelectTable(SQLCommStr);
   System.out.println("SQL指令撈資料[完成]!");

   // 轉換
   ResultSetMetaData rsmd = resultSet.getMetaData();
   int columnsCount = rsmd.getColumnCount();
   // int rowsCount = MSTableCount()
   String[][] rsData = new String[columnsCount][];
   rsData = RStoArray(resultSet, rsData);
   // 取得資料庫資訊

   System.out.println("轉換完成!");

   String[] Count = new String[rsData[0].length];
   String[] Time = new String[rsData[0].length];

   for (int i = 0; i < rsData[0].length; i++) {
    
    SQLCommStr = "Select Count(*) From " + rsData[0][i];
    
    long StartTime = System.currentTimeMillis(); // 取出目前時間
    resultSet = ORSelectTable(SQLCommStr);
    long ProcessTime = System.currentTimeMillis() - StartTime; // 計算處理時間
    Time[i] = Long.toString(ProcessTime) + " ms";
    // 轉換
    rsmd = resultSet.getMetaData();
    columnsCount = rsmd.getColumnCount();
    // int rowsCount = MSTableCount()
    String[][] tempCount = new String[columnsCount][];
    System.out.println(i + 1 + " : " + rsData[0][i] + " OK! - " + Time[i]);
    tempCount = RStoArray(resultSet, tempCount);
    // 取得資料庫資訊
    Count[i] = tempCount[0][0];
   }

   String[][] printStr = new String[3][rsData[0].length];
   System.arraycopy(rsData[0], 0, printStr[0], 0, rsData[0].length);
   System.arraycopy(Count, 0, printStr[1], 0, rsData[0].length);
   System.arraycopy(Time, 0, printStr[2], 0, rsData[0].length);

   ExportEXL("20120508 Oracle", printStr, rsData[0].length, 3);
   System.out.println("產出完成 OK!");

   // for (int i=0 ; i<=rsData)
   // SQLCommStr = "Select Count(*) From";

  } catch (IOException e) {
   System.out.println("EXL IOException:" + e.toString());
  } catch (Exception e) {
   System.out.println("EXL Exception:" + e.toString());
  }

 }

 public static void main(String[] args) throws IOException,
   ClassNotFoundException {
  // 測看看是否正常
  jdbcmysql SQL = new jdbcmysql();
  SQL.SelectMSSQLAllTableNameAndCount();
  SQL.SelectOracleAllTableNameAndCount();
 }
}

2012年4月18日 星期三

AWT、SWT and Swing 的區別

AWT,SWT和Swing的區別
2009-08-07 10:02
GUI 應用程序是軟件的一種主要類型,所以Java的GUI庫應該是標準化並被集成到JRE平台中的。然而不同的操作系統有不同的GUi風格和組件集。有一些組件在所以平台上有相似的觀感。這些共有組件如按鈕,標籤,文本域,單選框等被稱為標準組件。不同的GUI工具集提供了不同的組件集。GUI工具集總是遵循不同的原則來選擇組件類型和特徵以實現。考察一個工具集,有兩個不同的要素:組件類型和組件特徵。
Terms
首先讓我圖解兩個數學概念:最大公約數和最小公倍數。三個集合代表不同的操作系統。相交的部分是最大公約數,合併的部分是最小公倍數。
現在讓我們來考察Java GUI工具集AWT,SWT和Swing的區別
AWT
AWT 組件集遵循最大公約數原則,即AWT只擁有所有平台上都存在的組件的公有集合。所以你在AWT中無法獲取如表或樹等高級組件,因為它們在某些平台上不支持。AWT的組件特徵同樣遵循這一原則。它只提高平台上公有的特徵。例如AWT按鈕不能附著圖片,因為在Motif平台上,按鈕是不支持圖片的。
由於它低劣的組件集和特徵,AWT無法吸引開發者。它是Sun不推薦使用的,只是為了確保向下兼容和支持Swing。
SWT
SWT 最初的目標之一是為了提供比AWT更為豐富的組件集。它遵循最小公倍數原則以提供一個各個平台上包含的組件的並集。思路是如果一個組件在某個平台上包含,那麼SWT就會包裝它並用java代碼和JNI來調用它。如果一個組件在某一平台上不存在,它就會用繼承並繪製Composite的方式來模擬組件。一個SWT Composite類似於AWT的Canvas。以這種方式,SWT提供了較AWT更為豐富的組件集。值得指出的是SWT的JNI封裝不同於AWT,它的模擬也不同於Swing。
在組件特徵方面,SWT類似於AWT。它遵循最小公倍數原則。在早期的SWT版本中,SWT按鈕因為和AWT同樣的原因不支持附著圖片。在之後的版本中,許多缺失的特徵採用模擬的方式補全。但仍有許多特徵無法採用純粹的模擬實現。SWT將組件的控制交給本地操作系統。它難以擴展。只有例如圖形裝飾等特徵可以藉助模擬繪製來自定義實現。所以嚴格意義上將,SWT組件的組件集和特徵因其難於擴展而不如Swing來得豐富。
Swing
Swing 是三者中最強大和靈活的。在組件類型上,它遵循最大公約數原則。由於Swing可以控制自身GUI系統的全部並有很好的可擴展和靈活性,它幾乎可以創建所有你想像得到的組件。唯一的限制是它的AWT容器。在Swing中你還不能跨平台地實現真正的透明化和不規則矩形窗口,因為Swing依賴於AWT頂層容器例如Applet, Window, Frame and Dialog等。除此之外,Swing幾乎實現了所有平台上的標準組件。
在組件特徵上,Swing遵循最小公倍數原則。它擁有所有平台上可提供的組件特徵。不僅如此,你還可以繼承已有的Swing組件並添加新的特性。
上面比較主要是在API級別上的。讓我們將比較的焦點轉移到實現細節上。AWT,SWT和Swing的區別是Swing是純Java實現,而SWT和AWT 是Java和JNI的混合。當然,它們的目標都是相同的,提供一個跨平台的APIs。然而為了達到這一點,SWT和AWT不得不犧牲一些組件和特性以提供一個通用的APIs。
AWT
一個AWT組件通常是一個包含了對等體接口類型引用的組件類。這個引用指向本地對等體實現。舉java.awt.Label為例,它的對等體接口是LabelPeer。LabelPeer是平台無關的。在不同平台上,AWT提供不同的對等體類來實現LabelPeer。在Windows上,對等體類是WlabelPeer,它調用JNI來實現label的功能。這些JNI方法用C或C++編寫。它們關聯一個本地的label,真正的行為都在這裡發生。作為整體,AWT組件由AWT組件類和AWT對等體提供了一個全局公用的API給應用程序使用。一個組件類和它的對等體接口是平台無關的。底層的對等體類和JNI代碼是平台相關的。

SWT
SWT也使用JNI的方法論來實現。但細節不同於AWT。SWT的擁護者聽到人們拿SWT和AWT相提並論可是會很生氣的,Steve Northover,SWT之父,就曾為此抱怨過。
沒錯,它們是不同的。讓我們深究SWT的代碼。在SWT中,各個平台上唯一相同的部分是組件的接口,是類和方法的定義簽名。所有的底層代碼都是平台差異的。SWT為每個平台提供了OS類。這個類用JNI封裝了許多本地APIs。SWT組件類通過把這些JNI方法黏合在一起提供一個有意義的功能。
例如,在Windows上,文本域的選擇是由一個系統調用處理的。這個系統調用在Windows的OS類中作為一個本地方法實現。所以在Windows平台的Text的setSelection方法中只用到了一個JNI調用。
然而,在motif上,文本域的選擇包含兩個本地調用。SWT就在motif的OS類中實現了兩個調用。所以在motif上組件類需要作兩次調用來實現文本的選擇。
現在你應該能看出SWT和AWT的最大不同了,它們使用了不同的對等體編程方式來消除平台差異。SWT用java代碼或有JNI實現的java對等體來黏合系統調用。而AWT把代碼包含在對等體中,使情況復雜化了,我個人覺得SWT的方法更加明智。
SWING
到了Swing這裡,一切就變得清晰和直接了。除了頂層容器,Swing的實現不依賴於具體平台。它掌管了所有的控制和資源。Swing所需要的是事件輸入來驅動系統,以及承接自頂層AWT容器的圖形處理,字體和顏色。普通的Swing組件可以看作是AWT容器的一塊邏輯區域。它們並沒有註冊對等體。所有添加到同一頂層容器的Swing組件共享它的AWT對等體以獲取系統資源,如字體,圖形處理等。Swing將組件自己的數據結構存儲在JVM的空間中。它完全由自己管理畫圖處理,事件分發和組件佈局。

由於AWT和SWT都持有對本地組件的引用,它們必須以正確的方式釋放這些引用以避免內存洩露和JVM崩潰。AWT將絕大多數資源管理任務交給系統,將開發者從單調乏味的資源管理中解救出來。然而這使得AWT的實現複雜化了。一旦它實現了,開發者很少有機會犯錯誤並使他們的程序崩潰。
SWT用的是另一種方法。大體上,SWT讓開發者自己來管理資源。它的一條著名的規則是:誰創建,誰釋放。因此開發者必須謹慎地顯式調用dispose方法釋放每一個由他創建的組件和資源。這簡化了SWT的實現模型,但把開發者擺在了因錯誤編碼而易於造成程序崩潰這一風險之上。
模擬方式的區別
SWT和Swing在它們的實現上都使用了模擬。SWT只模擬平台上缺失的組件。區別是SWT的模擬更像是AWT的Canvas實現的模擬。SWT的Composite類有它自己在操作系統中相應的對等體。它從自己的對等體中獲得所有它所需要的資源如圖形處理的對象,字體和顏色等。它直接從操作系統獲取所有的事件並進行處理。然而,Swing組件在操作系統中沒有相應的對等體。它只是一塊頂層容器中的邏輯區域,實際上它從頂層容器的對等體中藉用資源。Swing的事件並不是底層系統產生的事件。它們實際是由頂層容器處理AWT事件所產生的偽事件。我們會在稍後的事件部分中詳細介紹它。
圖形層結構
另一個不同之處是Swing組件的z-order系統是來自於AWT組件的。如上所述,Swing組件與頂層AWT容器共享一個對等體。因此,Swing組件也和頂層容器有相同的z-order。SWT和AWT組件都有​​不同於頂層容器的z-order,通常是高於頂層容器。故而如果AWT組件和Swing組件混合在一起的話,Swing組件將可能被AWT組件遮住。當操作系統開始更新UI的時候,頂層容器和Swing組件總是先於AWT組件繪製。當它們完成繪製,AWT組件會覆蓋Swing可能繪製過的地方。因此不提倡Swing和AWT組件的混用。如果有一個浮動的Swing組件如菜單,AWT組件很可能遮蓋菜單。以上是AWT,SWT和Swing的區別的介紹

2012年4月9日 星期一

[JSP]透過Java語法來取URL的方式

網址如下
http://localhost:8080/lams/tool/lanb11/authoring.do?toolContentID=25713&contentFolderID=402881002b1818e5012b1841830e0005 

透過Java語法來取URL的方式:

request.getRequestURL().toString():

http://localhost:8080/lams/tool/lanb11/authoring.do

request.getQueryString():

  toolContentID=25713&contentFolderID=402881002b1818e5012b1841830e0005 


所以要透過Java語法來取URL整串語法為:

request.getRequestURL().toString()+"?"+request.getQueryString

2012年1月10日 星期二

數字與字串混合運算的程式

1 + "2" = 12
"1" + 2 = 12
1 + 2 + "3" = 33
1 + 2 + "3" + 4 + 5 = 3345
5 - "3" = 2
"5" - 3 = 2
5 * "3" = 15
"5" * 3 = 15
5 - 2 + "3" = 33
"5" -2 + 3 = 6
 
參考至: http://tr.ilvs.ilc.edu.tw/~bbfish/learn/javascript/jvar-ex-1.htm

2012年1月8日 星期日

彈出網頁視窗全攻略

如何利用網頁彈出各種形式的視窗,我想大家大多都是知道些的,但那種多種多樣的彈出式視窗是怎麼搞出來的,我們今天就來教學一下:
1.彈啟一個全螢幕視窗

  1. <html>
  2. <body onload="window.open('http://www.pconline.com.cn','example01','fullscreen');">;
  3. <b>www.e3i5.com</b>
  4. </body>
  5. </html>

2.彈啟一個被F11化後的視窗

  1. <html>
  2. <body onload="window.open(''http://www.pconline.com.cn','example02','channelmode');">;
  3. <b>www.e3i5.com</b>
  4. </body>
  5. </html>

3.彈啟一個帶有收藏連接工作列的視窗

  1. <html>
  2. <body onload="window.open('http://www.pconline.com.cn','example03','width=400,height=300,directories');">
  3. <b>www.e3i5.com</b>
  4. </body>
  5. </html>

4.網頁對話視窗

<html>
<SCRIPT LANGUAGE="javascript">
<!--
showModalDialog('http://www.pconline.com.cn','example04','dialogWidth:400px;dialogHeight:300px;
dialogLeft:200px;dialogTop:150px;center:yes;help:yes;resizable:yes;status:yes')
//-->
</SCRIPT>
<b>www.e3i5.com</b>
</body>
</html>

<html>
<SCRIPT LANGUAGE="javascript">
<!--
showModelessDialog('http://www.pconline.com.cn','example05','dialogWidth:400px;dialogHeight:300px;
dialogLeft:200px;dialogTop:150px;center:yes;help:yes;resizable:yes;status:yes')
//-->
</SCRIPT>
<b>http://www.pconline.com.cn</b>
</body>
</html>

showModalDialog()或是showModelessDialog() 來使用網頁對話視窗,至於showModalDialog()與showModelessDialog()的區別,在於 showModalDialog()開啟的視窗(簡稱模式視窗),置在父視窗上,必須關閉才能訪問父視窗(建議盡量少用,以免招人反 感);showModelessDialog()(簡稱無模式視窗),開啟後不必關閉也可訪問父視窗開啟的視窗。

dialogHeight: iHeight 設定對話視窗視窗的高度。
dialogWidth: iWidth 設定對話視窗視窗的寬度。   
dialogLeft: iXPos 設定對話視窗視窗相對於桌面左上角的left位置。
dialogTop: iYPos 設定對話視窗視窗相對於桌面左上角的top位置。
center: {yes | no | 1 | 0 } 指定是否將對話視窗在桌面上居中,預設值是「yes」。
help: {yes | no | 1 | 0 } 指定對話視窗視窗中是否顯示上下文敏感的說明 圖示。預設值是「yes」。   
resizable: {yes | no | 1 | 0 } 指定是否對話視窗視窗大小可變。預設值是「no」。
status: {yes | no | 1 | 0 } 指定對話視窗視窗是否顯示狀態列。對於非模式對話視窗視窗,預設值是「yes」;對於模式對話視窗視窗,預設值是 「no」。

5.HTA視窗

HTA的全名為HTML Application,翻譯過來就是HTML應用程式,你只要簡單的用.hta為副檔名儲存HTML頁面就算新增了一個HTA文件,下面我們就用HTA來編個視窗,將以下這段程式碼儲存為.hta文件,然後再用瀏覽器開啟。

<HTML>
<HEAD>
<TITLE>www.e3i5.com</TITLE>
<HTA:APPLICATION ID="oHTA"
APPLICATIONNAME="myApp"
BORDER="thin"
BORDERSTYLE="normal"
CAPTION="yes"
ICON="filename.ico"
MAXIMIZEBUTTON="yes"
MINIMIZEBUTTON="yes"
SHOWINTASKBAR="no"
INGLEINSTANCE="no"
SYSMENU="yes"
VERSION="1.0"
WINDOWSTATE="normal" />
</HEAD>
<BODY>
<b>http://www.pconline.com.cn</b>
</BODY>
</HTML>

有人會發現上面這些程式碼與平時的html有點不同,多了HTA:APPLICATION標籤,這就是關鍵之處,hta通過它來提供一系列面向應用程式的功能,接下來再講一講它的內容(我的頭又在發脹)
APPLICATIONNAME內容(applicationName)
此內容為設定HTA的名稱。
BORDER內容(border)
此內容為設定為HTA的視窗邊框檔案類型,預設值為 thick。
它可以設為 thick 指定視窗為粗邊框
dialog window 指定視窗為對話視窗
none 指定視窗無邊框
thin 指定視窗為窄邊框
BORDERSTYLE內容(borderStyle)
此內容為設定HTA視窗的邊框格式,預設值為 normal。
它可以設為
normal 普通邊框格式
complex 凹凸格式組合邊框
raised 凸出的3D邊框
static 3D邊框格式
sunken 凹進的3D邊框
CAPTION內容(caption)
此內容為設定HTA視窗是否顯示標題欄或標題,預設值為 yes。
ICON內容(icon)
此內容為設定應用程式的圖示。
MAXIMIZEBUTTON內容(maximizeButton)
此內容為設定是否在HTA視窗中顯示最大化按鈕,預設值為 yes。
MINIMIZEBUTTON內容(minimizeButton)
此內容為設定是否在HTA視窗中顯示最小化按鈕,預設值為 yes。
SHOWINTASKBAR內容(showInTaskBar)
此內容為設定是否在工具列中顯示此應用程式,預設值為 yes。
SINGLEINSTANCE內容(singleInstance)
此內容為設定是否此應用程式同時只能執行一次。次內容以APPLICATIONNAME內容作為標幟,預設值為 no。
SYSMENU內容(sysMenu)
此內容為設定是否在HTA視窗中顯示系統表單,預設值為 yes。
VERSION內容(version)
此內容為設定應用程式的版本,預設值為空。
WINDOWSTATE內容(windowState)
此內容為設定HTA視窗的初始大小,預設值為 normal。
它可以設為 normal 預設值大小
minmize 最小化
maximize 最大化
以上括號中的是在指令碼引用的內容。在指令碼中以上內容皆為唯讀內容。此外,在指令碼中還可以使用commandLine內容來檢索應用程式啟動時的參數。
在HTA中還可以繼續使用html中的絕大多數標籤、指令碼等。

此文參考於: http://forum.slime.com.tw/thread180920.html

2012年1月3日 星期二

相對路徑(Relative Path)和絕對路徑(Absolute Path)

http://www.jack-ck.com/thread-71250-1-1.html

相對路徑(Relative Path)和絕對路徑(Absolute Path)

相對路徑(Relative Path)和絕對路徑(Absolute Path)
出處:網頁教學網 作者:

HTML初學者會經常遇到這樣一個問題,如何正確引用一個文件。比如,怎樣在一個HTML網頁中引用另外一個HTML網頁作為超鏈接(hyperlink)?怎樣在一個網頁中插入一張圖片?......
如果你在引用文件時(如加入超鏈接,或者插入圖片等),使用了錯誤的文件路徑,就會導致引用失效(無法瀏覽鏈接文件,或無法顯示插入的圖片等)。
為了避免這些錯誤,正確地引用文件,我們需要學習一下HTML路徑。
HTML有2種路徑的寫法:相對路徑和絕對路徑。
HTML相對路徑(Relative Path)
同一個目錄的文件引用
如果源文件和引用文件在同一個目錄裡,直接寫引用文件名即可。
我們現在建一個源文件info.html,在info.html裡要引用index.html文件作為超鏈接。
html路徑是:c:\Inetpub\wwwroot\sites\.
假設info.html路徑是:c:\Inetpub\wwwroot\sites\webjx\info.html
假設index.html路徑是:c:\Inetpub\wwwroot\sites\webjx\index.html
在info.html加入index.html超鏈接的代碼應該這樣寫:
<a href = "index.html">index.html</a>
如何表示上級目錄
HTML初學者會經常遇到這樣一個問題,
../表示源文件所在目錄的上一級目錄,../../表示源文件所在目錄的上上級目錄,以此類推。
假設info.html路徑是:c:\Inetpub\wwwroot\sites\webjx\info.html
假設index.html路徑是:c:\Inetpub\wwwroot\sites\index.html
html路徑是:c:\Inetpub\wwwroot.
在info.html加入index.html超鏈接的代碼應該這樣寫:
<a href = "../index.html">index.html</a>
假設info.html路徑是:c:\Inetpub\wwwroot\sites\webjx\info.html
假設index.html路徑是:c:\Inetpub\wwwroot\index.html
在info.html加入index.html超鏈接的代碼應該這樣寫:
<a href = "../../index.html">index.html</a>
假設info.html路徑是:c:\Inetpub\wwwroot\sites\webjx\info.html
假設index.html路徑是:c:\Inetpub\wwwroot\sites\wowstory\index.html
在info.html加入index.html超鏈接的代碼應該這樣寫:
<a href = "../wowstory/index.html">index.html</a>
如何表示下級目錄
//www.webjx.com/tutorials.
引用下級目錄的文件,直接寫下級目錄文件的路徑即可。
假設info.html路徑是:c:\Inetpub\wwwroot\sites\webjx\info.html
假設index.html路徑是:c:\Inetpub\wwwroot\sites\webjx\html\index.html
在info.html加入index.html超鏈接的代碼應該這樣寫:
<a href = "html/index.html">index.html</a>
假設info.html路徑是:c:\Inetpub\wwwroot\sites\webjx\info.html
假設index.html路徑是:c:\Inetpub\wwwroot\sites\webjx\html\tutorials\index.html
在info.html加入index.html超鏈接的代碼應該這樣寫:
<a href = "html/tutorials/index.html">index.html</a>
HTML絕對路徑(Absolute Path)
HTML絕對路徑(absolute path)指帶域名的文件的完整路徑。
假設你注冊了域名www.jack-ck.com,並申請了虛擬主機,你的虛擬主機提供商會給你一個目錄,比如www,這個www就是你網站的根目錄。
假設你在www根目錄下放了一個文件index.html,這個文件的絕對路徑就是:http://www.jack-ck.com/index.html。
假設你在www根目錄下建了一個目錄叫tutorials,然後在該目錄下放了一個文件index.html,這個文件的絕對路徑就是www.jack-ck.com/bbs/index.php