Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/136: Рейтинг темы: голосов - 136, средняя оценка - 4.90
57 / 20 / 3
Регистрация: 29.10.2009
Сообщений: 198

Как сделать Memo прозрачным ??

23.12.2009, 20:01. Показов 29260. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ну собственно говоря бьюсь над тем чтоб Memo сделать прозрачным, видимым токлько текст должен оставаться, как это сделать ???
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2009, 20:01
Ответы с готовыми решениями:

Как сделать так, чтобы Memo появлялось поверх остальных Memo?
как сделать так чтобы memo появлялось поверх остальных memo

Как сделать прозрачным Edit?
Как сделать прозрачным Edit?

Как сделать фон у текста прозрачным?
возможно на форуме уже задавался этот вопрос,(лично я его не нашел), но прошу ответить кто знает, как сделать фон у текста прозрачным(в...

49
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
10.08.2016, 13:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от BOGG ART Посмотреть сообщение
Может скины какие-то используются
Блин! Попробовал компоненты с другим проектом - все супер есть прозрачность!!!
А что может быть? что в моей форме сделать, это получается с формой что-то? наверное удалить ее и сделать чистую?
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
10.08.2016, 13:57
гм... Ну давайте так.
1) Откройте ваш проект MyTransMemo.dpk (или как вы его назвали);
2) В мелком окошке двойной клик по строке с "TransMemo.pas" (или как вы его назвали) откроет его для редактирования;
3) Находим реализацию метода "RepaintWindow()";
4) Исправляем хотя бы как-то так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Procedure TTransMemo.RepaintWindow();
Var FDC, DC: HDC; TmpBitmap, Bitmap: HBITMAP;
Begin
If FTransparent Then
      Begin
      FPainting:=True;
      HideCaret(Handle);
      FDC:=GetDC(Handle);
      DC:=CreateCompatibleDC(FDC);
      TmpBitmap:=CreateCompatibleBitmap(FDC, Succ(ClientWidth), Succ(ClientHeight));
      Bitmap:=SelectObject(DC, TmpBitmap);
      PaintTo(DC, 0, 0);
      BitBlt(FDC, BorderRec[BorderStyle], BorderRec[BorderStyle], ClientWidth, ClientHeight, DC, 1, 1, SRCCOPY);
      SelectObject(DC, Bitmap);
      DeleteDC(DC);
      ReleaseDC(Handle, FDC);
      DeleteObject(TmpBitmap);
      ShowCaret(Handle);
      FPainting:=False;
      End;
End;
5) Сохраняем все файлы;
6) В мелком окошке нажимаем кнопку "Compile" и закрываем проект;
7) Удаляем из проблемного проекта все файлы *.dcu и *.exe;
8) Пробуем делать "Project>Build" и "Project>Compile";

Добавлено через 1 минуту
А возможно не хватает ещё одного DeleteObject()... Не соображу наспех. Но основную утечку я убрал.
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
10.08.2016, 14:13
А с Edit то же самое? Меня больше Edit интересует.

Добавлено через 1 минуту
И в чем вообще смысл этой "утечки", стоит ли ее вообще трогать?
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
10.08.2016, 14:35
Голые GetDC() без запоминания результата нельзя всюду сувати.
Delphi
1
2
3
4
5
6
7
Var FDC: HDC; // объявили переменную
...
FDC:=GetDC(Handle); // ровно один раз получили
...
// используем FDC
...
ReleaseDC(Handle, FDC); // ровно один раз удалили
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
10.08.2016, 15:55
ОК попробую так текст исправить чтобы ничего не утекало.
А с проблемой исчезновения прозрачности на компонентах TransEdit и TransMemo: думаю она не работает в тех проектах в которых был (или есть) ХРманифест. ХРманифест это такой вредный компонент, который даже после его удаления косяки в проекте оставляет. Вот походу с этими косяками и конфликт возникает
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
10.08.2016, 17:13
Да, вероятно что dll может перехватить перерисовку. Удалите из uses модуль xpman.
https://www.cyberforum.ru/post9425507.html
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
11.08.2016, 08:01
Цитата Сообщение от BOGG ART Посмотреть сообщение
модуль xpman
нет такого. Выход один начать новый проект и все туда перенести.
0
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 803
15.12.2016, 22:22
Установил TransMemo, как в нем сделать прозрачный фон на картинке ??
0
1 / 1 / 0
Регистрация: 02.10.2014
Сообщений: 53
21.08.2022, 17:30
Цитата Сообщение от Ztrel Посмотреть сообщение
Пишу, как делал сам. Я делал в Delphi 7
Кликните здесь для просмотра всего текста
1) File --> New --> Other --> Package
2) File --> New --> Other --> Component
3) В появившемся окошке
Ancestor Component --> TMemo [StdCtrls]
Class Name --> TTransMemo
Pallet Page --> (пишешь название странички, где хотел бы видеть этот компонент - абсолютно любое, какое в голову взбредет... Я например написал -- NotStandart)
Unit file name --> (здесь пишешь полное имя файла, включая путь... Нажимаешь на "..." - выбираешь удобный тебе каталог, где будет храниться файл об этом компоненте)
Search Path --> (сюда пишуться каталоги, где этот файл будет искаться... Не трогай его, если уже прописал предыдущий пункт - он уже будет указан.)
4) Нажимай "ОК"
5) Копируй следующий код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
unit TransMemo;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;
type
  TCtrl = class(TWinControl);
// Transparent Memo
  TTransMemo = class(TMemo)
  private
    FAlignText: TAlignment;
    FTransparent: Boolean;
    FPainting: Boolean;
    procedure SetAlignText(Value: TAlignment);
    procedure SetTransparent(Value: Boolean);
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
    procedure WMNCPaint (var Message: TMessage); message WM_NCPAINT;
    procedure WMEraseBkGnd(var Message: TWMEraseBkGnd); message WM_ERASEBKGND;
    procedure CNCtlColorEdit(var Message: TWMCtlColorEdit); message CN_CTLCOLOREDIT;
    procedure CNCtlColorStatic(var Message: TWMCtlColorStatic); message CN_CTLCOLORSTATIC;
    procedure CMParentColorChanged(var Message: TMessage); message CM_PARENTCOLORCHANGED;
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure WMMove(var Message: TWMMove); message WM_MOVE;
  protected
    procedure RepaintWindow;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure Change; override;
    procedure SetParent(AParent: TWinControl); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property AlignText: TAlignment read FAlignText write SetAlignText default taLeftJustify;
    property Transparent: Boolean read FTransparent write SetTransparent default false;
  end;
procedure Register;
implementation
const
 BorderRec: array[TBorderStyle] of Integer = (1, -1);
procedure Register;
begin
  RegisterComponents('NotStandart', [TTransMemo]);
end;
function GetScreenClient(Control: TControl): TPoint;
var
 p: TPoint;
begin
 p := Control.ClientOrigin;
 ScreenToClient(Control.Parent.Handle, p);
 Result := p;
end;
// Transparent Memo
constructor TTransMemo.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FAlignText := taLeftJustify;
 FTransparent := false;
 FPainting := false;
end;
destructor TTransMemo.Destroy;
begin
 inherited Destroy;
end;
procedure TTransMemo.SetAlignText(Value: TAlignment);
begin
 if FAlignText <> Value then
 begin
  FAlignText := Value;
  RecreateWnd;
  Invalidate;
 end;
end;
procedure TTransMemo.SetTransparent(Value: Boolean);
begin
 if FTransparent <> Value then
 begin
  FTransparent := Value;
  Invalidate;
 end;
end;
procedure TTransMemo.WMEraseBkGnd(var Message: TWMEraseBkGnd);
var
 DC: hDC;
 i: integer;
 p: TPoint;
begin
 if FTransparent then
 begin
  if Assigned(Parent) then
  begin
   DC := Message.DC;
   i := SaveDC(DC);
   p := GetScreenClient(self);
   p.x := -p.x;
   p.y := -p.y;
   MoveWindowOrg(DC, p.x, p.y);
   SendMessage(Parent.Handle, $0014, DC, 0);
   TCtrl(Parent).PaintControls(DC, nil);
   RestoreDC(DC, i);
  end;
 end else inherited;
end;
procedure TTransMemo.WMPaint(var Message: TWMPaint);
begin
 inherited;
 if FTransparent then
 if not FPainting then
 RepaintWindow;
end;
procedure TTransMemo.WMNCPaint(var Message: TMessage);
begin
 inherited;
end;
procedure TTransMemo.CNCtlColorEdit(var Message: TWMCtlColorEdit);
begin
 inherited;
 if FTransparent then
 SetBkMode(Message.ChildDC, 1);
end;
procedure TTransMemo.CNCtlColorStatic(var Message: TWMCtlColorStatic);
begin
 inherited;
 if FTransparent then
 SetBkMode(Message.ChildDC, 1);
end;
procedure TTransMemo.CMParentColorChanged(var Message: TMessage);
begin
 inherited;
 if FTransparent then
 Invalidate;
end;
procedure TTransMemo.WMSize(var Message: TWMSize);
begin
 inherited;
 Invalidate;
end;
procedure TTransMemo.WMMove(var Message: TWMMove);
begin
 inherited;
 Invalidate;
end;
procedure TTransMemo.RepaintWindow;
var
 DC: hDC;
 TmpBitmap, Bitmap: hBitmap;
begin
 if FTransparent then
 begin
  FPainting := true;
  HideCaret(Handle);
  DC := CreateCompatibleDC(GetDC(Handle));
  TmpBitmap := CreateCompatibleBitmap(GetDC(Handle), Succ(ClientWidth), Succ(ClientHeight));
  Bitmap := SelectObject(DC, TmpBitmap);
  PaintTo(DC, 0, 0);
  BitBlt(GetDC(Handle), BorderRec[BorderStyle], BorderRec[BorderStyle], ClientWidth, ClientHeight, DC, 1, 1, SRCCOPY);
  SelectObject(DC, Bitmap);
  DeleteDC(DC);
  ReleaseDC(Handle, GetDC(Handle));
  DeleteObject(TmpBitmap);
  ShowCaret(Handle);
  FPainting := false;
 end;
end;
procedure TTransMemo.CreateParams(var Params: TCreateParams);
const
 Alignments: array [TAlignment] of DWord = (ES_LEFT, ES_RIGHT, ES_CENTER);
begin
 inherited CreateParams(Params);
 Params.Style := Params.Style or ES_MULTILINE or Alignments[FAlignText];
end;
procedure TTransMemo.Change;
begin
 RepaintWindow;
 inherited Change;
end;
procedure TTransMemo.SetParent(AParent: TWinControl);
begin
 inherited SetParent(AParent);
end;
end.
6) File --> Save
7) File --> Save all --> (появилось окошко с сохранением пакета. Сохрание его под удобным именем, например "MyTransMemo" )
8) Project --> Compile MyTransMemo.
В появившемся окошке после того как появится Compiled нажми ОК.

Вот и все )) Удачи в программировании
Огромное спасибо! Все прекрасно работает. Делал тоже по алгоритму.

Добавлено через 1 минуту
Цитата Сообщение от Bookkc1 Посмотреть сообщение
Установил TransMemo, как в нем сделать прозрачный фон на картинке ??
В Object Inspector появится ранее отсутствующий у старого Memo параметр "Transparent". Нужно переключить его в True (по умолчанию он выключен).
0
Эксперт Pascal/Delphi
 Аватар для droider
4893 / 2826 / 867
Регистрация: 04.10.2012
Сообщений: 10,278
23.08.2022, 11:37
SlavaVlasov, я думаю участники мертвой темы, спустя 13 лет оценят Ваш пост.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.08.2022, 11:37

Как сделать фон RadioButton прозрачным
Здравствуйте! Кто знает как сделать фон RadioButton прозрачным ?

Как сделать прозрачным компонент GroupBox в Delphi 7
Как сделать прозрачным компонент GroupBox в Delphi 7? Надо сделать сам GroupBox, а не фон. Чтоы была видна картинка формы. ОЧень поможете....

PopupMenu. Как сделать белый цвет прозрачным?
Сделал PopupMenu. Добавил иконки. Как я понимаю по умолчанию белый цвет становится прозрачным. Но почему то часть из них осталось с...

Как сделать прозрачным главное меню пуск
Подскажите, пожалуйста. Как сделать прозрачность для меню пуск? Для панели задач и меню я делал так: procedure...

Memo в delphi / как сделать так чтобы при нажатии на кнопку memo появляется, при повторном нажатии исчезает
как сделать так чтобы при нажатии на кнопку текст с memo появляется, при повторном нажатии исчезает - как сделать так чтобы при нажатии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru