Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769

Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?

27.04.2023, 14:15. Показов 1962. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почти любая программа написанная на VB6 создаёт временный файл во временной папке Windows. И это не всегда удобно. Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?

Добавлено через 9 минут
В общем я выяснил, что любая форма с иконкой создаёт TMP-файл, но если форма со стандартной иконкой то TMP-файла нет!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.04.2023, 14:15
Ответы с готовыми решениями:

Как мне использовать тексты программ компонентов в тексте своей (написанной мной) программе?
Как мне использовать тексты программ компонентов в тексте своей (написанной мной) программе? Сейчас объясню. Например, есть компонент ...

Как добавить описание файла своей программе?
Как добавить описание файла своей программе?

Создание временного файла
Добрый день, ребят! Кто-нибудь сталкивался с созданием временного файла, например из потока? Как это делается? Нужно создать временный...

43
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 14:18  [ТС]
Или если в форме полностью удалить иконку, как показано на изображении ниже, то тогда тоже TMP-файл создаваться не будет)
Миниатюры
Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?  
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 14:22  [ТС]
А то, я помню, у меня был случай, когда мои программы на VB6 вообще не запускались, когда полностью закончилось свободное место на диске C: из-за этих TMP-файлов которые не создавались... Конечно если не получается записать временный файл во временную папку на диске C: "оно" предпринимает вторую попытку записать TMP файл в каталог с запущенной программой, но если и это не получается (вдруг тоже нет места, либо вообще диск защищён от записи) то тогда программа вылетает с фатальной ошибкой. И программа не запускается вообще.
0
dive
 Аватар для I can
4963 / 4660 / 845
Регистрация: 13.04.2015
Сообщений: 9,851
27.04.2023, 14:24

Не по теме:

HackerVlad, тебе заняться больше нечем посреди недели в разгар рабочего дня? Чем тебе этот файл помешал?



Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от HackerVlad Посмотреть сообщение
закончилось свободное место на диске C
Все два мегабайта закончились? Какая жаль!

0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 14:39  [ТС]
Осталось только придумать как загружать иконку на форме вручную своим кодом, чтобы уж точно не создавались временные файлы и тогда, я думаю, проблема будет решена.

Добавлено через 12 минут
Думал поступить простым способом "по-лентяйски" решить эту проблему через присвоение Me.Icon = Image1.Picture или Picture1.Picture но как оказалось так работает хорошо только в среде IDE а в EXE e меня иконка хоть и загрузилась таким образом но стало блеклой и потеряла свои насыщенные цвета, что странно...
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 14:46  [ТС]
На первом рисунке форма запущенная в IDE VB6, на втором рисунке форма запущенная в EXE
Миниатюры
Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?   Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?  
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 14:51  [ТС]
Какие бы функции использовать для загрузки иконки на форму вручную? Может ExtractIconEx?
0
dive
 Аватар для I can
4963 / 4660 / 845
Регистрация: 13.04.2015
Сообщений: 9,851
27.04.2023, 14:52
Цитата Сообщение от HackerVlad Посмотреть сообщение
втором рисунке форма запущенная в EXE
А у меня чой-то без разницы откуда.
гружу так
Visual Basic
1
Icon = LoadPicture(App.Path & "\new.ico")
1
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 14:57  [ТС]
Цвета не теряются?

Добавлено через 1 минуту
Через LoadPicture у меня сразу цвета теряются! Даже в VB.

Code
1
Me.Icon = LoadPicture(App.Path + "\MOON05.ICO")
Добавлено через 1 минуту
Да, остаётся только использовать целую кучу API-функций, ну как обычно... Стандартный LoadPicture даже не помог...
0
dive
 Аватар для I can
4963 / 4660 / 845
Регистрация: 13.04.2015
Сообщений: 9,851
27.04.2023, 14:57
Цитата Сообщение от HackerVlad Посмотреть сообщение
Цвета не теряются?
Без разницы вообще
Миниатюры
Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?  
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 15:01  [ТС]
Может в десятке работает и нормально. У меня семёрка 64 бит.

Добавлено через 2 минуты
Аааааа это зависит от упрощённой темы
0
dive
 Аватар для I can
4963 / 4660 / 845
Регистрация: 13.04.2015
Сообщений: 9,851
27.04.2023, 15:01
Цитата Сообщение от HackerVlad Посмотреть сообщение
у меня сразу цвета теряются!
Может хреновая у тебя иконка ?
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 15:03  [ТС]
Не знаю как в десятке, но в семёрке есть такое понятие как упрощённая цветовая тема и только в ней херово картинка блекнет

Добавлено через 48 секунд
Цитата Сообщение от I can Посмотреть сообщение
Может хреновая у тебя иконка ?
Я же объяснил! Что это зависит от упрощённой цветовой темы. Но всё равно надо сделать чтобы везде одинаково хорошо работало.
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 15:08  [ТС]
Дело в том, что у меня в свойствах VB6.EXE стоит галочка Отключить композицию рабочего стола. Именно эта галочка переводит всю цветовую тему оформления окон Windows на упрощённую тему и отключает Windows Aero с целью чтобы в среде VB IDE не глючило перемещение элементов, когда натягиваешь кнопки и разные элементы на форму и перемещаешь их.
Миниатюры
Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?  
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 15:10  [ТС]
Как только я закрываю у себя VB6, тема оформления окон Windows переходит в обычную тему тогда сразу же иконка в форме становится нормальной! (но не на панеле задач там ещё остаётся старый блеклый вариант)
Миниатюры
Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?  
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 15:18  [ТС]
Я вот о чём думаю, если бы я использовал связку функций ExtractIconEx/DrawIconEx то я не могу же получить объект As IPictureDisp я могу только нарисовать с помощью DrawIconEx иконку в пикчебоксе.
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 15:39  [ТС]
Хотите прикол! У меня давно была написанная функция для загрузки картинок из байтового массива. В том числе PNG кстати, удобная вещь. Сейчас решил применить эту функцию. И что вы думаете!? Хоть и теперь иконка перестала глючить в упрощённой цветовой схеме, при загрузке формы, но зато теперь стали опять появляться TMP-файлы! пхахаха
А функция стандартная LoadPicture загружает без TMP я просто в шоке.

Visual Basic
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
Option Explicit
Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, pclsid As GUID) As Long
Private Declare Function IsEqualGUID Lib "ole32" (rguid1 As GUID, rguid2 As GUID) As Boolean
Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As CBoolean, ppstm As Any) As Long
Private Declare Function OleLoadPicture Lib "olepro32" (pStream As Any, ByVal lSize As Long, ByVal fRunmode As CBoolean, riid As GUID, ppvObj As Any) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
 
Private Enum CBoolean ' Enum members are Long data types
    CFalse = 0
    CTrue = 1
End Enum
 
Private Type GUID        ' 16 bytes (128 bits)
    dwData1 As Long      ' 4 bytes
    wData2 As Integer    ' 2 bytes
    wData3 As Integer    ' 2 bytes
    abData4(7) As Byte   ' 8 bytes, zero based
End Type
 
Private Const sIID_IPicture = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"
Private Const S_OK = 0 ' Indicates successful HRESULT
Private Const GMEM_MOVEABLE = &H2
 
Public Function PictureFromBits(abPic() As Byte) As IPicture ' Not a StdPicture!!
    Dim nLow As Long
    Dim cbMem  As Long
    Dim hMem  As Long
    Dim lpMem  As Long
    Dim IID_IPicture As GUID
    Dim istm As stdole.IUnknown ' IStream
    Dim ipic As IPicture
    
    ' Get the size of the picture's bits
    On Error GoTo Out
    nLow = LBound(abPic)
    On Error GoTo 0
    cbMem = (UBound(abPic) - nLow) + 1
    
    ' Allocate a global memory object
    hMem = GlobalAlloc(GMEM_MOVEABLE, cbMem)
    If hMem Then
        ' Lock the memory object and get a pointer to it.
        lpMem = GlobalLock(hMem)
        
        If lpMem Then
            ' Copy the picture bits to the memory pointer and unlock the handle.
            MoveMemory ByVal lpMem, abPic(nLow), cbMem
            Call GlobalUnlock(hMem)
            
            ' Create an ISteam from the pictures bits (we can explicitly free hMem
            ' below, but we'll have the call do it here...)
            If (CreateStreamOnHGlobal(hMem, CTrue, istm) = S_OK) Then
                If (CLSIDFromString(StrPtr(sIID_IPicture), IID_IPicture) = S_OK) Then
                    ' Create an IPicture from the IStream (the docs say the call does not
                    ' AddRef its last param, but it looks like the reference counts are correct..)
                    Call OleLoadPicture(ByVal ObjPtr(istm), cbMem, CFalse, IID_IPicture, PictureFromBits)
                End If   ' CLSIDFromString
            End If ' CreateStreamOnHGlobal
        End If ' lpMem
        
        Call GlobalFree(hMem)
    End If ' hMem
Out:
End Function
 
