Combobox中自绘制的怎么全是同样的图像? |
尚未結案
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
大大好: 小兄不明白,在Combobox的Ondrawitem中绘制的怎么全是同样的图像?
小兄的思路是这样的
1\从文件夹中加载位图,依次存入stringlist中
2\赋给combobox.items
3、在Ondrawitem中绘出位图
procedure TForm1.FormCreate(Sender: TObject); var i, lincnt: integer; LineStyleObj: CMapXStyle; pic: TBitmap; begin LineStyleObj := CoStyle.Create; Pic := TBitmap.Create; LineStyleList := TStringlist.Create; with LineStyleList do begin for i := 0 to lincnt - 1 do begin pic.LoadFromFile('.\Line' inttostr(i) '.bmp'); LineStyleList.AddObject(inttostr(i), pic); end; end; LineStyleComboBox.Items := LineStyleList; LineStyleComboBox.DropDownCount := 3; LineStyleComboBox.ItemIndex := 0; end; procedure TForm1.LineStyleComboBoxDrawItem(Control: TWinControl; Index: Integer;//请问大大,index是不是依据.DropDownCount自动变化来进行绘制的?我用了一个showmessage(inttostr(index)),一直在不停的循环 Rect: TRect; State: TOwnerDrawState); var Pic: TBitmap; begin with TComboBox(Control).Canvas do begin FillRect(Rect); Pic := TBitmap(LineStyleComboBox.Items.Objects[index]); Brush.Bitmap := pic; Rectangle(rect); Brush.Bitmap := nil; end; end;發表人 - zzmbeyond01 於 2004/07/14 21:48:03 |
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
zzmbeyond01 你好
修改一下程式如下: procedure TForm1.FormCreate(Sender: TObject); var i, lincnt: integer; LineStyleObj: CMapXStyle; pic: TBitmap; begin LineStyleObj := CoStyle.Create; LineStyleList := TStringlist.Create; with LineStyleList do begin for i := 0 to lincnt - 1 do // lincnt = ?? 好奇怪 begin Pic := TBitmap.Create; // 要個別建立 pic.LoadFromFile('.\Line' inttostr(i) '.bmp'); LineStyleList.AddObject(inttostr(i), pic); end; end; LineStyleComboBox.Items := LineStyleList; LineStyleComboBox.DropDownCount := 3; LineStyleComboBox.ItemIndex := 0; end;_______________________________________ 深藍的魚,祝您好運..........連.連 |
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
多谢chance36大大!
但是小兄想多问一下,就是
在循环中,创建一个pic(位图对象)加载一个位图,但是我释放free掉后就会冲突,不释放的话,我想会很占用资源,请问该怎么解决? for i := 0 to linecnt - 1 do begin //依据线型样式号i,设置样式 //将样式以位图形式保存在image文件夹 //通过bmp对象,将位图和id加载到字符串列表中 pic := TBitmap.Create; pic.LoadFromFile('.\image\Line' inttostr(i) '.bmp'); LineStyleList.AddObject(inttostr(i), pic); pic.Free在这里释放,在ondrawitem中又会冲突< >< > end;不懂的时候,多向高手请教,多学、多问、多思考 |
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 在循环中,创建一个pic(位图对象)加载一个位图,但是我释放free掉后就会冲突,不释放的话,我想会很占用资源,请问该怎么解决?zzmbeyond01 你好 這是一個互相矛盾的問題,想要使用pic,但又不希望它佔記憶體空間,這.... 除非使用時間換取空間的策略,或資源共享的方式:(完全不佔空間是不可能的) 時間換取空間:位圖放在硬碟,Listl 只記錄檔名,當要畫出的時候再從硬碟載入,輸出後隨即釋放。 資源共享:將數個位圖拼成一張大的位圖,每個ListItem只記錄其矩形座標,一毎大的Pic比對多個小的Pic省資源,像一些游戲也是採用這方式,時門與空間兼得。 _______________________________________ 深藍的魚,祝您好運..........連.連 |
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |