Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 878

/ вопрос решён /

Здравствуйте, эксперты!
Делаю форму, компоненты которой пропорционально изменяются с изменением её размера. При этом изображение компонентах также претерпевает трансформации. В ходе экспериментов не смог побороть казус связанный со SpeedButton. Первоночально форма выглядит так:
Было


При изменении размера формы по горизонтали на определенном размере рисунок обрубается справа, а остаток прыгает на середину кнопки.
Стало


И в таком состоянии он остаётся до тех пор пока не достигнет какой-то неопределённой мною пропорции.

ЗЫ: Для тех кто хочет повторить эксперимент: Форму изменять плавно чтобы не проскочить глючный размер.

Приложение:
  1. Unit1.pas:
  2.  
  3. unit Unit1;
  4.  
  5. interface
  6.  
  7. uses
  8. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  9. Dialogs, ImgList, Buttons;
  10.  
  11. type
  12. TForm1 = class(TForm)
  13. SpeedButton1: TSpeedButton;
  14. ImageList1: TImageList;
  15. procedure FormCreate(Sender: TObject);
  16. procedure FormResize(Sender: TObject);
  17. private
  18. { Private declarations }
  19. StartRect: TRect;
  20. procedure UpdateButtonGlyph;
  21. public
  22. { Public declarations }
  23. end;
  24.  
  25. var
  26. Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. const
  31. str = 'Test!';
  32.  
  33. {$R *.dfm}
  34.  
  35. procedure TForm1.FormCreate(Sender: TObject);
  36. begin
  37. StartRect := SpeedButton1.BoundsRect;
  38. end;
  39.  
  40. procedure TForm1.UpdateButtonGlyph;
  41. Var BitMap: TBitMap;
  42. begin
  43. BitMap := TBitMap.Create;
  44. try
  45. BitMap.Width := SpeedButton1.Width-4;
  46. BitMap.Height := SpeedButton1.Height-4;
  47. BitMap.TransparentColor := clFuchsia;
  48. BitMap.Canvas.Brush.Color := clYellow;
  49. BitMap.Canvas.FillRect(Rect(0, 0, BitMap.Width, BitMap.Height));
  50. ImageList1.Draw(BitMap.Canvas, (BitMap.Width - ImageList1.Width) div 2,
  51. (BitMap.Height - ImageList1.Height) div 2, 0);
  52. BitMap.Canvas.TextOut((BitMap.Width - BitMap.Canvas.TextWidth(str)) div 2,0, str);
  53. BitMap.Canvas.TextOut((BitMap.Width - BitMap.Canvas.TextWidth(str)) div 2,
  54. BitMap.Height - BitMap.Canvas.TextHeight(str), str);
  55. SpeedButton1.Glyph := BitMap;
  56. finally
  57. BitMap.Free;
  58. end;
  59. end;
  60.  
  61. procedure TForm1.FormResize(Sender: TObject);
  62. var dX, dY: integer;
  63. begin
  64. dX := Width - Constraints.MinWidth;
  65. dY := Height - Constraints.MinHeight;
  66. SpeedButton1.SetBounds(StartRect.Left + dX div 2, StartRect.Top + dY div 2,
  67. Round((StartRect.Right - StartRect.Left) * Width / Constraints.MinWidth),
  68. Round((StartRect.Bottom - StartRect.Top) * Height / Constraints.MinHeight));
  69. UpdateButtonGlyph;
  70. end;
  71.  
  72. end.
  73.  
  74. Unit1.dfm:
  75.  
  76. object Form1: TForm1
  77. Left = 384
  78. Top = 252
  79. Width = 318
  80. Height = 176
  81. Caption = 'Form1'
  82. Color = clBtnFace
  83. Constraints.MinHeight = 176
  84. Constraints.MinWidth = 318
  85. Font.Charset = DEFAULT_CHARSET
  86. Font.Color = clWindowText
  87. Font.Height = -11
  88. Font.Name = 'MS Sans Serif'
  89. Font.Style = []
  90. OldCreateOrder = False
  91. OnCreate = FormCreate
  92. OnResize = FormResize
  93. PixelsPerInch = 96
  94. TextHeight = 13
  95. object SpeedButton1: TSpeedButton
  96. Left = 248
  97. Top = 88
  98. Width = 49
  99. Height = 41
  100. end
  101. object ImageList1: TImageList
  102. Height = 22
  103. Width = 42
  104. Left = 272
  105. Top = 24
  106. Bitmap = {
  107. 494C01010100040004002A001600FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
  108. 0000000000003600000028000000A8000000160000000100200000000000C039
  109. 0000000000000000000000000000000000000000000000000000000000000000
  110. 0000000000000000000000000000000000000000000000000000000000000000
  111. 0000000000000000000000000000000000000000000000000000000000000000
  112. 0000000000000000000000000000000000000000000000000000000000000000
  113. 0000000000000000000000000000000000000000000000000000000000000000
  114. 0000000000000000000000000000000000000000000000000000000000000000
  115. 0000000000000000000000000000000000000000000000000000000000000000
  116. 0000000000000000000000000000000000000000000000000000000000000000
  117. 0000000000000000000000000000000000000000000000000000000000000000
  118. 0000000000000000000000000000000000000000000000000000000000000000
  119. 0000000000000000000000000000000000000000000000000000000000000000
  120. 0000000000000000000000000000000000000000000000000000000000000000
  121. 0000000000000000000000000000000000000000000000000000000000000000
  122. 0000000000000000000000000000000000000000000000000000000000000000
  123. 0000000000000000000000000000000000000000000000000000000000000000
  124. 0000000000000000000000000000000000000000000000000000000000000000
  125. 0000000000000000000000000000000000000000000000000000000000000000
  126. 0000000000000000000000000000000000000000000000000000000000000000
  127. 0000000000000000000000000000000000000000000000000000000000000000
  128. 0000000000000000000000000000000000000000000000000000000000000000
  129. 0000000000000000000000000000000000000000000000000000000000000000
  130. 0000000000000000000000000000000000000000000000000000808080008080
  131. 8000808080008080800080808000808080008080800080808000808080008080
  132. 8000808080008080800080808000808080008080800080808000808080008080
  133. 8000808080008080800080808000808080008080800080808000808080008080
  134. 8000808080008080800080808000808080008080800080808000808080008080
  135. 8000808080008080800080808000808080008080800000000000000000000000
  136. 0000000000000000000000000000000000000000000000000000000000000000
  137. 0000000000000000000000000000000000000000000000000000000000000000
  138. 0000000000000000000000000000000000000000000000000000000000000000
  139. 0000000000000000000000000000000000000000000000000000000000000000
  140. 0000000000000000000000000000000000000000000000000000000000000000
  141. 0000000000000000000000000000000000000000000000000000000000000000
  142. 0000000000000000000000000000000000000000000000000000000000000000
  143. 0000000000000000000000000000000000000000000000000000000000000000
  144. 0000000000000000000000000000000000000000000000000000000000000000
  145. 0000000000000000000000000000000000000000000000000000000000000000
  146. 0000000000000000000000000000000000000000000000000000000000000000
  147. 0000000000000000000000000000000000000000000000000000000000000000
  148. 0000000000000000000000000000000000000000000000000000000000000000
  149. 0000000000000000000000000000000000000000000000000000000000000000
  150. 0000000000000000000000000000000000000000000000000000000000000000
  151. 0000000000000000000000000000000000000000000080FF800080FF800080FF
  152. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  153. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  154. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  155. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  156. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  157. 0000000000000000000000000000000000000000000000000000000000000000
  158. 0000000000000000000000000000000000000000000000000000000000000000
  159. 0000000000000000000000000000000000000000000000000000000000000000
  160. 0000000000000000000000000000000000000000000000000000000000000000
  161. 0000000000000000000000000000000000000000000000000000000000000000
  162. 0000000000000000000000000000000000000000000000000000000000000000
  163. 0000000000000000000000000000000000000000000000000000000000000000
  164. 0000000000000000000000000000000000000000000000000000000000000000
  165. 0000000000000000000000000000000000000000000000000000000000000000
  166. 0000000000000000000000000000000000000000000000000000000000000000
  167. 0000000000000000000000000000000000000000000000000000000000000000
  168. 0000000000000000000000000000000000000000000000000000000000000000
  169. 0000000000000000000000000000000000000000000000000000000000000000
  170. 0000000000000000000000000000000000000000000000000000000000000000
  171. 0000000000000000000000000000000000000000000000000000000000000000
  172. 0000000000000000000000000000000000000000000080FF80000000000080FF
  173. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  174. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  175. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  176. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  177. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  178. 0000000000000000000000000000000000000000000000000000000000000000
  179. 0000000000000000000000000000000000000000000000000000000000000000
  180. 0000000000000000000000000000000000000000000000000000000000000000
  181. 0000000000000000000000000000000000000000000000000000000000000000
  182. 0000000000000000000000000000000000000000000000000000000000000000
  183. 0000000000000000000000000000000000000000000000000000000000000000
  184. 0000000000000000000000000000000000000000000000000000000000000000
  185. 0000000000000000000000000000000000000000000000000000000000000000
  186. 0000000000000000000000000000000000000000000000000000000000000000
  187. 0000000000000000000000000000000000000000000000000000000000000000
  188. 0000000000000000000000000000000000000000000000000000000000000000
  189. 0000000000000000000000000000000000000000000000000000000000000000
  190. 0000000000000000000000000000000000000000000000000000000000000000
  191. 0000000000000000000000000000000000000000000000000000000000000000
  192. 0000000000000000000000000000000000000000000000000000000000000000
  193. 0000000000000000000000000000000000000000000080FF80000000000080FF
  194. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  195. 800080FF8000BD4B0000BD4B0000BD4B0000BD4B0000BD4B0000BD4B0000BD4B
  196. 0000BD4B0000BD4B0000BD4B0000BD4B0000BD4B0000BD4B0000BD4B0000BD4B
  197. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  198. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  199. 0000000000000000000000000000000000000000000000000000000000000000
  200. 0000000000000000000000000000000000000000000000000000000000000000
  201. 0000000000000000000000000000000000000000000000000000000000000000
  202. 0000000000000000000000000000000000000000000000000000000000000000
  203. 0000000000000000000000000000000000000000000000000000000000000000
  204. 0000000000000000000000000000000000000000000000000000000000000000
  205. 0000000000000000000000000000000000000000000000000000000000000000
  206. 0000000000000000000000000000000000000000000000000000000000000000
  207. 0000000000000000000000000000000000000000000000000000000000000000
  208. 0000000000000000000000000000000000000000000000000000000000000000
  209. 0000000000000000000000000000000000000000000000000000000000000000
  210. 0000000000000000000000000000000000000000000000000000000000000000
  211. 0000000000000000000000000000000000000000000000000000000000000000
  212. 0000000000000000000000000000000000000000000000000000000000000000
  213. 0000000000000000000000000000000000000000000000000000000000000000
  214. 0000000000000000000000000000000000000000000080FF80000000000080FF
  215. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  216. 800080FF8000BD4B000000000000FFFAF400FFEBD900ADA499009A979000ADBC
  217. BA00BDBAAB00FFDDBF00FFDAB700FFD5AD00FFD0A500FFCE9E00FFC69200BD4B
  218. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  219. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  220. 0000000000000000000000000000000000000000000000000000000000000000
  221. 0000000000000000000000000000000000000000000000000000000000000000
  222. 0000000000000000000000000000000000000000000000000000000000000000
  223. 0000000000000000000000000000000000000000000000000000000000000000
  224. 0000000000000000000000000000000000000000000000000000000000000000
  225. 0000000000000000000000000000000000000000000000000000000000000000
  226. 0000000000000000000000000000000000000000000000000000000000000000
  227. 0000000000000000000000000000000000000000000000000000000000000000
  228. 0000000000000000000000000000000000000000000000000000000000000000
  229. 0000000000000000000000000000000000000000000000000000000000000000
  230. 0000000000000000000000000000000000000000000000000000000000000000
  231. 0000000000000000000000000000000000000000000000000000000000000000
  232. 0000000000000000000000000000000000000000000000000000000000000000
  233. 0000000000000000000000000000000000000000000000000000000000000000
  234. 0000000000000000000000000000000000000000000000000000000000000000
  235. 0000000000000000000000000000000000000000000080FF80000000000080FF
  236. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  237. 800080FF8000BD4B00000000000000000000FFFAF400FFFAF400164D6A003B99
  238. BA00BA631A00D57A2D00DE904B00FBD0A700FFD5AD00FFD0A500FFCE9E00BD4B
  239. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  240. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  241. 0000000000000000000000000000000000000000000000000000000000000000
  242. 0000000000000000000000000000000000000000000000000000000000000000
  243. 0000000000000000000000000000000000000000000000000000000000000000
  244. 0000000000000000000000000000000000000000000000000000000000000000
  245. 0000000000000000000000000000000000000000000000000000000000000000
  246. 0000000000000000000000000000000000000000000000000000000000000000
  247. 0000000000000000000000000000000000000000000000000000000000000000
  248. 0000000000000000000000000000000000000000000000000000000000000000
  249. 0000000000000000000000000000000000000000000000000000000000000000
  250. 0000000000000000000000000000000000000000000000000000000000000000
  251. 0000000000000000000000000000000000000000000000000000000000000000
  252. 0000000000000000000000000000000000000000000000000000000000000000
  253. 0000000000000000000000000000000000000000000000000000000000000000
  254. 0000000000000000000000000000000000000000000000000000000000000000
  255. 0000000000000000000000000000000000000000000000000000000000000000
  256. 0000000000000000000000000000000000000000000080FF80000000000080FF
  257. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  258. 800080FF8000BD4B0000F7F7F7009F9F9F009F9F9F009F9D9A008C9295003655
  259. 5800E6AC7600FFE2C700F7C29200D9803500D9833A00EEB07600FFD0A500BD4B
  260. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  261. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  262. 0000000000000000000000000000000000000000000000000000000000000000
  263. 0000000000000000000000000000000000000000000000000000000000000000
  264. 0000000000000000000000000000000000000000000000000000000000000000
  265. 0000000000000000000000000000000000000000000000000000000000000000
  266. 0000000000000000000000000000000000000000000000000000000000000000
  267. 0000000000000000000000000000000000000000000000000000000000000000
  268. 0000000000000000000000000000000000000000000000000000000000000000
  269. 0000000000000000000000000000000000000000000000000000000000000000
  270. 0000000000000000000000000000000000000000000000000000000000000000
  271. 0000000000000000000000000000000000000000000000000000000000000000
  272. 0000000000000000000000000000000000000000000000000000000000000000
  273. 0000000000000000000000000000000000000000000000000000000000000000
  274. 0000000000000000000000000000000000000000000000000000000000000000
  275. 0000000000000000000000000000000000000000000000000000000000000000
  276. 0000000000000000000000000000000000000000000000000000000000000000
  277. 0000000000000000000000000000000000000000000080FF80000000000080FF
  278. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  279. 800080FF8000BD4B0000F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7
  280. F700E6AD7900D17A3000E6AC7800FFE6CE00FBCEA3007E66500075706C00977D
  281. 8E0080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  282. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  283. 0000000000000000000000000000000000000000000000000000000000000000
  284. 0000000000000000000000000000000000000000000000000000000000000000
  285. 0000000000000000000000000000000000000000000000000000000000000000
  286. 0000000000000000000000000000000000000000000000000000000000000000
  287. 0000000000000000000000000000000000000000000000000000000000000000
  288. 0000000000000000000000000000000000000000000000000000000000000000
  289. 0000000000000000000000000000000000000000000000000000000000000000
  290. 0000000000000000000000000000000000000000000000000000000000000000
  291. 0000000000000000000000000000000000000000000000000000000000000000
  292. 0000000000000000000000000000000000000000000000000000000000000000
  293. 0000000000000000000000000000000000000000000000000000000000000000
  294. 0000000000000000000000000000000000000000000000000000000000000000
  295. 0000000000000000000000000000000000000000000000000000000000000000
  296. 0000000000000000000000000000000000000000000000000000000000000000
  297. 0000000000000000000000000000000000000000000000000000000000000000
  298. 0000000000000000000000000000000000000000000080FF80000000000080FF
  299. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  300. 800080FF8000BD4B0000F7F7F700818181008181810081818100818181008181
  301. 8100818181008181810090735800B66B2D00B6835600AAAAAA005050B0000821
  302. AC00090B810080FF800080FF800080FF800080FF800080FF800080FF800080FF
  303. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  304. 0000000000000000000000000000000000000000000000000000000000000000
  305. 0000000000000000000000000000000000000000000000000000000000000000
  306. 0000000000000000000000000000000000000000000000000000000000000000
  307. 0000000000000000000000000000000000000000000000000000000000000000
  308. 0000000000000000000000000000000000000000000000000000000000000000
  309. 0000000000000000000000000000000000000000000000000000000000000000
  310. 0000000000000000000000000000000000000000000000000000000000000000
  311. 0000000000000000000000000000000000000000000000000000000000000000
  312. 0000000000000000000000000000000000000000000000000000000000000000
  313. 0000000000000000000000000000000000000000000000000000000000000000
  314. 0000000000000000000000000000000000000000000000000000000000000000
  315. 0000000000000000000000000000000000000000000000000000000000000000
  316. 0000000000000000000000000000000000000000000000000000000000000000
  317. 0000000000000000000000000000000000000000000000000000000000000000
  318. 0000000000000000000000000000000000000000000000000000000000000000
  319. 0000000000000000000000000000000000000000000080FF80000000000080FF
  320. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  321. 800080FF8000BD4B0000F7F7F700EEEEEE00EEEEEE00EEEEEE00EEEEEE00EEEE
  322. EE00EEEEEE00EEEEEE00EEEEEE00FFF2E500B1937700696969001D217B00114A
  323. D100020A920080FF800080FF800080FF800080FF800080FF800080FF800080FF
  324. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  325. 0000000000000000000000000000000000000000000000000000000000000000
  326. 0000000000000000000000000000000000000000000000000000000000000000
  327. 0000000000000000000000000000000000000000000000000000000000000000
  328. 0000000000000000000000000000000000000000000000000000000000000000
  329. 0000000000000000000000000000000000000000000000000000000000000000
  330. 0000000000000000000000000000000000000000000000000000000000000000
  331. 0000000000000000000000000000000000000000000000000000000000000000
  332. 0000000000000000000000000000000000000000000000000000000000000000
  333. 0000000000000000000000000000000000000000000000000000000000000000
  334. 0000000000000000000000000000000000000000000000000000000000000000
  335. 0000000000000000000000000000000000000000000000000000000000000000
  336. 0000000000000000000000000000000000000000000000000000000000000000
  337. 0000000000000000000000000000000000000000000000000000000000000000
  338. 0000000000000000000000000000000000000000000000000000000000000000
  339. 0000000000000000000000000000000000000000000000000000000000000000
  340. 0000000000000000000000000000000000000000000080FF80000000000080FF
  341. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  342. 800080FF8000BD4B0000F7F7F7009F9F9F009F9F9F009F9F9F009F9F9F009F9F
  343. 9F009F9F9F009F9F9F009F9F9F009F9F9F009F9F9F009F9F9F00FFE2C6008172
  344. A40080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  345. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  346. 0000000000000000000000000000000000000000000000000000000000000000
  347. 0000000000000000000000000000000000000000000000000000000000000000
  348. 0000000000000000000000000000000000000000000000000000000000000000
  349. 0000000000000000000000000000000000000000000000000000000000000000
  350. 0000000000000000000000000000000000000000000000000000000000000000
  351. 0000000000000000000000000000000000000000000000000000000000000000
  352. 0000000000000000000000000000000000000000000000000000000000000000
  353. 0000000000000000000000000000000000000000000000000000000000000000
  354. 0000000000000000000000000000000000000000000000000000000000000000
  355. 0000000000000000000000000000000000000000000000000000000000000000
  356. 0000000000000000000000000000000000000000000000000000000000000000
  357. 0000000000000000000000000000000000000000000000000000000000000000
  358. 0000000000000000000000000000000000000000000000000000000000000000
  359. 0000000000000000000000000000000000000000000000000000000000000000
  360. 0000000000000000000000000000000000000000000000000000000000000000
  361. 0000000000000000000000000000000000000000000080FF80000000000080FF
  362. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  363. 800080FF8000BD4B0000F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7
  364. F700F7F7F700F7F7F700F7F7F700FFF6EB00FFF2E500FFEBD900FFE7D100BD4B
  365. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  366. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  367. 0000000000000000000000000000000000000000000000000000000000000000
  368. 0000000000000000000000000000000000000000000000000000000000000000
  369. 0000000000000000000000000000000000000000000000000000000000000000
  370. 0000000000000000000000000000000000000000000000000000000000000000
  371. 0000000000000000000000000000000000000000000000000000000000000000
  372. 0000000000000000000000000000000000000000000000000000000000000000
  373. 0000000000000000000000000000000000000000000000000000000000000000
  374. 0000000000000000000000000000000000000000000000000000000000000000
  375. 0000000000000000000000000000000000000000000000000000000000000000
  376. 0000000000000000000000000000000000000000000000000000000000000000
  377. 0000000000000000000000000000000000000000000000000000000000000000
  378. 0000000000000000000000000000000000000000000000000000000000000000
  379. 0000000000000000000000000000000000000000000000000000000000000000
  380. 0000000000000000000000000000000000000000000000000000000000000000
  381. 0000000000000000000000000000000000000000000000000000000000000000
  382. 0000000000000000000000000000000000000000000080FF80000000000080FF
  383. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  384. 800080FF8000BD4B0000F7F7F7009F9F9F009F9F9F009F9F9F009F9F9F009F9F
  385. 9F009F9F9F009F9F9F009F9F9F009F9F9F009F9F9F009F9F9F00FFEBD900BD4B
  386. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  387. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  388. 0000000000000000000000000000000000000000000000000000000000000000
  389. 0000000000000000000000000000000000000000000000000000000000000000
  390. 0000000000000000000000000000000000000000000000000000000000000000
  391. 0000000000000000000000000000000000000000000000000000000000000000
  392. 0000000000000000000000000000000000000000000000000000000000000000
  393. 0000000000000000000000000000000000000000000000000000000000000000
  394. 0000000000000000000000000000000000000000000000000000000000000000
  395. 0000000000000000000000000000000000000000000000000000000000000000
  396. 0000000000000000000000000000000000000000000000000000000000000000
  397. 0000000000000000000000000000000000000000000000000000000000000000
  398. 0000000000000000000000000000000000000000000000000000000000000000
  399. 0000000000000000000000000000000000000000000000000000000000000000
  400. 0000000000000000000000000000000000000000000000000000000000000000
  401. 0000000000000000000000000000000000000000000000000000000000000000
  402. 0000000000000000000000000000000000000000000000000000000000000000
  403. 0000000000000000000000000000000000000000000080FF80000000000080FF
  404. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  405. 800080FF8000BD4B0000F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7
  406. F700F7F7F700F7F7F700F7F7F700F7F7F700FFFBF700FFF2E500FFEBD900BD4B
  407. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  408. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  409. 0000000000000000000000000000000000000000000000000000000000000000
  410. 0000000000000000000000000000000000000000000000000000000000000000
  411. 0000000000000000000000000000000000000000000000000000000000000000
  412. 0000000000000000000000000000000000000000000000000000000000000000
  413. 0000000000000000000000000000000000000000000000000000000000000000
  414. 0000000000000000000000000000000000000000000000000000000000000000
  415. 0000000000000000000000000000000000000000000000000000000000000000
  416. 0000000000000000000000000000000000000000000000000000000000000000
  417. 0000000000000000000000000000000000000000000000000000000000000000
  418. 0000000000000000000000000000000000000000000000000000000000000000
  419. 0000000000000000000000000000000000000000000000000000000000000000
  420. 0000000000000000000000000000000000000000000000000000000000000000
  421. 0000000000000000000000000000000000000000000000000000000000000000
  422. 0000000000000000000000000000000000000000000000000000000000000000
  423. 0000000000000000000000000000000000000000000000000000000000000000
  424. 0000000000000000000000000000000000000000000080FF80000000000080FF
  425. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  426. 800080FF8000BD4B0000D55F0000D55F0000D55F0000D55F0000D55F0000D55F
  427. 0000D55F0000D55F0000D55F0000D55F0000D55F0000D55F0000D55F0000BD4B
  428. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  429. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  430. 0000000000000000000000000000000000000000000000000000000000000000
  431. 0000000000000000000000000000000000000000000000000000000000000000
  432. 0000000000000000000000000000000000000000000000000000000000000000
  433. 0000000000000000000000000000000000000000000000000000000000000000
  434. 0000000000000000000000000000000000000000000000000000000000000000
  435. 0000000000000000000000000000000000000000000000000000000000000000
  436. 0000000000000000000000000000000000000000000000000000000000000000
  437. 0000000000000000000000000000000000000000000000000000000000000000
  438. 0000000000000000000000000000000000000000000000000000000000000000
  439. 0000000000000000000000000000000000000000000000000000000000000000
  440. 0000000000000000000000000000000000000000000000000000000000000000
  441. 0000000000000000000000000000000000000000000000000000000000000000
  442. 0000000000000000000000000000000000000000000000000000000000000000
  443. 0000000000000000000000000000000000000000000000000000000000000000
  444. 0000000000000000000000000000000000000000000000000000000000000000
  445. 0000000000000000000000000000000000000000000080FF80000000000080FF
  446. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  447. 800080FF8000C04D0000C14E0000C14E0000C14E0000C14E0000C14E0000C14E
  448. 0000C14E0000C14E0000C14E0000C14E0000C14E0000C14E0000C14E0000C04D
  449. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  450. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  451. 0000000000000000000000000000000000000000000000000000000000000000
  452. 0000000000000000000000000000000000000000000000000000000000000000
  453. 0000000000000000000000000000000000000000000000000000000000000000
  454. 0000000000000000000000000000000000000000000000000000000000000000
  455. 0000000000000000000000000000000000000000000000000000000000000000
  456. 0000000000000000000000000000000000000000000000000000000000000000
  457. 0000000000000000000000000000000000000000000000000000000000000000
  458. 0000000000000000000000000000000000000000000000000000000000000000
  459. 0000000000000000000000000000000000000000000000000000000000000000
  460. 0000000000000000000000000000000000000000000000000000000000000000
  461. 0000000000000000000000000000000000000000000000000000000000000000
  462. 0000000000000000000000000000000000000000000000000000000000000000
  463. 0000000000000000000000000000000000000000000000000000000000000000
  464. 0000000000000000000000000000000000000000000000000000000000000000
  465. 0000000000000000000000000000000000000000000000000000000000000000
  466. 0000000000000000000000000000000000000000000080FF80000000000080FF
  467. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  468. 800080FF8000BD4B0000C5580800C5580800C5580800C5580800C5580800C558
  469. 0800C5580800C5580800C5580800C5580800C5580800C5580800C5580800BD4B
  470. 000080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  471. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  472. 0000000000000000000000000000000000000000000000000000000000000000
  473. 0000000000000000000000000000000000000000000000000000000000000000
  474. 0000000000000000000000000000000000000000000000000000000000000000
  475. 0000000000000000000000000000000000000000000000000000000000000000
  476. 0000000000000000000000000000000000000000000000000000000000000000
  477. 0000000000000000000000000000000000000000000000000000000000000000
  478. 0000000000000000000000000000000000000000000000000000000000000000
  479. 0000000000000000000000000000000000000000000000000000000000000000
  480. 0000000000000000000000000000000000000000000000000000000000000000
  481. 0000000000000000000000000000000000000000000000000000000000000000
  482. 0000000000000000000000000000000000000000000000000000000000000000
  483. 0000000000000000000000000000000000000000000000000000000000000000
  484. 0000000000000000000000000000000000000000000000000000000000000000
  485. 0000000000000000000000000000000000000000000000000000000000000000
  486. 0000000000000000000000000000000000000000000000000000000000000000
  487. 0000000000000000000000000000000000000000000080FF80000000000080FF
  488. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  489. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  490. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  491. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  492. 800080FF800080FF800080FF800080FF80008080800000000000000000000000
  493. 0000000000000000000000000000000000000000000000000000000000000000
  494. 0000000000000000000000000000000000000000000000000000000000000000
  495. 0000000000000000000000000000000000000000000000000000000000000000
  496. 0000000000000000000000000000000000000000000000000000000000000000
  497. 0000000000000000000000000000000000000000000000000000000000000000
  498. 0000000000000000000000000000000000000000000000000000000000000000
  499. 0000000000000000000000000000000000000000000000000000000000000000
  500. 0000000000000000000000000000000000000000000000000000000000000000
  501. 0000000000000000000000000000000000000000000000000000000000000000
  502. 0000000000000000000000000000000000000000000000000000000000000000
  503. 0000000000000000000000000000000000000000000000000000000000000000
  504. 0000000000000000000000000000000000000000000000000000000000000000
  505. 0000000000000000000000000000000000000000000000000000000000000000
  506. 0000000000000000000000000000000000000000000000000000000000000000
  507. 0000000000000000000000000000000000000000000000000000000000000000
  508. 0000000000000000000000000000000000000000000080FF8000000000000000
  509. 0000000000000000000000000000000000000000000000000000000000000000
  510. 0000000000000000000000000000000000000000000000000000000000000000
  511. 0000000000000000000000000000000000000000000000000000000000000000
  512. 0000000000000000000000000000000000000000000000000000000000000000
  513. 000000000000000000000000000080FF80008080800000000000000000000000
  514. 0000000000000000000000000000000000000000000000000000000000000000
  515. 0000000000000000000000000000000000000000000000000000000000000000
  516. 0000000000000000000000000000000000000000000000000000000000000000
  517. 0000000000000000000000000000000000000000000000000000000000000000
  518. 0000000000000000000000000000000000000000000000000000000000000000
  519. 0000000000000000000000000000000000000000000000000000000000000000
  520. 0000000000000000000000000000000000000000000000000000000000000000
  521. 0000000000000000000000000000000000000000000000000000000000000000
  522. 0000000000000000000000000000000000000000000000000000000000000000
  523. 0000000000000000000000000000000000000000000000000000000000000000
  524. 0000000000000000000000000000000000000000000000000000000000000000
  525. 0000000000000000000000000000000000000000000000000000000000000000
  526. 0000000000000000000000000000000000000000000000000000000000000000
  527. 0000000000000000000000000000000000000000000000000000000000000000
  528. 0000000000000000000000000000000000000000000000000000000000000000
  529. 0000000000000000000000000000000000000000000080FF800080FF800080FF
  530. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  531. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  532. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  533. 800080FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF
  534. 800080FF800080FF800080FF800080FF80000000000000000000000000000000
  535. 0000000000000000000000000000000000000000000000000000000000000000
  536. 0000000000000000000000000000000000000000000000000000000000000000
  537. 0000000000000000000000000000000000000000000000000000000000000000
  538. 0000000000000000000000000000000000000000000000000000000000000000
  539. 0000000000000000000000000000000000000000000000000000000000000000
  540. 0000000000000000000000000000000000000000000000000000000000000000
  541. 0000000000000000000000000000000000000000000000000000000000000000
  542. 0000000000000000000000000000000000000000000000000000000000000000
  543. 0000000000000000000000000000000000000000000000000000000000000000
  544. 0000000000000000000000000000000000000000000000000000000000000000
  545. 0000000000000000000000000000000000000000000000000000000000000000
  546. 0000000000000000000000000000000000000000000000000000000000000000
  547. 0000000000000000000000000000000000000000000000000000000000000000
  548. 0000000000000000000000000000000000000000000000000000000000000000
  549. 0000000000000000000000000000000000000000000000000000000000000000
  550. 0000000000000000000000000000000000000000000000000000000000000000
  551. 0000000000000000000000000000000000000000000000000000000000000000
  552. 0000000000000000000000000000000000000000000000000000000000000000
  553. 0000000000000000000000000000000000000000000000000000000000000000
  554. 0000000000000000000000000000000000000000000000000000000000000000
  555. 0000000000000000000000000000000000000000000000000000000000000000
  556. 0000000000000000000000000000000000000000000000000000000000000000
  557. 0000000000000000000000000000000000000000000000000000000000000000
  558. 0000000000000000000000000000000000000000000000000000000000000000
  559. 0000000000000000000000000000000000000000000000000000000000000000
  560. 0000000000000000000000000000000000000000000000000000000000000000
  561. 0000000000000000000000000000000000000000000000000000000000000000
  562. 0000000000000000000000000000000000000000000000000000000000000000
  563. 0000000000000000000000000000000000000000000000000000000000000000
  564. 0000000000000000000000000000000000000000000000000000000000000000
  565. 0000000000000000000000000000000000000000000000000000000000000000
  566. 0000000000000000000000000000000000000000000000000000000000000000
  567. 0000000000000000000000000000000000000000000000000000000000000000
  568. 0000000000000000000000000000000000000000000000000000000000000000
  569. 0000000000000000000000000000000000000000000000000000000000000000
  570. 0000000000000000000000000000000000000000000000000000000000000000
  571. 000000000000000000000000000000000000424D3E000000000000003E000000
  572. 28000000A8000000160000000100010000000000100200000000000000000000
  573. 000000000000000000000000FFFFFF00FFFFFFFFFFC000000000000000000000
  574. 0000000000000000C00000000040000000000000000000000000000000000000
  575. 800000000040000000000000000000000000000000000000A000000000400000
  576. 00000000000000000000000000000000A0000000004000000000000000000000
  577. 0000000000000000A00200000040000000000000000000000000000000000000
  578. A00300000040000000000000000000000000000000000000A000000000400000
  579. 00000000000000000000000000000000A0000000004000000000000000000000
  580. 0000000000000000A00000000040000000000000000000000000000000000000
  581. A00000000040000000000000000000000000000000000000A000000000400000
  582. 00000000000000000000000000000000A0000000004000000000000000000000
  583. 0000000000000000A00000000040000000000000000000000000000000000000
  584. A00000000040000000000000000000000000000000000000A000000000400000
  585. 00000000000000000000000000000000A0000000004000000000000000000000
  586. 0000000000000000A00000000040000000000000000000000000000000000000
  587. A00000000040000000000000000000000000000000000000BFFFFFFFFE400000
  588. 000000000000000000000000000000008000000000C000000000000000000000
  589. 0000000000000000FFFFFFFFFFC0000000000000000000000000000000000000}
  590. end
  591. end


DNK Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: DNK (статус: Студент)
Вопрос отправлен: 12 марта 2010, 16:00
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, DNK!
Долго сидел, разбирался. В чём дело, до конца не понял. Если делать вывод непосредственно на канву какого-либо объекта, то всё отображается корректно. Возможно, глюк связан с тем, что Bitmap не отображается на экране и потому некоторые вещи с ним работают некорректно. Но точно не скажу, не знаю.
Если же нужно не разобраться "почему не работает", а найти решение, при котором оно работает, то можно все операции делать прямо на канве кнопки, не создавая новый объект в памяти:

procedure TForm1.UpdateButtonGlyph;
begin
  with SpeedButton1.Glyph do
  begin
    Width  := SpeedButton1.Width-4;
    Height := SpeedButton1.Height-4;
    TransparentColor   := clFuchsia;
    Canvas.Brush.Color := clYellow;
    Canvas.FillRect(Rect(0, 0, Width, Height));
    ImageList1.Draw(Canvas, (Width - ImageList1.Width) div 2,
                    (Height - ImageList1.Height) div 2, 0);
    Canvas.TextOut((Width - Canvas.TextWidth(str)) div 2, 0, str);
    Canvas.TextOut((Width - Canvas.TextWidth(str)) div 2,
                    Height - Canvas.TextHeight(str), str);
  end;
end;

Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 15 марта 2010, 11:06
Оценка за ответ: 5

Комментарий к оценке: Работает. Спасибо.

Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 15 марта 2010, 14:10; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 12 марта 2010, 19:44 [#1]:

Выложи ссылки на скриншоты, а то не видно. Вытаскивать их из исходников HTML влом.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 12 марта 2010, 20:22 [#2]:

min@y™:мне видно, не знаю, почему у тебя не так
http://savepic.org/294493.jpg:
http://savepic.org/294493.jpg

http://savepic.org/272989.jpg:
http://savepic.org/272989.jpg
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
DNK

DNK (статус: Студент), 13 марта 2010, 19:05 [#3]:

2Егор: Всё правильно только без двоеточий. :)

http://savepic.org/294493.jpg
http://savepic.org/272989.jpg
"Digital Networked Knight"
Егор

Егор (статус: 10-ый класс), 13 марта 2010, 19:24 [#4]:

Цитата (DNK):

только без двоеточий

блин! :)))
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
DNK

DNK (статус: Студент), 15 марта 2010, 07:51 [#5]:

Блин, люди!
Ну альтернативу тогда предложите что ли!
"Digital Networked Knight"
Егор

Егор (статус: 10-ый класс), 15 марта 2010, 10:39 [#6]:

а зачем так сложно?

  SpeedButton1.SetBounds(StartRect.Left + dX div 2, StartRect.Top + dY div 2,
      Round((StartRect.Right - StartRect.Left) * Width / Constraints.MinWidth),
      Round((StartRect.Bottom - StartRect.Top) * Height / Constraints.MinHeight));
не знаем про свойства Anchors?

...ImageList1.Draw(BitMap.Canvas, (BitMap.Width - ImageList1.Width) div 2,...
ImageList1 не является видимым компонентом. ширина этого компонента равна 42 независимо ни от чего. в том числе и от размера картинки
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
DNK

DNK (статус: Студент), 15 марта 2010, 12:31 [#7]:

Цитата (Егор):

не знаем про свойства Anchors?
Тогда скажи, как с их помощью сделать так, чтоб размер компонента изменялся пропорционально дельте окна, и при этом он сдвигался ровно на столько, что бы другие компоненты на него не "наезжали".

Цитата (Егор):

ImageList1 не является видимым компонентом. ширина этого компонента равна 42 независимо ни от чего. в том числе и от размера картинки
И чё?..
"Digital Networked Knight"
Вадим К

Вадим К (статус: Академик), 15 марта 2010, 12:36 [#8]:

и то, что "ImageList1.Width" бессмысленная конструкция. Нельзя брать размер у компонента, у которого ее физически нет.

А почему же все таки она есть? а это такой хитрый ход, что бы все таки можно было компонент разместить на форме редактора. Исключительно для упрощения.

И наверно надо ещё изучить свойство Align
Галочка "подтверждения прочтения" - вселенское зло.
Егор

Егор (статус: 10-ый класс), 15 марта 2010, 12:57 [#9]:

Anchors: выставляем все поля в true - тогда компонент будет изменяться пропорционально размерам формы
фактически, строки
  dX := Width - Constraints.MinWidth;
  dY := Height - Constraints.MinHeight;
  SpeedButton1.SetBounds(StartRect.Left + dX div 2, StartRect.Top + dY div 2,
      Round((StartRect.Right - StartRect.Left) * Width / Constraints.MinWidth),
      Round((StartRect.Bottom - StartRect.Top) * Height / Constraints.MinHeight));
делает как раз то, что можно было бы не делать, если установит Anchors так, как я написал
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Вадим К

Вадим К (статус: Академик), 15 марта 2010, 13:04 [#10]:

Anchors - это не "пропорционально".
Это свойство приводит к тому, что для каждой с указанных сторон сохраняется растояние до родительского контрола.
По умолчанию выставлено только для top и left и относительно верхнего левого угла растояние будет одно и тоже всегда. если ещё выставить right в true, то при изменении размеров формы будет меняться ширина. расширили форму на 20 пикселей, компонент станет на 20 шире. А высота не будет меняться (потому что не надо в этом случае). Ну и так дальше?
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 15 марта 2010, 13:19 [#11]:

Цитата (Вадим К):

и то, что "ImageList1.Width" бессмысленная конструкция. Нельзя брать размер у компонента, у которого ее физически нет.

А почему же все таки она есть? а это такой хитрый ход, что бы все таки можно было компонент разместить на форме редактора. Исключительно для упрощения.

Да ладно! TImageList.Width и Height - это размер картинок, которые он хранит.

Имхо, в данном случае Anchors достаточно.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
DNK

DNK (статус: Студент), 15 марта 2010, 13:39 [#12]:

Цитата (Вадим К):

и то, что "ImageList1.Width" бессмысленная конструкция. Нельзя брать размер у компонента, у которого ее физически нет.


При чём тут размер компонента?

Цитата:

Specifies the width of all images within the image list.

Delphi syntax:

property Width: Integer;

C++ syntax:

__property int Width = {read=FWidth, write=SetWidth, default=16};

Description

Use the Width property to specify the width of images before any are added to the image list. The image list is cleared when this value changes.
"Digital Networked Knight"
DNK

DNK (статус: Студент), 15 марта 2010, 13:44 [#13]:

Цитата (Егор):

Anchors: выставляем все поля в true - тогда компонент будет изменяться пропорционально размерам формы
фактически, строки
Егор!
У меня для тебя упражнение: Поставь кнопки в виде таблицы 2 на 3. Выставь все поля в true и сообщи что у тебя в итоге получилось. :-)
"Digital Networked Knight"
Вадим К

Вадим К (статус: Академик), 15 марта 2010, 14:10 [#14]:

давно я с виндой в делфи не сидел. вроде там было другое свойство для размера картинок... посмотрим, посмотрим...
Галочка "подтверждения прочтения" - вселенское зло.

13 мая 2011, 09:40: Статус вопроса изменён на решённый (изменил автор вопроса — DNK)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 16 ноября 2024, 20:27
Выполнено за 0.03 сек.