我寫在拉撒路2-3樹申請我校的項目。滾動的TImage水平或垂直
一切都做了,現在用GUI打(我得到的分數相同的良好界面,因爲我做了好等插入功能,這是很奇怪,但NVM)。
當我有一個像樹10+節點,我的300 * 200的圖像尺寸是不夠大。
我想有這將是像300在TForm的* 200的TImage組件,但它會像10000 * 10000真的,你可以在它滾動。
這有可能嗎?
由於
EDIT使問題更清楚
2-3樹是一個數據結構。當在一張紙上繪製它看它是如何工作的,它看起來像這樣
作爲一個真正的拉奧努斯/ delphi中的noobie(必須在lazarus中做)使用這段代碼來繪製它(即使我懷疑你需要它來回答我的問題):
procedure TStrom.Paint(Image: TImage);
VAR C:的TCanvas;
過程Paint1(V:TNODE;寬度,X,Y:整數); 開始
if V.L <> nil then //left child begin C.MoveTo(X, Y); C.LineTo(X - Width div 3, Y + 50); Paint1(V.L, Width div 3, X - Width div 3, Y + 50); end; if V.S <> nil then //middle child begin C.MoveTo(X, Y); C.LineTo(X + Width div 3, Y + 50); Paint1(V.S, Width div 3, X + Width div 3, Y + 50); end; if V.P <> nil then //right child begin C.MoveTo(X, Y); C.LineTo(X + Width div 3 + Width div 3, Y + 50); Paint1(V.P, Width div 3, X + Width div 3 + Sirka div 3, Y + 50); end; if V.isLeaf then begin C.Ellipse(X - 15, Y - 15, X + 15, Y + 15); C.TextOut(X - 3, Y - 8, IntToStr(V.Info1)); end else begin C.Rectangle(X - 15, Y - 15, X + 15, Y + 15); C.TextOut(X - 7, Y - 8, IntToStr(V.Info1)); C.Rectangle(X + 15, Y - 15, X + 50, Y + 15); if V.Info2 <> 0 then C.TextOut(X + 27, Y - 8, IntToStr(V.Info2)); end;
抽獎功能運作良好,但在3+高度的節點的一些(大部分)被繪製在其他節點上,所以看起來不好。該節點坐在另一個節點上,並且不在其旁邊。
我以爲我會讓樹形圖畫真實的大,但它會在一個小的「面板」。像這樣:TImage真的是1000 * 1000,但在形式上你只能看到它的一小部分。在這部分會有水平和垂直的滾動條,所以你可以滾動瀏覽圖片,看看章節裏有什麼。 (就像當你通過網頁瀏覽器滾動查看頁面底部:))
我們不允許使用任何其他代碼,只是在lazarus組件內置。 (我們也不允許創建新的組件 - >不知道爲什麼)
雖然我仍然對如何完成這項工作感到好奇,但我的應用程序不再需要它(安裝第二臺顯示器以查看它是否'd的幫助,它不會,所以我想我會挖掘我的塗料方法有點:-))
什麼是「2-3樹應用程序」?樹和圖像如何相關? –
@Sertac,我想我們可以假設一個2-3樹的應用程序是一個能夠做2-3棵樹的應用程序。我想我們也可以假定正在使用圖像來顯示屏幕上的樹。然而,對於理解這個問題來說,這兩者都不是至關重要的,它只是簡單地詢問當圖像太大而不適合屏幕時如何引入滾動。圖像的性質是無關緊要的。 –
這意味着使用大約400 MB的位圖。你應該更好地畫一個例如顏料盒。你將能夠使用SetWorldTransform,總是用不同的裁剪畫相同的。 – bummi