Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 speedbutton glyph картинка появляется не сразу  [new]
Tech N9ne
Member

Откуда:
Сообщений: 175
Ребят, есть кнопка созданная в рантайме, по онклику появляется popupmenu, там выбор ярлык или папка.
Суть в том, что гружу в кнопку иконку ярлыка или папки, через opendialog, pathdialog...
Предварительно гружу иконку в image.picture.icon.handle, потом glyph.assign.
После всего этого, на кнопке не появляется изображение до тех пор, пока не наведёшь курсор на него.
Почему так происходит, и как это можно исправить?

Вот код:
 var IconIndex: Word;
  Pch: array [0 .. 256] of Char;
begin
  if sOpenDialog1.Execute then
  begin
    S[1] := sOpenDialog1.FileName; // путь к файлу
    StrPCopy(Pch, S[1]);
    IconIndex := 1;
    Convert_simage1.Picture.Icon.Handle := ExtractAssociatedIcon(hInstance, Pch, IconIndex); // иконку в image
    BTN[1].Glyph.Assign(Convert_simage1.Picture.Graphic); // иконку в кнопку
  end;
end;
12 мар 19, 16:23    [21830477]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29837

refresh

Posted via ActualForum NNTP Server 1.5

12 мар 19, 16:25    [21830482]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Tech N9ne
Member

Откуда:
Сообщений: 175
Мимопроходящий,
Забыл написать, я пробовал Refresh, не помогает.
12 мар 19, 16:31    [21830491]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
goldmi45
Member

Откуда:
Сообщений: 1132
invalidate
12 мар 19, 16:43    [21830506]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Tech N9ne
Member

Откуда:
Сообщений: 175
goldmi45
invalidate

тоже не помогает
12 мар 19, 16:49    [21830513]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4465
Tech N9ne
goldmi45
invalidate

тоже не помогает

Repaint ?
12 мар 19, 16:53    [21830518]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Tech N9ne
Member

Откуда:
Сообщений: 175
Gerasimenko
Tech N9ne
пропущено...

тоже не помогает

Repaint ?

))) бред какой-то, не помогает ничего)
12 мар 19, 17:05    [21830529]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29837

значит не тому компоненту делаешь refresh

Posted via ActualForum NNTP Server 1.5

12 мар 19, 17:08    [21830534]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Tech N9ne
Member

Откуда:
Сообщений: 175
Мимопроходящий
значит не тому компоненту делаешь refresh

Тому. Я пробовал в конце процедуры писать эти репаинты и рефреши..
так же вставил код в другую кнопку, которая обращается к нужному speedbutton`у
создал одну кнопку, и уверен в том, что это именно btn[1]
btn[1].refresh;
btn[1].invalidate;
btn[1].repaint;
Эффекта 0;
12 мар 19, 17:16    [21830541]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4465
Tech N9ne
Мимопроходящий
значит не тому компоненту делаешь refresh

Тому. Я пробовал в конце процедуры писать эти репаинты и рефреши..
так же вставил код в другую кнопку, которая обращается к нужному speedbutton`у
создал одну кнопку, и уверен в том, что это именно btn[1]
btn[1].refresh;
btn[1].invalidate;
btn[1].repaint;
Эффекта 0;

Этих строчек не достаточно.
Нужны строки самого создания, загрузки иконки, и метод/событие из которого они вызываются.
12 мар 19, 17:25    [21830555]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Arioch
Member

Откуда:
Сообщений: 10807
Вот вряд ли TSpeedButton рассчитан на иконки.

Сделай промежуточный TBitmap, загрузи в него нужную из картинок иконки, и уже TBitmap назначай кнопке

чему у тебя равно http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Buttons_TSpeedButton_NumGlyphs.html ?
12 мар 19, 17:50    [21830595]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Tech N9ne
Member

Откуда:
Сообщений: 175
Странно, на онклик кнопки, шла проверка, если переменная S[1] пуста, то показываем popupmenu, в нём выбор ярлык или папка, далее opendialog и загрузка иконки.
Убрал popupmenu, начал добавлять иконку тем же методом, сразу по онклик, и картинка появляется, без refresh, invalidate и repaint`a.
13 мар 19, 13:12    [21831234]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Arioch
Member

Откуда:
Сообщений: 10807
Tech N9ne
переменная S[1] пуста


а что это за переменная, где и как объявлена, кто где и как к ней обращается ?

и нафиг она тебе вообще нужна...

http://www.delphibasics.ru/PromptForFileName.php
13 мар 19, 15:29    [21831439]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Tech N9ne
Member

Откуда:
Сообщений: 175
Arioch
Tech N9ne
переменная S[1] пуста


а что это за переменная, где и как объявлена, кто где и как к ней обращается ?

и нафиг она тебе вообще нужна...

http://www.delphibasics.ru/PromptForFileName.php

глобально
S: array [1 .. 10] of string;
это строковой массив, для хранения в них путей к ярлыкам.
13 мар 19, 18:54    [21831698]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Arioch
Member

Откуда:
Сообщений: 10807
Tech N9ne
Странно, на онклик кнопки


т.е. в особом состоянии "кнопка нажата прямо-вот-сейчас"

может быть с этим связано?
13 мар 19, 19:37    [21831745]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Tech N9ne
Member

Откуда:
Сообщений: 175
Arioch
Tech N9ne
Странно, на онклик кнопки


т.е. в особом состоянии "кнопка нажата прямо-вот-сейчас"

может быть с этим связано?

Я вас не понял..
Я уже переделал программу, не использую кнопки, заменил их на Image.

var
  IconIndex: Word;
  Pch: array [0 .. 256] of Char;
begin
  if S[SENSORTAG] = '' then // если переменная пуста
  begin
    if sOpenDialog1.Execute then
    begin
      S[SENSORTAG] := sOpenDialog1.FileName; // путь выбранного файла
      BTN[SENSORTAG].ImageIndex := -1;  // убераю дефолтную картинку
      StrPCopy(Pch, S[SENSORTAG]);
      IconIndex := 1;
      BTN[SENSORTAG].Picture.Icon.Handle := ExtractAssociatedIcon(hInstance,Pch, IconIndex);  // гружу иконку
    end;
  end else // если переменная S[] не пуста
  begin
    ShellExecute(Form1.Handle, nil, PChar(S[SENSORTAG]), nil, nil, SW_RESTORE);  // запускаю файл, путь которого в S[]
  end;
end;

Картинка с другого сайта.
13 мар 19, 19:57    [21831776]     Ответить | Цитировать Сообщить модератору
 Re: speedbutton glyph картинка появляется не сразу  [new]
Arioch
Member

Откуда:
Сообщений: 10807
у кнопок есть три состояния

1. обычное, отжата, торчит вверх
2. включенное (Down = true), типа как радиокнопки, вжатое и завиксированное
3. нажатое прямо вот сейчас, пользователь нажалд кнопку мыши, но ещё не отпустил

И ВСЕ эти состояния (плюс 4-е, кажется, mouse-hover, но хрен с ним) предполагают разные иконки (NumGlyphs)

OnClick работает внутри последнего, 3-го состояния.
но оно в жизни кнопок весьма краткосрочное и нестандартное
вполнe возможно для него делается что-то типа

запомнить состояние
try
глубокое-нажатие
...
Do-On-Сlick
....
finally
восстановить старое состояние
end

....переключиться в состояние 1 или 2

В общем, просто часто не предназначен OnClick для переделывания самого контрола
13 мар 19, 20:10    [21831787]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить