webForumDet fria alternativet

Hämta bilder från en utomstående fil

.NET

13 svar · 352 visningar · startad av zlasher

Medlem sedan okt. 2001157 inlägg
Frågan#1

Hej!

Jag håller på med ett program som har ett gäng bilder i sig.
Så nu undrar jag hur jag gör för att kunna lägga in alla de bilder i en utomstående fil som man sedan länkar till...

Hur gör man det?
Det blir lite jobbigt annars...

mvh

Medlem sedan juni 20022 599 inlägg
#2

Det är lite oklart i vilken betydelse du använder ordet "länka". Om du menar "länka" som i "kompilera/länka" så kan du lägga bilderna i en resursfil som du skapar i tex MSVC. Sen kan du lägga till resursfilen i ditt VB-projekt och ladda bilderna med LoadResPicture.

En annan (och enklare) variant är att låta de enskilda bildfilerna ligga kvar på disk och ladda dem med LoadPicture vid behov.

Medlem sedan maj 2003924 inlägg
#3

eller har du bilder i picturebox och vill spara ner dom som bmp eller vad menar du.
Jag försår i alla fall inte va du menar.

Medlem sedan okt. 2001157 inlägg
#4

Okej...jag ska försöka förklara hur jag menar..

I min form_load ser det bl.a. ut så här:
En for-loop:

Set cmdNum(i).Picture = LoadPicture("d:\skola\vb\calc\" & (i + 1) & ".gif")

Så några bilder laddas in i början av programmet.
Bara för att jag innan loopen laddar in alla bilder

Load cmdNum(i)

kan jag inte ge varje bild en bild utan att använda "Set cmdNum(i).Picture".

Så problemet är att den letar efter bilder i katalogen "d:\skola\vb\calc\".
Jag kan ju ändra så den letar i samma mapp men det blir ändå inte som jag vill att det ska bli.

Jag tänkte då att man kanske kunde ha en fil där alla de bilder man vill ladda in kunde ligga i så man slapp problemet med sökväg och att man måste kopiera alla bilder man vill ha överallt...
Så det vore mkt enklare med bara exefilen och en fil till...

Går det att ordna det på nåt sätt eller måste jag strunta i inladdningen av bilderna och ge varje bild en jpg/bitmap så de finns med i programmet?

Eller kan man göra nåt bibliotek i programmet?

Tack på förhand
Samuel

Medlem sedan maj 2003924 inlägg
#5

Som jag förstår det så vill du ha en textfilsom du lagrar sökvägarna till filerna eller.

i så fall e det ganska enkelt om du ör nybörjare.

öppna textfilen med sökvägarna i en listbox

som är visible=False

sen e det bara loopa igenom listboxen och öppna dom filer som är inskrivna i listboxen.

lägg denna kod i en module

Function LoadFile(FileName As String)
Dim FileNum As String
Dim Data As String
FileNum = FreeFile
If FileName = "" Then
Exit Function
Open FileName For Binary Access Read As FileNum
Data = String(FileLen(FileName), Chr(0))
Get FileNum, , Data
Close FileNum
LoadFile = Data
End Function

Function SaveFile(FileName As String, Data As String)
Dim FileNumber As Integer
FileNum = FreeFile
Open FileName For Output As FileNumber
Print #FileNumber, Data
Close #FileNumber
End Function
Function LoadList(lst As ListBox, FileName As String)
Dim Data As String
Dim TmpArray() As String
Data = LoadFile(FileName)
TmpArray() = Split(Data, Chr(123))
For i = 0 To UBound(TmpArray) - 1
lst.AddItem TmpArray(i)
Next i
End Function
Function SaveList(lst As ListBox, FileName As String)
Dim Data As String
For i = 0 To lst.ListCount - 1
Data = Data & lst.List(i) & Chr(123)
Next i
SaveFile FileName, Data
End Function

Denna kod är för att öppna en textfil till en listbox

Medlem sedan okt. 2001157 inlägg
#6

Tack för ditt utförliga svar PsyDonia, men det var inte riktigt så jag menade..tyvärr..

Jag tänkte bara om man kunde lagra alla bildfiler i någon datafil, typ .cab eller så...och sen plocka ut bilderna från den enda filen istället för alla bilder ska följa med...förstår du/ni?

Medlem sedan okt. 20023 030 inlägg
#7

Du kan lägga filerna i en Resource-fil som ligger inbyggd i din exe-fil sedan utan en massa filer.

Starta först Resource Editorn (Add-Ins >> Add-In Manager... >> Dubbelklicka på VB 6 Resource Editor >> OK). Nu hamnar det en ny ikon längst till höger på verktygsfältet som ser ut ungefär som regedit's ikon tillsammans med en hand. Klicka på den.

För att ladda in filerna i resource-filen, klicka på Add Bitmap (ser ut som en bild av ett litet landskap), välj bild (OBS: Måste vara en BMP), voilla.

För att få in bilderna i ditt program, kör

Set cmdNum(i).Picture = LoadResPicture(<Bildens id i Resource Editorn>, vbResBitmap)
Medlem sedan maj 2003924 inlägg
#8

då förstår jag.
bästa sätt är att göra som Nexus sa.
det är helt klart bäst.

Medlem sedan okt. 2001157 inlägg
#9

Vad värre är att jag inte har någon 'VB 6 Resource Editor'.
Det enda jag har är 'Component Services Add-In for VB 5.0/6.0'
Så det var ju illa..

Medlem sedan okt. 20023 030 inlägg
#10

Det har jag också varit med om, att Resource Editorn inte visas. För att fixa det, välj File >> New Project >> VB Application Wizard >> Next >> Next >> Next >> Next >> Yes >> Finish. Nu kommer den alltid finnas med i listan fast under namnet "VB6.ResEdit" eller liknande.

Sedan kan du ju säga åt VB att starta Resource Editorn varje gång du startar VB. Den tar ju inte mycket resurser så. Efter att ha gjort ovanstående, välj Add-Ins >> Add-In Manager... >> markera VB6.ResEdit >> kryssa i Load on startup >> OK.

Medlem sedan okt. 2001157 inlägg
#11

Jag har tyvärr inga wizards heller.. Går det att få fram den på något mer sätt?

Medlem sedan okt. 20023 030 inlägg
#12

Inte vad jag vet men vilken variant av VB kör du? Learning, Professional eller Enterprise?

Medlem sedan okt. 20023 030 inlägg
#13

Det finns ett annat sätt att få till en Resource Fil som inkluderas vid kompilering.

1. Ladda ner Resource Hacker

2. Skapa en helt tom fil som heter "dittnamn.res" i samma mapp som ditt VB-projekt ligger där dittnamn är vad du vill filen ska heta.

3. Starta Resource Hacker och välj Open

4. Bläddra till mappen där res-filen ligger och öppna den. Du kan behöva ändra filtyp till "Resource files(*.res)" i öppna-rutan.

5. För att lägga till bilderna, spara alla bilder som bmp om du inte redan gjort det, klicka sedan på Action >> Add a new Resource ... >> Open file with new resource ..., bläddra till första bmp-bilden, öppna den, skriv ett id i Resource Name (OBS: Måste vara unikt för alla bilder och helst i siffror), och som Resource Language skriver du 1053 för svenska. Klicka på OK.

6. Upprepa punkt 5 för alla bilder.

7. Välj File >> Save.

8. Bläddra till din VB-projectfil (namn.vbp) och öppna denna i t.ex. anteckningar.

9. Precis över raden IconForm="Form1" eller liknande beroende på vad din form heter, skriv

ResFile32="dinfil.res"

där dinfil är namnet på res-filen.

10. Välj Arkiv >> Spara.

11. När du vill ha in bilderna i VB gör du som jag skrev i ett tidigare inlägg,

Set cmdNum(i).Picture = LoadResPicture("<bildens unika id>", vbResBitmap)
Medlem sedan okt. 2001157 inlägg
#14

Oj! Jag kunde inte drömt om ett bättre svar! :)

Helt fantastiskt!! Det fungerar ju alldeles utmärkt!!
Hur kan jag tacka dig? :)
Tack så hemskt mkt!

277 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
152 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)