Tôi có một hộp kết hợp được vẽ chủ sở hữu hiển thị các chuỗi trong cột. Các thói quen vẽ có thể được chia sẻ trên combo nếu tôi bằng cách nào đó có thể vượt qua các thông số kỹ thuật cột cho sự kiện OnDrawItem. Một cách tự nhiên để làm như vậy, sẽ là để vượt qua mảng chiều rộng cột trong thuộc tính ComboBox.Tag và sau đó đưa nó trở lại một mảng.Làm thế nào để đúc một mảng đến con trỏ và trở lại trong Delphi?
Khi tôi xác định các mảng cột như:
const arrWidth :array[1..4] of integer = (100,100,100,70);
và thiết lập thuộc tính Tag để:
ComboBox.Tag := integer(@arrWidth);
và sau đó trong trường hợp OnDrawItem, đúc nó trở lại một mảng:
Widths :array of integer;
Widths := pointer(ComboBox.Tag);
Tôi có thể thấy các phần tử mảng tốt, nhưng mảng không biết chiều dài của nó. Nó dường như dài hơn nhiều với tất cả các loại giá trị ngẫu nhiên.
Tôi đã thử sử dụng mảng động nhưng sau đó tôi thậm chí không nhận được giá trị cột thích hợp.
Alternatives không liên quan đến lưu trữ con trỏ mảng trong Tag bao gồm viết một hậu duệ lưu trữ các giá trị trong một tài sản dành riêng cho công việc, và lưu trữ các độ rộng cột trong một mảng kết hợp (như TDictionary) mà các bản đồ combo- trường hợp hộp cho mảng chiều rộng. –
Cảm ơn nhận xét. Tôi đã cân nhắc việc tạo ra một hậu duệ, nhưng coi đó là quá nhiều nỗ lực. Có lẽ nó sẽ làm cho hình dạng bền vững hơn trong tương lai, nhưng đây là lần đầu tiên trong 15 năm tôi muốn có một hộp kết hợp với các cột, vì vậy tôi không nghĩ rằng tôi sẽ tái sử dụng nó nhiều. –