Private Sub Form_Load()
    Dim bFile() As Byte
    
    Open App.Path & "\MOON05.ICO" For Binary As 1
        ReDim bFile(LOF(1) - 1)
        Get 1, , bFile
    Close 1
    
    'Me.Icon = PictureFromBits(bFile) ' Создаёт TMP, почему?
    Me.Icon = LoadPicture(App.Path & "\MOON05.ICO") ' Не создаёт TMP
End Sub
Миниатюры
Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?  
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 18:40  [ТС]
Я просто в шоке, если честно. Кто, когда и как создаёт временные файлы и какая строчка кода, какая функция!?

Добавлено через 1 минуту
Вряд ли сама по себе функция OleLoadPicture создаёт TMP-файлы... Я не знаю что и думать...

Добавлено через 4 минуты
Я бы поступил по другому, но не знаю как просто. Может кто-нибудь знает как получить IPicture от загруженной иконки с помощью ExtractIconEx

Добавлено через 7 минут
Может с помощью функции GdipCreateBitmapFromHICON?

Добавлено через 12 минут
Меня больше всего удивило то, что когда я рисую в пикчебоксе функцией DrawIconEx через рисование в hdc то свойство Picture пикчебокса остаётся пустым, это меня просто шокировало и при этом нельзя получить IPictureDisp а значит и сохранять картинки через стандартное SavePicture

Я хотел вот что, написал код такой:

Visual Basic
1
2
ExtractIconEx App.Path & "\MOON05.ICO", 0, 0, hIcon, 1
    DrawIconEx Picture1.hdc, 0, 0, hIcon, 0, 0, 0, 0, DI_NORMAL
Загрузил иконку и нарисовал её в пикчебоксе. А потом думал по хитрому просто сделать Me.Icon = Picture1.Picture и всё

Но не тут-то было! При этом Picture1.Picture не заполняется хотя по факту картинка есть это странно.

Добавлено через 13 минут
Если бы я знал как нарисовать эту картинку в ЗАГОЛОВКЕ формы, если бы был такой hdc для иконки заголовка формы, всё было бы гораздо проще конечно...

Добавлено через 8 минут
Видите, я не знаю простой вещи, как загрузить иконку в форму с помощью API и без создания TMP

Добавлено через 1 минуту
Может надо использовать целую кучу API-функций gdiplus.dll кто знает, кто знает... Либо будет достаточно gdi32.dll... Этого я тоже не знаю...

Добавлено через 2 часа 6 минут
Я просто, честно не знал, как устанавливать иконки окнам с помощью API, поэтому и смотрел ни в ту сторону... Загуглил, поискал, нашёл кое что полезное! Теперь у меня всё получилось! Ура!!! Всего 2 строчки кода!!

Visual Basic
1
2
ExtractIconEx App.Path & "\MOON05.ICO", 0, 0, hIcon, 1
    SendMessage hwnd, WM_SETICON, ICON_BIG, ByVal hIcon
И всё! Теперь создаётся нужная иконка на форме и работает даже в упрощённой цветовой теме, а самое главное - никаких TMP!!!
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 18:46  [ТС]
А вариант с простым LoadPicture я даже не рассматриваю теперь! Так как это ужасный вариант который работает лишь наполовину. Где-то нормально иконка загрузится а где-то нет. Например в диспетчере задач и на панеле задач иконка будет блеклая...
Миниатюры
Как предотвратить обязательное создание временного файла в своей программе написанной на VB6?  
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
27.04.2023, 18:48  [ТС]
Как мы все прекрасно видим простой вроде бы код этот
Visual Basic
1
Me.Icon = LoadPicture(App.Path & "\MOON05.ICO")
но он коверкает иконку по-уродски получается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2023, 18:48
Помогаю со студенческими работами здесь

Создание временного файла
Требуется создать временный файл. Хотелось бы какими-нибудь борландовскими функциями. Есть, например, creattemp, но фактически это...

Создание временного уникального файла
Помогите пожалуйста, нужно создать временный файл с уникальным именем, я знаю что это делается с помощью tmpfile вот так: $temp =...

Открытие файла в своей программе
Здравствуйте господа! Возникла в моей голове прикольная идея. Дело такое, написал простенький шифровальщик, которые сохраняет...

Привязать расширение файла к своей программе
Пользуюсь лет 20 своей программой для проигрывания файлов в формате МИДИ. Хочу запускать по щелчку на файл. Раньше всё делалось без...

Ошибка с открытием файла в своей программе
Всем Dolche Gracias! Я столкнулся вот стакой проблемой - пытаюсь открыть файл в своей программе да пишет что неправильный синтаксис...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru