2011年2月12日 星期六

iPhone 利用 string 存取 member data

在 class 內有 member datas 以數字結尾,
eq.
      UIImageView* imageView1;
      UIImageView* imageView2;
      UIImageView* imageView3;

想利用 @"imageView%d" 之類的方始來存取?
參考了  Key-Value Coding Programming Guide  (看不是很了解@@)


不過可以這樣用:
for(int i=1;i<=3;i++){
    [self valueForKey:@"imageView%d"];
    ...
}

2011年2月11日 星期五

Split String in iPhone

我有個 JPEG 圖檔 Yo Yo.jpg,希望能夠取出 Yo Yo 的部分。
Java 有 split member function 可用。
查了一下 iPhone SDK 文件 "String Programming Guide"
拚出了下列的 code


  1. NSCharacterSet* doSet = [NSCharacterSet characterSetWithCharactersInString:@"."];
  2. NSScanner* theScanner = [NSScanner scannerWithString:@"Yo Yo.jpg"];
  3. NSString* imageName;
  4. [theScanner scanUpToCharactersFromSet:doSet intoString:&imageName];
  5. NSLog(@"imageName = %@",imageName);

Hierarchy NavigationBar 問題

假設我有需要 navigate 三層 View
現在遇到的問題是當在第一層按下按鈕時
需要 push ViewController
而我的 navigation controller 卻是在 AppDelegate

目前的想法是每一層 ViewController 都要有 navagation controller 的 data member
在 create ViewController 時傳過去

不知道有沒有比較好的解法

2011年2月10日 星期四

Test

===============================================================================================================================================================================================.comment-body-author {
margin:0;
padding:0 0 0 20px;
background-color:#C0C0C0;<>
}


SELECT *  FROM users
WHERE user_id = 1212;

Console 顏色設定

想要將查詢過的單字,利用顏色來區分,例如查詢過一兩次的單字用橘色、查詢過很多次的就用紅色來提醒自己。

由於我在 windows 平台開發,因次要用到 win32 的 api 來處理顏色,這很惱人~
之前寫的 PTT 截圖程式,就是用 win32 api,主要是用 SetConsoleTextAttribute 這個 api 來設定顏色。程式碼如下:

Console::ColorType Console::set_color(ColorType color) throw(std::logic_error)
{
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    WORD oldColor;

    if (GetConsoleScreenBufferInfo(out_, &csbi))
        oldColor = csbi.wAttributes;
    else
        throw std::logic_error("Can't Get Console Screen Buffer Info");

    if (color==0x00) color = FOREGROUND_RED | FOREGROUND_GREEN |
        FOREGROUND_BLUE | FOREGROUND_INTENSITY;

    /* set text and background color */
    SetConsoleTextAttribute(out_, color);
    /*
    FOREGROUND_BLUE(0x01), FOREGROUND_GREEN(0x02), FOREGROUND_RED(0x04), FOREGROUND_INTENSITY(0x08),
    BACKGROUND_BLUE(0x10), BACKGROUND_GREEN(0x20), BACKGROUND_RED(0x40), BACKGROUND_INTENSITY(0x80)
    ex: FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE
    */
    return oldColor;
}

在 codeproject 找到了一篇文章,利用 IO manipulator 來包裝使得改變顏色變得很輕鬆。

Add Color to Console Projects
注意此文章的 Points of Interest 有說明 IO Manipulator 的運作原理。


程式碼如下:
//------------------------------------------------------------------------------
// Console.h: interface for the Console manipulators.
//------------------------------------------------------------------------------

#if !defined( CONSOLE_MANIP_H__INCLUDED )
#define CONSOLE_MANIP_H__INCLUDED

//------------------------------------------------------------------------------

//------------------------------------------------------------------"includes"--
#include <iostream>
#include <iomanip>
#include <windows.h>

namespace JadedHoboConsole
{
static const WORD bgMask( BACKGROUND_BLUE |
BACKGROUND_GREEN |
BACKGROUND_RED |
BACKGROUND_INTENSITY );
static const WORD fgMask( FOREGROUND_BLUE |
FOREGROUND_GREEN |
FOREGROUND_RED |
FOREGROUND_INTENSITY );

static const WORD fgBlack ( 0 );
static const WORD fgLoRed ( FOREGROUND_RED );
static const WORD fgLoGreen ( FOREGROUND_GREEN );
static const WORD fgLoBlue ( FOREGROUND_BLUE );
static const WORD fgLoCyan ( fgLoGreen | fgLoBlue );
static const WORD fgLoMagenta( fgLoRed | fgLoBlue );
static const WORD fgLoYellow ( fgLoRed | fgLoGreen );
static const WORD fgLoWhite ( fgLoRed | fgLoGreen | fgLoBlue );
static const WORD fgGray ( fgBlack | FOREGROUND_INTENSITY );
static const WORD fgHiWhite ( fgLoWhite | FOREGROUND_INTENSITY );
static const WORD fgHiBlue ( fgLoBlue | FOREGROUND_INTENSITY );
static const WORD fgHiGreen ( fgLoGreen | FOREGROUND_INTENSITY );
static const WORD fgHiRed ( fgLoRed | FOREGROUND_INTENSITY );
static const WORD fgHiCyan ( fgLoCyan | FOREGROUND_INTENSITY );
static const WORD fgHiMagenta( fgLoMagenta | FOREGROUND_INTENSITY );
static const WORD fgHiYellow ( fgLoYellow | FOREGROUND_INTENSITY );
static const WORD bgBlack ( 0 );
static const WORD bgLoRed ( BACKGROUND_RED );
static const WORD bgLoGreen ( BACKGROUND_GREEN );
static const WORD bgLoBlue ( BACKGROUND_BLUE );
static const WORD bgLoCyan ( bgLoGreen | bgLoBlue );
static const WORD bgLoMagenta( bgLoRed | bgLoBlue );
static const WORD bgLoYellow ( bgLoRed | bgLoGreen );
static const WORD bgLoWhite ( bgLoRed | bgLoGreen | bgLoBlue );
static const WORD bgGray ( bgBlack | BACKGROUND_INTENSITY );
static const WORD bgHiWhite ( bgLoWhite | BACKGROUND_INTENSITY );
static const WORD bgHiBlue ( bgLoBlue | BACKGROUND_INTENSITY );
static const WORD bgHiGreen ( bgLoGreen | BACKGROUND_INTENSITY );
static const WORD bgHiRed ( bgLoRed | BACKGROUND_INTENSITY );
static const WORD bgHiCyan ( bgLoCyan | BACKGROUND_INTENSITY );
static const WORD bgHiMagenta( bgLoMagenta | BACKGROUND_INTENSITY );
static const WORD bgHiYellow ( bgLoYellow | BACKGROUND_INTENSITY );

static class con_dev
{
        private:
HANDLE hCon;
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;

        public:
con_dev()
{
hCon = GetStdHandle( STD_OUTPUT_HANDLE );
}
        private:
void GetInfo()
{
GetConsoleScreenBufferInfo( hCon, &csbi );
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
}
        public:
void Clear()
{
COORD coordScreen = { 0, 0 };

GetInfo();
FillConsoleOutputCharacter( hCon, TEXT(' '),
dwConSize,
coordScreen,
&cCharsWritten );
GetInfo();
FillConsoleOutputAttribute( hCon,
csbi.wAttributes,
dwConSize,
coordScreen,
&cCharsWritten );
SetConsoleCursorPosition( hCon, coordScreen );
}
void SetColor( WORD wRGBI, WORD Mask )
{
GetInfo();
csbi.wAttributes &= Mask;
csbi.wAttributes |= wRGBI;
SetConsoleTextAttribute( hCon, csbi.wAttributes );
}
} console;

inline std::ostream& clr( std::ostream& os )
{
os.flush();
console.Clear();
return os;
};

inline std::ostream& fg_red( std::ostream& os )
{
os.flush();
console.SetColor( fgHiRed, bgMask );

return os;
}

inline std::ostream& fg_green( std::ostream& os )
{
os.flush();
console.SetColor( fgHiGreen, bgMask );

return os;
}

inline std::ostream& fg_blue( std::ostream& os )
{
os.flush();
console.SetColor( fgHiBlue, bgMask );

return os;
}

inline std::ostream& fg_white( std::ostream& os )
{
os.flush();
console.SetColor( fgHiWhite, bgMask );

return os;
}

inline std::ostream& fg_cyan( std::ostream& os )
{
os.flush();
console.SetColor( fgHiCyan, bgMask );

return os;
}

inline std::ostream& fg_magenta( std::ostream& os )
{
os.flush();
console.SetColor( fgHiMagenta, bgMask );

return os;
}

inline std::ostream& fg_yellow( std::ostream& os )
{
os.flush();
console.SetColor( fgHiYellow, bgMask );

return os;
}

inline std::ostream& fg_black( std::ostream& os )
{
os.flush();
console.SetColor( fgBlack, bgMask );

return os;
}

inline std::ostream& fg_gray( std::ostream& os )
{
os.flush();
console.SetColor( fgGray, bgMask );

return os;
}

inline std::ostream& bg_red( std::ostream& os )
{
os.flush();
console.SetColor( bgHiRed, fgMask );

return os;
}

inline std::ostream& bg_green( std::ostream& os )
{
os.flush();
console.SetColor( bgHiGreen, fgMask );

return os;
}

inline std::ostream& bg_blue( std::ostream& os )
{
os.flush();
console.SetColor( bgHiBlue, fgMask );

return os;
}

inline std::ostream& bg_white( std::ostream& os )
{
os.flush();
console.SetColor( bgHiWhite, fgMask );

return os;
}

inline std::ostream& bg_cyan( std::ostream& os )
{
os.flush();
console.SetColor( bgHiCyan, fgMask );

return os;
}

inline std::ostream& bg_magenta( std::ostream& os )
{
os.flush();
console.SetColor( bgHiMagenta, fgMask );

return os;
}

inline std::ostream& bg_yellow( std::ostream& os )
{
os.flush();
console.SetColor( bgHiYellow, fgMask );

return os;
}

inline std::ostream& bg_black( std::ostream& os )
{
os.flush();
console.SetColor( bgBlack, fgMask );

return os;
}

inline std::ostream& bg_gray( std::ostream& os )
{
os.flush();
console.SetColor( bgGray, fgMask );

return os;
}
}

//------------------------------------------------------------------------------
#endif //!defined ( CONSOLE_MANIP_H__INCLUDED )


於是設定顏色就和使用 std::setw(10) 的方式一樣:

#include "Console.h"


namespace con = JadedHoboConsole;

int main()
{
using std::cout;
using std::endl;

cout << "I like " << con::fg_green << "green" << con::fg_white << " eggs and ham." 
<< endl;
}

舒服!!

Context-Based Dictionary 開發

不知從何時開始,背的單字都會忘掉,甚至有時候手機號碼我沒有辦法聽一遍就記住。我自己常用的字典是奇摩字典、Google 字典。Google 字典查詢簡單快速,而奇摩字典有比較完整的範例還有發音,但這些都不符合我的需。於是有了 開發自己專用字典的想法。下列是我想要的功能,當我遇到一個單字時,將單字輸入到我的查詢系統,會列出一個例句,而這例句是我以前查詢過的,如此一來,我就可以了解我之前是在那裡查詢這個單字,也就能幫助理解。

一開始打算用 C++ 開發,console 介面,接下來是圖形介面,手機版本。

Let's start!!