TreeView
От: Keith  
Дата: 27.04.05 14:40
Оценка:
Включаю у TreeView чек-боксы таким образом:
 DWORD dwStyle = GetWindowLong(TreeView1->Handle, GWL_STYLE);
 dwStyle = dwStyle | 0x115;
 SetWindowLong(TreeView1->Handle, GWL_STYLE, dwStyle);


А как изменить внешний вид чек-боксов? И как сделать, чтобы чек-бокс нельзя было переключать? Принимаю любые идеи.

Заранее — спасибо.
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Re: TreeView
От: Danchik Украина  
Дата: 27.04.05 15:47
Оценка:
Здравствуйте, Keith, Вы писали:

K> Включаю у TreeView чек-боксы таким образом:

K>
K> DWORD dwStyle = GetWindowLong(TreeView1->Handle, GWL_STYLE);
K> dwStyle = dwStyle | 0x115;
K> SetWindowLong(TreeView1->Handle, GWL_STYLE, dwStyle);
K>


K> А как изменить внешний вид чек-боксов? И как сделать, чтобы чек-бокс нельзя было переключать? Принимаю любые идеи.


K> Заранее — спасибо.


Не используй этот стиль. Самь добавь StateImage в виде чекбокса и переключай картинки на MouseUp (Смотри GetHitTestInfoAt, GetNodeAt)
Re[2]: TreeView
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 27.04.05 15:57
Оценка:
Здравствуйте, Danchik, Вы писали:

[]

D>Не используй этот стиль. Самь добавь StateImage в виде чекбокса и переключай картинки на MouseUp (Смотри GetHitTestInfoAt, GetNodeAt)


Мотивация против использования этого стиля? Я использую — все ок. Под XP чекбоксы выглядят как надо, если темы включены, под более старыми виндами — как стандартные чекбоксики. В чем проблема использования этого стиля?
Re[3]: TreeView
От: Danchik Украина  
Дата: 27.04.05 15:59
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Danchik, Вы писали:


F>[]


D>>Не используй этот стиль. Самь добавь StateImage в виде чекбокса и переключай картинки на MouseUp (Смотри GetHitTestInfoAt, GetNodeAt)


F>Мотивация против использования этого стиля? Я использую — все ок. Под XP чекбоксы выглядят как надо, если темы включены, под более старыми виндами — как стандартные чекбоксики. В чем проблема использования этого стиля?


Контроля больше Люблю чтоб все тип-топ было. А XP стиль картинки можна и подгрузить
Re[4]: TreeView
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 27.04.05 16:02
Оценка:
Здравствуйте, Danchik, Вы писали:

[]

D>Контроля больше Люблю чтоб все тип-топ было. А XP стиль картинки можна и подгрузить


В чем контроля больше? Просветите темного, плз. Отслеживать/устанавливать состояние чекбокса? Не проблема, делается на раз — около 15 строк кода. Так в чем суксь встроенной возможности задешево поиметь чекбоксы в TreeView, я так и не понял?
Re[5]: TreeView
От: Danchik Украина  
Дата: 27.04.05 16:07
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Danchik, Вы писали:


F>[]


D>>Контроля больше Люблю чтоб все тип-топ было. А XP стиль картинки можна и подгрузить


F>В чем контроля больше? Просветите темного, плз. Отслеживать/устанавливать состояние чекбокса? Не проблема, делается на раз — около 15 строк кода. Так в чем суксь встроенной возможности задешево поиметь чекбоксы в TreeView, я так и не понял?


Не тема для спора. Чесно.
Знаю что ты приверженец подхода "не извращайте стандартный интерфейс"
Покажи лучше человеку эти 15 строк. Сразу скажу что этот стиль не использую
Re[6]: TreeView
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 27.04.05 16:10
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Сразу скажу что этот стиль не использую


Вот именно поэтому и не стоит советовать другим не использовать то, чем не пользуешься сам. Я лишь указал на то, что есть и другая возможность, а мое недоумение вызвано вашим "не используй этот стиль". Сразу возникает вопрос "а почему?"
Re[7]: TreeView
От: Danchik Украина  
Дата: 27.04.05 16:46
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Danchik, Вы писали:


D>>Сразу скажу что этот стиль не использую


F>Вот именно поэтому и не стоит советовать другим не использовать то, чем не пользуешься сам.

Каюсь, неправильно выразился

F>Я лишь указал на то, что есть и другая возможность, а мое недоумение вызвано вашим "не используй этот стиль". Сразу возникает вопрос "а почему?"

Точно не помню давно это было, ой давно...

Ладно чтоб исправить ситуацию


type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    FSaveTVProc : TWndMethod;
    procedure NewTreeViewProc (var Message : TMessage); 
  public
    { Public declarations }
  end;

....

implementation

....

procedure TForm1.FormCreate(Sender: TObject);
var
  aStyle : Cardinal;
begin
  aStyle := GetWindowLong(TreeView1.Handle, GWL_STYLE);
  aStyle := aStyle or $115;
  SetWindowLong(TreeView1.Handle, GWL_STYLE, aStyle);

  FSaveTVProc := TreeView1.WindowProc;
  TreeView1.WindowProc := NewTreeViewProc;
end;

procedure TForm1.NewTreeViewProc(var Message: TMessage);
var
  aHintTest : THitTests;
begin

  case Message.Msg of
    WM_LBUTTONDOWN :
      begin
        aHintTest := TreeView1.GetHitTestInfoAt(TWMLButtonDown (Message).XPos, TWMLButtonDown (Message).YPos);
        if htOnStateIcon in aHintTest then begin
          { чекать низзяя }
          TWMLButtonDown (Message).Result := 0;
          Dispatch(Message);
          Exit;
        end;
      end;
  end;

  if Assigned (FSaveTVProc) then
    FSaveTVProc (Message);
end;
Re[8]: TreeView
От: Keith  
Дата: 27.04.05 18:25
Оценка:
D>Ладно чтоб исправить ситуацию

Не хватает знаний переделать на Builder
Как вот это переделать:
 TreeView1.WindowProc := NewTreeViewProc;
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.