File và Image
Phạm vi áp dụng
✅ Bravo 8 · ✅ Bravo 10
Nhóm control làm việc với file, thư mục, hình ảnh.
Điểm chung
Các control BravoOpenFileBox, BravoPictureInputBox, BravoDocInputBox đều có thể nhập liệu bằng cách drag files từ Windows Explorer và drop vào control.
Từ v5.2.0.1 hỗ trợ kéo thả file trực tiếp vào cột grid nhập liệu mà không cần edit ô grid trước.
Editor và Explorer đều hỗ trợ mở file bằng
Ctrl+ click chuột trái vào file.
BravoOpenFileBox
Control kiểu chọn file từ đường dẫn.
<Control_Identifier>
<Row>0</Row>
<Column>1</Column>
<ClassName>BravoOpenFileBox</ClassName>
<DataMember>Identifier</DataMember>
<ColumnSpan>2</ColumnSpan>
<Dock>Top</Dock>
</Control_Identifier>Các thẻ hỗ trợ
| Thẻ | Nội dung |
|---|---|
bValueExcludingPath | Loại trừ đường dẫn (chỉ lấy tên file) — ngầm định False |
bAllowMultiSelect | Cho phép chọn nhiều file một lúc |
selectedMembers | Các property của file được cập nhật cho các cột binding khi người dùng chọn file |
bAutoDetectTextFile | Tự động kiểm tra nếu nội dung file là văn bản thì lấy giá trị chuỗi cho selectedMember.FileContent — ngầm định False |
zZipPassword | Đặt mật khẩu cho file zip |
zInitialDirectory | Thư mục ngầm định cho hộp thoại chọn đường dẫn/file/ảnh |
validateMode | Kiểm tra tên file người dùng chọn (từ v4.6.4) |
dialogFileFilter | Tùy chọn kiểu định dạng file trong hộp thoại (từ v5.2.0.1) |
nFileSizeLimit | Giới hạn dung lượng — ngầm định 2097152 bytes |
validateMode (v4.6.4)
Chỉ định việc kiểm tra tên file (nếu dialogType == OpenFile). Nếu kiểm tra không thành công sẽ hiển thị cảnh báo và không chấp nhận tên file.
| Giá trị | Nội dung |
|---|---|
None | Không kiểm tra |
Existing | Chỉ chấp nhận tên file có tồn tại |
SizeLimit | Chỉ chấp nhận file có dung lượng nhỏ hơn nFileSizeLimit |
Readable | Chỉ chấp nhận file có thể đọc được nội dung |
Writable | Chỉ chấp nhận file có thể ghi được nội dung |
dialogFileFilter (v5.2.0.1)
Các giá trị có thể kết hợp: DocumentFiles, ImageFiles, AllFiles
Note
Ẩn intellisense khai báo
zDialogFilter— khai báo này chỉ dùng cho trường hợp customize đặc biệt khi chỉ mở 1-2 định dạng file đặc thù. Các định dạngDocumentFiles,ImageFilesđã được định nghĩa sẵn.
zZipPassword
<zZipPassword Encrypt="True">mật khẩu</zZipPassword>Khi khai báo thẻ này, file lưu ở server là file zip sẽ được đặt Pass — mở được trực tiếp từ Bravo, nhưng mở trực tiếp từ thư mục máy chủ sẽ hỏi Pass.
zInitialDirectory (v4.6.5.1)
Có thể khai báo toàn cục bằng DefaultUserPath trong file Bravo8.exe.config, hoặc khai báo zInitialDirectory ở MainWindow dùng biểu thức nhúng để lấy giá trị từ các bảng hệ thống.
Dùng chung cho: BravoOpenDirBox, BravoOpenFileBox, BravoSaveFileBox, BravoDocInputBox, BravoPictureInputBox, BravoDialogDataButton.
Ví dụ — lưu tên file và nội dung file
<Editor>
<ClassName>BravoOpenFileBox</ClassName>
<bValueExcludingPath>True</bValueExcludingPath>
<selectedMembers>
<FileContent>FileContent</FileContent>
</selectedMembers>
</Editor>
selectedMemberschỉ chạy trong 2 trường hợp
- Khi xóa trắng giá trị (các giá trị của
selectedMembersđược updateNULL)- Khi người dùng click mở file
Nếu giá trị khác trắng được đổi bằng evaluator hoặc bất kỳ phương thức nào khác thì
selectedMembersbị bỏ qua.
Note
BravoOpenFileBoxkhibAllowMultiSelect=Falsevà BravoPictureInputBox sẽ cập nhật:
<FolderName>= tên thư mục chứa (không gồm đường dẫn)<FileLocation>= đường dẫn (không gồm tên file)
BravoSaveFileBox
Control kiểu mở đường dẫn và lưu thông tin file chọn.
<txtPath>
<ClassName>BravoSaveFileBox</ClassName>
<zDialogFilter>*.001|*.001|All Files(*.*)|*.*</zDialogFilter>
<DataMember>Path</DataMember>
<Column>1</Column>
</txtPath>BravoDocInputBox
Attach nội dung file tài liệu.
Định dạng hỗ trợ (cơ bản): Pdf, Doc, Docx, Xls, Xlsx, Rtf, Txt
Bản chất
Đây là control binding trực tiếp với cột kiểu dữ liệu
binarytrong bảng — không hỗ trợselectedMembers.Nếu muốn dùng
selectedMembers→ dùng BravoOpenFileBox hoặc BravoPictureInputBox.
Nén nhiều file
Khai báo cũ (allowMultiSelect) | Nội dung |
|---|---|
None | Không nén |
ZipAlways | Luôn nén thành một file |
ZipMultiOnly | Chỉ nén khi mở chọn nhiều hơn một file |
Khai báo mới zipMode (v5.2.0.1) | Nội dung |
|---|---|
Always | Luôn nén file đính kèm vào file zip |
MultiFiles | Chỉ nén nếu có nhiều hơn 1 file đính kèm |
UnknownFile | Nén khi file đính kèm là loại không được hỗ trợ |
Vì sao có
zipMode=UnknownFile?
BravoDocInputBoxkhi chỉ đính kèm 1 file thì lưu nội dung file. Nhưng nếu file đó không thuộc định dạng được hỗ trợ (VD*.dot,*.xlt) thì có thể lỗi khi mở xem. VớizipMode=UnknownFile, file sẽ được nén vào zip và người dùng vẫn mở xem bình thường.
Khai báo cũ vẫn được giữ để tương thích ngược.
openFileMode (v4.6.3)
| Giá trị | Nội dung |
|---|---|
Hybrid | (ngầm định) Click đúp mở file — nếu là file zip và chỉ chứa duy nhất 1 file thì tự động unzip để mở file bên trong |
ShellOpen | Luôn mở file zip như trước |
QuickView | Xem nhanh nội dung file (bổ sung v4.6.4) |
<BravoBPDFFile>
<ClassName>BravoDocInputBox</ClassName>
<DataMember>PDFFile</DataMember>
<openFileMode>ShellOpen</openFileMode>
</BravoBPDFFile>Lịch sử phiên bản
| Version | Thay đổi |
|---|---|
| V4.1.1.0 | Hỗ trợ drag & drop file |
| v4.6.5.1 | Hỗ trợ thêm định dạng csv |
| v4.7.0.1 | ⚠️ Thay đổi cơ chế bảo mật: đọc/ghi file từ thư mục gốc chỉ định bằng tham số hệ thống M_DefaultDirPath, client chỉ được truyền tên sub-folder hoặc tên file |
| v5.2.0.1 | Hỗ trợ đầy đủ OfficeXML và OpenOffice: pdf, doc, docx, docm, dotx, dotm, xls, xlsx, xlsm, xltx, xltm, xlsb, xlam, csv, ppt, pptx, pptm, ppsx, ppsm, potx, potm, ppam, sldx, sldm, xps, odt, ods, rtf, xml, txtThêm bAllowMultiSelect, zipMode, zZipPasswordMember |
| Thẻ | Nội dung |
|---|---|
zZipPasswordMember | Tên cột của bảng dữ liệu binding chứa mật khẩu cho file zip đính kèm |
Kết hợp lưu file trên server
Có thể kết hợp với evaluator BravoFileWriter / BravoReadFile để upload/download nội dung file trên server thay vì lưu vào CSDL.
BravoPictureBox
Hiển thị dữ liệu kiểu hình ảnh.
| Thẻ | Nội dung |
|---|---|
ImageLocation | Đường dẫn ổ đĩa hoặc Web để Load ảnh |
BravoPictureInputBox
Nhập liệu kiểu hình ảnh. (Tương đương BravoPictureBox của bản 7.)
<Ten_Control>
<ClassName>BravoPictureInputBox</ClassName>
<DataMember>Ten_truong</DataMember>
<imageValueType>Gia_tri</imageValueType>
<nMaximumImageSize>Gia_Tri</nMaximumImageSize>
<maximumImageDimension>Gia_Tri</maximumImageDimension>
<selectedMembers>...</selectedMembers>
</Ten_Control>| Thẻ | Nội dung |
|---|---|
imageValueType | Kiểu lưu giá trị ảnh. Đáng chú ý: 3 hoặc FileLocation — chỉ định lưu đường dẫn file ảnh |
nMaximumImageSize | Kích cỡ lớn nhất của file ảnh chấp nhận (bytes) — lớn hơn sẽ bị thu nhỏ lại |
maximumImageDimension | Kích thước lớn nhất (pixel) — lớn hơn sẽ bị thu nhỏ lại |
maximumThumbnailDimension | Kích thước thumbnail — ngầm định 200,200 |
selectedMembers | Các property của ảnh cập nhật cho cột binding |
selectedMembers — danh sách thẻ con
| Thẻ con | Nội dung |
|---|---|
FileName | Tên file ảnh |
FileNameWithoutExtension | Tên file đã cắt bỏ extension |
FileLocation | Tên file gồm cả đường dẫn |
FolderName | Tên folder |
FileContent | Nội dung file (mảng byte) |
FileReadTime / FileReadTimeUTC | Thời gian đọc file |
FileWriteTime / FileWriteTimeUTC | Thời gian ghi file |
ImageDimension | Kích cỡ ảnh |
ImageResolution | Độ phân giải |
ImagePixelFormat | Định dạng pixel |
ImageThumbnail | Ảnh thumbnail dạng binary |
Warning
Nếu
imageValueType = FileLocationthìmaximumImageDimensionvànMaximumImageSizebị bỏ qua.
Chụp ảnh từ webcam
Thêm tính năng chụp ảnh từ webcam của máy tính khi mở dropdown của
BravoPictureInputBox(có thể phụ thuộc vào từng loại máy tính/webcam và hệ điều hành).
Hiển thị ảnh trong Grid:
<Style>TextAlign:LeftTop;Format:img;</Style>BravoPictureEditor
Chỉnh sửa ảnh, hỗ trợ binding dữ liệu cột kiểu binary.
Cho phép người dùng: xoay, lật ảnh, cắt vùng lựa chọn, tăng giảm kích cỡ, chỉnh độ sáng / tương phản / tông màu / trong suốt, lưu ra file, in.
Người dùng có thể dán ảnh từ clipboard, kéo thả ảnh từ Windows Explorer, hoặc gán giá trị bằng evaluator.
<Ten_Control>
<Column>1</Column>
<ClassName>BravoPictureEditor</ClassName>
<DataMember>Tên_bảng.Tên_cột</DataMember>
<Dock>Fill</Dock>
</Ten_Control>BravoDialogDataButton
Dạng button hỗ trợ data binding.
dialogType | Nội dung |
|---|---|
OpenFile | Mở hộp thoại chọn file |
OpenFolder | Mở hộp thoại chọn thư mục |
SaveFile | Mở hộp thoại lưu file |
MessageBox | Mở hộp thoại thông báo — giá trị người dùng chọn được lưu vào Value (khai báo DataMember) |
<btnOpenFile>
<ClassName>BravoDialogDataButton</ClassName>
<dialogType>OpenFile</dialogType>
<bAllowMultiSelect>True</bAllowMultiSelect>
<zDialogFilter>*.bmp;*.jpg;*.jpeg;*.gif;*.png;*.tif)|*.bmp;*.jpg;*.jpeg;*.gif;*.png;*.tif</zDialogFilter>
<DataMember>Name</DataMember>
<Text>
<Vietnamese>Tải nhiều file</Vietnamese>
</Text>
<Column>1</Column>
</btnOpenFile>Kết hợp với
BravoAddFileEvaluatorNút “Tải nhiều file” cho phép chọn nhiều ảnh cùng lúc để đẩy vào Grid — kết hợp với BravoAddFileEvaluator.
BravoOpenServerDirBox
Chọn đường dẫn từ server.
<Ten_Control>
<ClassName>BravoOpenServerDirBox</ClassName>
<Assembly>Bravo.LayoutEngine</Assembly>
<DataMember>Ten_truong</DataMember>
</Ten_Control>BravoOpenFileButton
❌ Bravo 8 · ✅ Bravo 10 — Áp dụng từ version 10.4.1
Nút mở file. → Lịch sử thay đổi theo version
Liên quan
BravoFileWriter / BravoReadFile · BravoAddFileEvaluator · Attach File · Bắt đầu với Controls · Style