線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1406
推到 Plurk!
推到 Facebook!

織物設計-網狀格設計

尚未結案
weiliching
初階會員


發表:53
回覆:78
積分:31
註冊:2003-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-12-14 22:46:55 IP:113.161.xxx.xxx 訂閱
最近要幫公司設計一個織造方面 , 用來寫一寫一個設計圖.
內容只是一個網狀格, 如果是1就是黑色,0就是白色.

格子大小有可能是25*25 也有可能是 100*100...格子大小是一個變數.
要設計讓使用者能夠自己在裡面畫黑格.與白格.
曾經想過要用StrGrid 元件去做.網狀格..然後自己在裡面畫X..


補充說明:

因為資料還要存在資料庫裡,我是打算採用二位元Binary 去存檔,不知道大大們有什麼建議來設計與規劃.




編輯記錄
weiliching 重新編輯於 2010-12-17 23:58:57, 註解 無‧
weiliching 重新編輯於 2010-12-17 23:58:58, 註解 無‧
老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-12-15 08:56:45 IP:59.120.xxx.xxx 未訂閱
DrawGrid可試看看
本站應該有文章可以參考
可以先翻翻文章~


===================引 用 weiliching 文 章===================
最近要幫公司設計一個織造方面 , 用來寫一寫一個設計圖.
內容只是一個網狀格, 如果是1就是黑色,0就是白色.

格子大小有可能是25*25 也有可能是 100*100...格子大小是一個變數.
要設計讓使用者能夠自己在裡面畫黑格.與白格.
曾經想過要用StrGrid 元件去做.網狀格..然後自己在裡面畫X..


請問哪位大大有此經驗的?



mypigbaby
高階會員


發表:11
回覆:166
積分:150
註冊:2006-07-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-12-17 13:31:08 IP:203.73.xxx.xxx 訂閱
豬寶寶之前有寫過一個小程式
大概的精神是這樣
先讓USER輸入大小 (二個EDIT BOX)
然後在宣告一個二維陣例
大小就是USER輸入的那樣
再來控制STRING GRID 看要在那格做記號
在在相對映的陣例中就上1
然後就呼叫STRING GRID的 Refresh 事件
就依照陣例重畫STRING GRID
而在STRING GRID的DrawCell 事件中
定義好如果陣例中的值各代表什麼顏色
大方向就是陣列為骨,STRING GRID為皮
一切的操作都是改變 那個二維陣例的值
而STRING GRID只負責輸出及輸入

大概就這樣,有問題可以再討論^^
==================引 用 weiliching 文 章===================
最近要幫公司設計一個織造方面 , 用來寫一寫一個設計圖.
內容只是一個網狀格, 如果是1就是黑色,0就是白色.

格子大小有可能是25*25 也有可能是 100*100...格子大小是一個變數.
要設計讓使用者能夠自己在裡面畫黑格.與白格.
曾經想過要用StrGrid 元件去做.網狀格..然後自己在裡面畫X..


請問哪位大大有此經驗的?



smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-12-17 23:31:45 IP:203.67.xxx.xxx 訂閱
程式碼原理如下:

1. 在一個MainPanel上動態產生 25*25 or 100*100 個小TPanel, 並設定這些小TPanel的OnClick事件.
2. OnClick事件內撰寫判斷顏色的程式碼.
3. 當User按下OK後, 檢查這些小TPanel的Color屬性, 即可決定 0 or 1.
smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-12-30 00:04:50 IP:203.73.xxx.xxx 訂閱
以下是利用 TDrawGrid 來撰寫動態產生網格的程式碼,
至於如何將選定的內容存回資料庫, 有興趣者可以試看看 ...

// --------------------------------
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, Grids;
type
TForm2 = class(TForm)
Panel1: TPanel;
Label1: TLabel;
edRowCount: TEdit;
Label2: TLabel;
edColCount: TEdit;
Bevel1: TBevel;
BitBtn1: TBitBtn;
Bevel2: TBevel;
Bevel3: TBevel;
MainPanel: TPanel;
DrawGrid1: TDrawGrid;
procedure BitBtn1Click(Sender: TObject);
procedure MainPanelResize(Sender: TObject);
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
private
Ary: array of array of Integer;
//
procedure Set_Grid_W_H(mCol, mRow: Integer);
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
// -------------------------------------------------------------------------- //
procedure TForm2.Set_Grid_W_H(mCol, mRow: Integer);
begin
DrawGrid1.DefaultColWidth :=(MainPanel.ClientWidth - Trunc(0.88*mCol)) div mCol;
DrawGrid1.DefaultRowHeight:=(MainPanel.ClientHeight - Trunc(0.95*mRow)) div mRow;
end;
procedure TForm2.BitBtn1Click(Sender: TObject);
var i, j, mCol, mRow: Integer;
begin
mRow :=StrToInt(edRowCount.Text);
mCol :=StrToInt(edColCount.Text);
//
if (mRow<10) or (mRow>100) then begin
ShowMessage(Label1.Caption ' 有誤, 輸入值須介於 10 - 100 之間 !!');
edRowCount.SetFocus;
Exit;
end;
if (mCol<10) or (mCol>100) then begin
ShowMessage(Label2.Caption ' 有誤, 輸入值須介於 10 - 100 之間 !!');
edColCount.SetFocus;
Exit;
end;
//
// 產生格網 ..
Panel1.Enabled:=False;
DrawGrid1.Visible:=False;
Screen.Cursor:=crHourglass;
try
DrawGrid1.ColCount:=mCol;
DrawGrid1.RowCount:=mRow;
//
Set_Grid_W_H(mCol, mRow);
//
SetLength(Ary, mRow);
for i:=0 to mRow-1 do begin
SetLength(Ary[i], mCol);
for j:=0 to mCol-1 do Ary[i, j]:=clWhite; // 預設顏色 ..
end;
finally
DrawGrid1.Visible:=True;
Screen.Cursor:=crDefault;
Panel1.Enabled:=True;
end;
end;
procedure TForm2.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
DrawGrid1.Canvas.Brush.Color:=Ary[ACol, ARow];
DrawGrid1.Canvas.FillRect(Rect);
DrawGrid1.Canvas.FrameRect(Rect);
end;
procedure TForm2.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
if (Ary[ACol, ARow]=clWhite) then Ary[ACol, ARow]:=clBlack
else Ary[ACol, ARow]:=clWhite;
end;
procedure TForm2.MainPanelResize(Sender: TObject);
begin
if (DrawGrid1.Visible) then
Set_Grid_W_H(StrToInt(edColCount.Text), StrToInt(edRowCount.Text));
end;
end.
系統時間:2017-12-11 15:30:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!