雙螢幕下,第二個Form的開啟位置與Form上Panel元件位置問題 |
答題得分者是:slowbird
|
vega_chun
一般會員 ![]() ![]() 發表:5 回覆:7 積分:2 註冊:2006-12-20 發送簡訊給我 |
各位大大你們好:
小弟目前遇到兩個問題 目前同一台PC上街著兩個螢幕(解析度皆為1280*1024) 目前小弟的程式有兩個Form(主Form與副Form) 當程式開啟時,主Form與副Form是同時開啟的 而副Form上有一個Panel元件是用來顯示CCD所擷取的即時畫面 副Form的預設BorderStyle為bsSingle 目前的問題是: 第一: 我將副Form的Left與Top設為1281與1 理論上他一開啟應該出現在第二個螢幕的左上角 但是實際執行確是出現在第一個螢幕的左上角 請問該如何解決? 第二: 我在主Form上設定一個CheckBox 當CheckBox->Checkde = true時~副Form的BorderStyle為bsSingle 當CheckBox->Checkde = false時~副Form的BorderStyle為bsNone 且也特地將副Form的Left與Top設為1281與1(Panel也是如此設定) 但是,程式執行結果卻是 當我改變CheckBox的Check屬性時 只有副Form的位置是在(1281,1) 顯示影像的Panel元件的位置卻始終在(1,1) 這樣奇怪的結果~請問有人可以幫忙解惑嗎? 謝謝 |
slowbird
一般會員 ![]() ![]() 發表:4 回覆:6 積分:12 註冊:2008-03-06 發送簡訊給我 |
關於雙螢幕呢 我之前的作法是 把兩個當作一個來用
所以 就用 Screen 的 Width 來放兩個 Form LeftForm->Left = 0; LeftForm->Top = 0; LeftForm->Width = Screen->Width/2; LeftForm->Height = Screen->Height; LeftForm->Show(); RightForm->Left = Screen->Width/2; RightForm->Top = 0; RightForm->Width = Screen->Width/2; RightForm->Height = Screen->Height; RightForm->Show(); 然後一切就如單螢幕的操作一樣 ===================引 用 vega_chun 文 章=================== 各位大大你們好: 小弟目前遇到兩個問題 目前同一台PC上街著兩個螢幕(解析度皆為1280*1024) 目前小弟的程式有兩個Form(主Form與副Form) 當程式開啟時,主Form與副Form是同時開啟的 而副Form上有一個Panel元件是用來顯示CCD所擷取的即時畫面 副Form的預設BorderStyle為bsSingle 目前的問題是: 第一: 我將副Form的Left與Top設為1281與1 理論上他一開啟應該出現在第二個螢幕的左上角 但是實際執行確是出現在第一個螢幕的左上角 請問該如何解決? 第二: 我在主Form上設定一個CheckBox 當CheckBox->Checkde = true時~副Form的BorderStyle為bsSingle 當CheckBox->Checkde = false時~副Form的BorderStyle為bsNone 且也特地將副Form的Left與Top設為1281與1(Panel也是如此設定) 但是,程式執行結果卻是 當我改變CheckBox的Check屬性時 只有副Form的位置是在(1281,1) 顯示影像的Panel元件的位置卻始終在(1,1) 這樣奇怪的結果~請問有人可以幫忙解惑嗎? 謝謝 |
JustinShen
中階會員 ![]() ![]() ![]() 發表:22 回覆:104 積分:80 註冊:2003-09-20 發送簡訊給我 |
|
vega_chun
一般會員 ![]() ![]() 發表:5 回覆:7 積分:2 註冊:2006-12-20 發送簡訊給我 |
你好:
我試過你說的方法 RightForm->Left = Screen->Width/2; RightForm->Top = 0; RightForm->Width = Screen->Width/2; RightForm->Height = Screen->Height; 執行結果是 副Form的左上方位置在第一個螢幕的中間正上方(所以Screen->Width/2的值應為640) 而副Form上的Panel元件依然出現在第一個螢幕的左上方 ===================引 用 slowbird 文 章=================== 關於雙螢幕呢 我之前的作法是 把兩個當作一個來用 所以 就用 Screen 的 Width 來放兩個 Form LeftForm->Left = 0; LeftForm->Top = 0; LeftForm->Width = Screen->Width/2; LeftForm->Height = Screen->Height; LeftForm->Show(); RightForm->Left = Screen->Width/2; RightForm->Top = 0; RightForm->Width = Screen->Width/2; RightForm->Height = Screen->Height; RightForm->Show(); 然後一切就如單螢幕的操作一樣
編輯記錄
vega_chun 重新編輯於 2008-04-23 10:41:41, 註解 無‧
|
daldal
高階會員 ![]() ![]() ![]() ![]() 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
[code cpp] if(Screen->MonitorCount==1) //若單螢幕 { Form1->Screen->Monitors[0]->Top; //Form1取得第一個螢幕的Top位置 Form1->Screen->Monitors[0]->Left; //Form1取得第一個螢幕的Left位置 Form1->Screen->Monitors[0]->Width; //Form1取得第一個螢幕的Width Form1->Screen->Monitors[0]->Height; //Form1取得第一個螢幕的Height //do anything you want } else if(Screen->MonitorCount==2) //若雙螢幕 { Form1->Screen->Monitors[0]->Top; //Form1取得第一個螢幕的Top位置 Form1->Screen->Monitors[0]->Left; //Form1取得第一個螢幕的Left位置 Form1->Screen->Monitors[0]->Width; //Form1取得第一個螢幕的Width Form1->Screen->Monitors[0]->Height; //Form1取得第一個螢幕的Height Form2->Screen->Monitors[1]->Top; //Form2取得第二個螢幕的Top位置 Form2->Screen->Monitors[1]->Left; //Form2取得第二個螢幕的Left位置 Form2->Screen->Monitors[1]->Width; //Form2取得第二個螢幕的Width Form2->Screen->Monitors[1]->Height; //Form2取得第二個螢幕的Height //do anything you want } [/code] 若是三個螢幕,四個螢幕以此類推 |
vega_chun
一般會員 ![]() ![]() 發表:5 回覆:7 積分:2 註冊:2006-12-20 發送簡訊給我 |
你可以這樣做?
Form1->Screen 因為我這樣用,發現Screen並不是TForm的成員 ===================引 用 daldal 文 章=================== [code cpp] if(Screen->MonitorCount==1) //若單螢幕 { Form1->Screen->Monitors[0]->Top; //Form1取得第一個螢幕的Top位置 Form1->Screen->Monitors[0]->Left; //Form1取得第一個螢幕的Left位置 Form1->Screen->Monitors[0]->Width; //Form1取得第一個螢幕的Width Form1->Screen->Monitors[0]->Height; //Form1取得第一個螢幕的Height //do anything you want } else if(Screen->MonitorCount==2) //若雙螢幕 { Form1->Screen->Monitors[0]->Top; //Form1取得第一個螢幕的Top位置 Form1->Screen->Monitors[0]->Left; //Form1取得第一個螢幕的Left位置 Form1->Screen->Monitors[0]->Width; //Form1取得第一個螢幕的Width Form1->Screen->Monitors[0]->Height; //Form1取得第一個螢幕的Height Form2->Screen->Monitors[1]->Top; //Form2取得第二個螢幕的Top位置 Form2->Screen->Monitors[1]->Left; //Form2取得第二個螢幕的Left位置 Form2->Screen->Monitors[1]->Width; //Form2取得第二個螢幕的Width Form2->Screen->Monitors[1]->Height; //Form2取得第二個螢幕的Height //do anything you want } [/code] 若是三個螢幕,四個螢幕以此類推 |
daldal
高階會員 ![]() ![]() ![]() ![]() 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
Screen是全域的成員,直接使用即可,
前面的程式碼是我手誤打錯的,原本是想打Form1->Top = Screen->Monitors[0]->Top...@@ [code cpp] if(Screen->MonitorCount==1) //若單螢幕 { Form1->Top = Screen->Monitors[0]->Top; //Form1取得第一個螢幕的Top位置 Form1->Left = Screen->Monitors[0]->Left; //Form1取得第一個螢幕的Left位置 Form1->Width = Screen->Monitors[0]->Width; //Form1取得第一個螢幕的Width Form1->Height = Screen->Monitors[0]->Height; //Form1取得第一個螢幕的Height //do anything you want } else if(Screen->MonitorCount==2) //若雙螢幕 { Form1->Top = Screen->Monitors[0]->Top; //Form1取得第一個螢幕的Top位置 Form1->Left = Screen->Monitors[0]->Left; //Form1取得第一個螢幕的Left位置 Form1->Width = Screen->Monitors[0]->Width; //Form1取得第一個螢幕的Width Form1->Height = Screen->Monitors[0]->Height; //Form1取得第一個螢幕的Height Form2->Top = Screen->Monitors[1]->Top; //Form2取得第二個螢幕的Top位置 Form2->Left = Screen->Monitors[1]->Left; //Form2取得第二個螢幕的Left位置 Form2->Width = Screen->Monitors[1]->Width; //Form2取得第二個螢幕的Width Form2->Height = Screen->Monitors[1]->Height; //Form2取得第二個螢幕的Height //do anything you want } [/code] |
slowbird
一般會員 ![]() ![]() 發表:4 回覆:6 積分:12 註冊:2008-03-06 發送簡訊給我 |
喔
我是利用 顯卡的驅動程式把螢幕設為 一個為主 另一個為延伸 這樣就可把兩個當成一個 兩個解析度必須要一樣 ===================引 用 vega_chun 文 章=================== 你好: 我試過你說的方法 RightForm->Left = Screen->Width/2; RightForm->Top = 0; RightForm->Width = Screen->Width/2; RightForm->Height = Screen->Height; 執行結果是 副Form的左上方位置在第一個螢幕的中間正上方(所以Screen->Width/2的值應為640) 而副Form上的Panel元件依然出現在第一個螢幕的左上方 ===================引 用 slowbird 文 章=================== 關於雙螢幕呢 我之前的作法是 把兩個當作一個來用 所以 就用 Screen 的 Width 來放兩個 Form LeftForm->Left = 0; LeftForm->Top = 0; LeftForm->Width = Screen->Width/2; LeftForm->Height = Screen->Height; LeftForm->Show(); RightForm->Left = Screen->Width/2; RightForm->Top = 0; RightForm->Width = Screen->Width/2; RightForm->Height = Screen->Height; RightForm->Show(); 然後一切就如單螢幕的操作一樣 |
vega_chun
一般會員 ![]() ![]() 發表:5 回覆:7 積分:2 註冊:2006-12-20 發送簡訊給我 |
不好意思~這幾天都在忙其他案子~ 所以沒時間回應 可能我一開始的問題沒說的很清楚 目前我也是利用顯卡將第二個螢幕當成第一個螢幕的延伸 也利用了各位提供如下的建議
上圖是一開始執行時的畫面, 右方是副Form,上頭的Panel元件負責顯示CCD畫面 然後我按個按鈕,將副Form的BoderStyle改變成bsNone時 就變成下圖的樣子,副Form的位置變成我想要的 但是副Form上的Panel元件的位置則變成主螢幕的左上角去了 而不在副Form上面,理論上Form上的任意元件應該都是跟著Form跑才對吧 怎會變成這樣???真的搞不懂 |
vega_chun
一般會員 ![]() ![]() 發表:5 回覆:7 積分:2 註冊:2006-12-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |