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
bValueExcludingPathLoại trừ đường dẫn (chỉ lấy tên file) — ngầm định False
bAllowMultiSelectCho phép chọn nhiều file một lúc
selectedMembersCác property của file được cập nhật cho các cột binding khi người dùng chọn file
bAutoDetectTextFileTự độ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
zInitialDirectoryThư mục ngầm định cho hộp thoại chọn đường dẫn/file/ảnh
validateModeKiểm tra tên file người dùng chọn (từ v4.6.4)
dialogFileFilterTùy chọn kiểu định dạng file trong hộp thoại (từ v5.2.0.1)
nFileSizeLimitGiớ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
NoneKhông kiểm tra
ExistingChỉ chấp nhận tên file có tồn tại
SizeLimitChỉ chấp nhận file có dung lượng nhỏ hơn nFileSizeLimit
ReadableChỉ chấp nhận file có thể đọc được nội dung
WritableChỉ 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ạng DocumentFiles, 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>

selectedMembers chỉ chạy trong 2 trường hợp

  1. Khi xóa trắng giá trị (các giá trị của selectedMembers được update NULL)
  2. 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ì selectedMembers bị bỏ qua.

Note

BravoOpenFileBox khi bAllowMultiSelect=False và 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 binary trong 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
NoneKhông nén
ZipAlwaysLuôn nén thành một file
ZipMultiOnlyChỉ 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
AlwaysLuôn nén file đính kèm vào file zip
MultiFilesChỉ nén nếu có nhiều hơn 1 file đính kèm
UnknownFileNén khi file đính kèm là loại không được hỗ trợ

Vì sao có zipMode=UnknownFile?

BravoDocInputBox khi 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ới zipMode=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
ShellOpenLuôn mở file zip như trước
QuickViewXem 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

VersionThay đổi
V4.1.1.0Hỗ trợ drag & drop file
v4.6.5.1Hỗ 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.1Hỗ 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, txt
Thêm bAllowMultiSelect, zipMode, zZipPasswordMember
ThẻNội dung
zZipPasswordMemberTê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
imageValueTypeKiểu lưu giá trị ảnh. Đáng chú ý: 3 hoặc FileLocation — chỉ định lưu đường dẫn file ảnh
nMaximumImageSizeKí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
maximumImageDimensionKích thước lớn nhất (pixel) — lớn hơn sẽ bị thu nhỏ lại
maximumThumbnailDimensionKích thước thumbnail — ngầm định 200,200
selectedMembersCác property của ảnh cập nhật cho cột binding

selectedMembers — danh sách thẻ con

Thẻ conNội dung
FileNameTên file ảnh
FileNameWithoutExtensionTên file đã cắt bỏ extension
FileLocationTên file gồm cả đường dẫn
FolderNameTên folder
FileContentNội dung file (mảng byte)
FileReadTime / FileReadTimeUTCThời gian đọc file
FileWriteTime / FileWriteTimeUTCThời gian ghi file
ImageDimensionKích cỡ ảnh
ImageResolutionĐộ phân giải
ImagePixelFormatĐịnh dạng pixel
ImageThumbnailẢnh thumbnail dạng binary

Warning

Nếu imageValueType = FileLocation thì maximumImageDimension và nMaximumImageSize bị 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.

dialogTypeNội dung
OpenFileMở hộp thoại chọn file
OpenFolderMở hộp thoại chọn thư mục
SaveFileMở hộp thoại lưu file
MessageBoxMở 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 BravoAddFileEvaluator

Nú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