Autor |
Beitrag |
Unzi
      
Beiträge: 57
|
Verfasst: Sa 18.01.03 12:23
Hallo, ich habe ein kleines Problem: Ich habe eine Ressource mit Bitmaps geschrieben und weis aber nicht, wie ich Sie in meinem Programm einem Image zuweisen kann. Kann mir jemand helfen?
Danke im voraus! Unzi
|
|
Pierre
      
Beiträge: 138
Win 98se und XP prof
D5Pers und D7Prof
|
Verfasst: Sa 18.01.03 14:44
Hallo,
mein Beispiel bezieht sich auf JPGs, für BMPs mußt Du in der *.rc Datei
auch die *.bmp angeben. Und unten im Code die Zeile mit dem JPG-Objekt im Timer gegen BMP-Objekt austauschen. Dürfte für Dich
kein Problem sein. Alles andere kann glaube ich, so bleiben.
Also Du hast schon eine z.B. Bilder.rc
mit z.B. dem Inhalt
Quelltext 1: 2:
| 100 RCDATA "1.jpg" 101 RCDATA "2.jpg" |
im Notepad geschrieben,
und hast sie mit der "brc32.exe" zu "bilder.res" compiliert. Dann brauchst Du nur noch ein Image auf die Oberfläche Deines Programm ziehen und folgender Code stellt die Bilder dann dar:
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:
| unit bilder_u;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,jpeg, ExtCtrls;
type TForm1 = class(TForm) Image1: TImage; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private Procedure Anzeigen; public end;
var Form1: TForm1; i:Integer; implementation
{$R *.DFM} {$R bilder.res} Procedure TForm1.Anzeigen; var resStream: Tresourcestream; begin case i of 0: begin resStream:= TResourceStream.CreateFromID(HInstance, 100, RT_RCDATA); end; 1: begin resStream:= TResourceStream.CreateFromID(HInstance, 101, RT_RCDATA); end;
end; Image1.Picture.Graphic.LoadFromStream(ResStream); resStream.Free; end;
procedure TForm1.FormCreate(Sender: TObject); var starttime:dword; begin i:=0; StartTime := GetTickCount(); while (GetTickCount - StartTime < 10000) do Application.ProcessMessages; DoubleBuffered:= true; Timer1.Enabled:=True; Timer1.Interval:=50; end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin inc(i); Image1.Picture.Graphic:=TJPEGImage.Create; if i>1 then i:=0; anzeigen;
end;
end. |
Eleganter kann man diese Bilder Sequenzen in On.Idle einsetzen, dann bewegen sich die Bilder nur, wenn der Rechner gerade Zeit hat und dieses spart Zeit für die eigentlichen Aufgaben des Prgs. Wenn Du nur ein Bild darstellen willst, laß die case of Anweisung und den Timer raus.
Gruß Pierre
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Sa 18.01.03 15:03
Hallo,
Delphi-Quelltext 1:
| Image1.Picture.Bitmap.Handle:=LoadBitmap(hInstance, 'MeinBitmap'); |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Pierre
      
Beiträge: 138
Win 98se und XP prof
D5Pers und D7Prof
|
Verfasst: So 19.01.03 12:25
Hallo,
hatte ich die Frage falsch verstanden?
Zitat: | .. eine Ressource mit Bitmaps.. einem Image zuweisen |
also mehrere Bitmaps an einer Stelle darstellen und dies geht nur zeitlich hintereinander.
Übrigens die Textdatei mit dem Notepad muß unter einem Name mit dem
Suffix *.rc (oben im Bsp "bilder.rc") abgespeichert werden. Hatte ich nicht geschrieben.
Gruß Pierre
|
|
Unzi 
      
Beiträge: 57
|
Verfasst: So 19.01.03 20:43
Hallo,
@smiegel: Wie definiere ich denn hInstance? Unter C++ kommt die als Parameter über main(), aber Delphi ist ja anders (ach ne)  .
@pierre: Ich habe die ressource im Image-Editor von Delphi erstellt und mit dem Icon kombiniert. Ist die dann schon kompiliert? Und ist es dann etwas anderes mit der Einbindung (weil's vielleicht schon eingebunden ist?)
Gruß, Unzi
|
|
Pierre
      
Beiträge: 138
Win 98se und XP prof
D5Pers und D7Prof
|
Verfasst: So 19.01.03 21:07
Hallo,
ich habe Dich leider nicht eindeutig verstanden.
1. Du erschaffst ein Bild. *.bmp/*.jpg
2. Du bringst dieses Bild in die Ressoucendatei *.res (ist oben beschrieben)
3. Du bindest diese *.res Datei in Deinen Code ein. {$R *.res}
4. Du copilierst Deinen Code. Die *.res geht in die *.exe mit ein.
Habe ich Deine Frage beantwortet?
Gruß Pierre
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: So 19.01.03 22:36
Hallo Unzi,
hInstance muss nicht definiert werden, sondern ist bereits definiert.
Zitat: |
Die Variable hInstance gibt das Handle an, das von Windows für eine Anwendung oder Bibliothek zur Verfügung gestellt wird.
|
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Jebaz
      
Beiträge: 44
Win NT 4, Win XP, Linux
Delphi 7.0
|
Verfasst: Mo 20.01.03 15:25
Titel: BRC - Problem
Hallo Leute, hab mich schon soo gefreut, ich pröble nun schon eine weile, Bilder in einer RXRichEdit einzufügen... Den Code und die Komponente hab ich auch alles...nur noch nicht das passende *.res - File. Wenn ich eingebe blabla\brc32 blabla\smiley.res
kommt immer die Fehlermeldung
Zitat: | Fatal Error. Could not spawn Program: ILINK32.EXE |
Nun ja, ich musste feststellen, dass dieses komische Programm "ILINK32.EXE" gar nicht auf meiner Festplatte vorhanden ist, äm, ist das normal? geb ich den brc32-Befehl falsch ein? oder ist es nicht normal, dass mir diese Datei fehlt? Bitte helft mir....mein Chat währe so cool mit Emoticons 
_________________ ...and You will Know us By the Trail of Death.....
|
|
Jebaz
      
Beiträge: 44
Win NT 4, Win XP, Linux
Delphi 7.0
|
Verfasst: Mo 20.01.03 17:31
Titel: Selbst ist der Mann...
Naja, ihr habt mir nicht sonderlich geholfen....hab wiedermal alles selbst rausgefunde...also, auf mein vorheriges Problem möchte ich gar nicht eingehen, ist lächerlich...
Nun: Habt ihr auch schon mal versucht, folgendermassen euer Icon im *.RES - File zu finden?
Quelltext 1:
| dHandle := FindResource(hInstance, PChar(ASimily), RT_RCDATA); |
ASimily ist dabei der übergabeWert der procedure...und enthält den Namen des gewünschten Icons...Aber nach jedem Aufruf ist der "dHandle" = 0...hat also das Icon nicht gefunden... Ich hab den gesamnten Code von SwissDelphiCenter kopiert...dort kann man aber glücklicherweise nicht direkt dem Autor eine Frage stellen (ausserdem gefällt mir Auq.de sowieso besser) wer den gesamten Code sehen will, hier:
[url] www.swissdelphicente...de.php?id=1147[/url]
Oke und wer sich noch gar nicht mit dem befasst hat, der braucht, um eben Bilder in einer RichEdit anzuzeigen noch die RX-Componenten-Suite, die es gratis zum downloaden gibt auf [url] www.rxlib.ru[/url]
So, ich hoffe ihr Profis wisst ein bissel besser bescheid wie man mit *.res-files umgeht als ich...und werded das hoffentlich auch posten!!! danke schonmal im voraus 
_________________ ...and You will Know us By the Trail of Death.....
|
|
Jebaz
      
Beiträge: 44
Win NT 4, Win XP, Linux
Delphi 7.0
|
Verfasst: Mo 20.01.03 17:40
Titel: Selbst bin ich sicher nicht....
EI LEUTE!
sorry, echt...ihr müsst mir nicht antworten auf meine beiden Fragen, hab meinen Fehler gefunden, nachdem ich die Demo vom SwissDelphi-Center heruntergeladen hatte. Die Images im betreffenden *.RES-File sind Textdateien!!!!!
Nun, wie zum Teufel (sorry, meine Sprache, ich weiss  ) kann ich aus einem Icon eine Textdatei erstellen???
Währe echt cool, wenn mir das jemand sagen kann, echt... 
_________________ ...and You will Know us By the Trail of Death.....
|
|
derDoc
      
Beiträge: 623
Win Vista Prof
D2007 Prof
|
Verfasst: Mo 20.01.03 17:44
Poste doch mal den Text aus der .res Datei, damit ich mal weiß, was du möchtest.
Außerdem habe ich noch nie gehört, dass man Bilder als Textdatei speichert.
Und nochwas, Bilder und Sonstiges haben in .res Dateien immer einen besonderen Bezeichner, damit man sie ansprechen kann.
_________________ MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
|
|
Jebaz
      
Beiträge: 44
Win NT 4, Win XP, Linux
Delphi 7.0
|
Verfasst: Mi 22.01.03 11:57
Titel: Poscht!
OK, äm, also, die Res-Datei sieht ganz normal aus, nämlich folgendermasse:
Quelltext 1: 2:
| Smiley1 RCDATA "Smiley1.txt" Smiley2 RCDATA "Smiley2.txt" |
nur komisch ist, dass die Bilder eben eine *.txt-Endung haben
So ein Bild in Text-Format sieht folgendermassen aus:
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:
| {\rtf1\ansi\ansicpg1252\deff0\deflang2055{\fonttbl{\f0\fnil Times New Roman;}} \uc1\pard\f0\fs16{\pict\wmetafile8\picw397\pich397\picwgoal225\pichgoal225 010009000003f104000002009a0200000000050000000b0200000000050000000c028d018d0105 020000f7000003000100000000ffffff00ffff0000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000004000000340200000300000035009a020000430f 2000cc0000000f000f00000000008d018d0100000000280000000f0000000f0000000100080000 000000f0000000c40e0000c40e0000000100000001000000000000ffffff0000ffff0000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010100 000000000101010101000101010000020202020200000101010001010002020202020202020200 010100010002020200000000000202020001000100020200020202020200020200010000020200 020202020202020002020000000202020202020202020202020200000002020202020202020202 020202000000020202020202020202020202020000000202020000020202000002020200000100 020200000202020000020200010001000202020202020202020202000100010100020202020202 020202000101000101010000020202020200000101010001010101010000000000010101010100 2d000000f7000003140000000000800000000080000080800000000080008000800000808000c0 c0c000c0dcc000a6caf000fffbf000a0a0a40080808000ff00000000ff0000ffff00000000ff00 ff00ff0000ffff00ffffff00040000003402010004000000f0010000030000000000 }} |
nimmt mich wunder, ob jemand schomal auf solche Bilder gestossen ist, bzw. wo es einen Converter gibt, währe noch toll... 
_________________ ...and You will Know us By the Trail of Death.....
|
|
Jebaz
      
Beiträge: 44
Win NT 4, Win XP, Linux
Delphi 7.0
|
Verfasst: Mi 16.07.03 10:53
Titel: wow geschafft
hallo leute, also ich hab jez endlich die antwort auf meine wohl unlösbare frage (hab bis heute keine antwort von euch gekriegt) gefunden
aaalso, mein problem wahr ja dass die bilder als text vorlagen...nun, das ist das rich-text-format
alle bilder die in eine rich-edit eingefügt werden sollen, müssen als rich-text-format eingefügt werden, es ist wohl eine art hexadezimale farb-beschreibung für jeden einzelnen pixel....einen converter, um bilder ins rich-text-format zu zwingen hab ich bis heute nicht gefunden, dafür aber eine unit, die alles vereint....da gibt es zum beispiel eine function, der man ein bmp zuweist und dann der rich-text zurückkommt  voll cool nicht? also mein chat funktioniert jetzt wunderbar mit msn-ähnlichen emoticons und so
ich begreif zwar den code nicht der diese function hat, aber ich poste sie mal, schliesslich hatte ich fast ein jahr nach der lösung gesucht....
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:
| function BitmapToRTF(pict: TBitmap): string; var bi, bb, rtf: string; bis, bbs: Cardinal; achar: ShortString; hexpict: string; I: Integer; begin GetDIBSizes(pict.Handle, bis, bbs); SetLength(bi, bis); SetLength(bb, bbs); GetDIB(pict.Handle, pict.Palette, PChar(bi)^, PChar(bb)^); rtf := '{\rtf1 {\pict\dibitmap '; SetLength(hexpict, (Length(bb) + Length(bi)) * 2); I := 2; for bis := 1 to Length(bi) do begin achar := Format('%x', [Integer(bi[bis])]); if Length(achar) = 1 then achar := '0' + achar; hexpict[I - 1] := achar[1]; hexpict[I] := achar[2]; Inc(I, 2); end; for bbs := 1 to Length(bb) do begin achar := Format('%x', [Integer(bb[bbs])]); if Length(achar) = 1 then achar := '0' + achar; hexpict[I - 1] := achar[1]; hexpict[I] := achar[2]; Inc(I, 2); end; rtf := rtf + hexpict + ' }}'; Result := rtf; end; |
wenn jemand an der ganzen unit interessiert ist, postet nochmals oder schickt mir eine e-mail....ich glaube dieses forum unterstüzt keine attachments so wies aussieht? auf jeden fall kann man dann mit ein paar befehlen mehr, ganz einfach sein bild in die rich-edit einfügen, wobei aufgepasst, das funktioniert nicht mit der rich-edit von delphi...die ist zu alt...ihr braucht dafür eine neuere, zum beispiel die der RX Komponenten oder noch besser, die der JEDI Komponenten sourceforge.net/projects/jvcl/
also viel spass mit kuulen emoticon chats oder sonstigen applikationen mit bildern im richedit  [/code]
_________________ ...and You will Know us By the Trail of Death.....
|
|
Stevie
      
Beiträge: 85
Windows 7
Delphi XE Professional
|
Verfasst: Mo 21.07.03 13:57
Hi, ich hab auch gerade ein Prob mit dem Einfügen von Bitmaps in da RxRichEdit. Ich hab auch die BitmapToRtf-Function benutzt. Allerdings hab ich eine ImageList erstellt, wo meine ganzen Smilies drinstecken. Allerdings hab ich das Problem, dass, der Rtf-Code, der durch diese Function erstellt wird, anstelle des Bitmaps in der Anzeige erscheint.
|
|
Jebaz
      
Beiträge: 44
Win NT 4, Win XP, Linux
Delphi 7.0
|
Verfasst: Mi 23.07.03 18:30
Titel: Mhmmmm
Hallo Stevie,
also so ein Problem hatte ich jez noch nie. Ich verwende aber eben die JvxRichEdit der Jedi-Komponenten-Suite (Link dazu in meinem letzen Beitrag hier). Aber die RxRichEdit der RX-Library kenne ich ebenfalls sehr gut und auch bei der sollte das Funktionieren. Das mit der ImageList tut nichts zur Sache, ich mach das auch so in meinem Chat. Aber ich mach mal ein Beispiel, wie mein Code ausschaut:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var SS: TStringStream; BMP: TBitmap; begin BMP := TBitmap.Create; ImageList.GetBitmap(1,BMP);
SS := TStringStream.Create(BitmapToRTF(BMP)); try PutRTFSelection(RichEdit, SS); finally SS.Free; end; |
Die Function BitmapToRTF kennst du ja..und die andere Prozedur PutRTFSelection die solltest du auch haben, wenn nicht, schreib mir doch ein Mail, dann kann ich dir die ganze Unit schicken...denn die Prozedur PutRTFSelection ruft noch einen Haufen anderer Prozeduren auf..
Viel Glück
Ach ja und noch was, du wirst dich fragen wieso ich die RichEdit der Jedi-Komponenten benutze..? Ganz einfach, die Entwicklung der RX-Komponenten wurde eingestellt, und irgend ein cooles Team führt die ganze Library jetzt weiter, unter dem Namen Jv- oder JEDI- Components. Spätestens wenn ihr auf Delphi 7 umsattelt, werded ihr feststellen, dass die RX Komponenten sich nicht mehr installieren lassen. Da bringen dann die JEDI-Kompos abhilfe..und ausserdem cool, in den JEDI-Komponenten findet man inzwischen etwa doppelt soviel cooles Zeugs wie in den RX-Kompos  es lohnt sich die herunterzuladen, und sie sind immer noch gratis  solche Komponenten Suites sollte es öfters geben... 
_________________ ...and You will Know us By the Trail of Death.....
|
|
Neidhard von Reuental
      
Beiträge: 268
XP
BDS 2006 Prof
|
Verfasst: Di 14.09.04 18:32
Hab mir den Source vom ersten Posting genommen und ihn in eine DLL eingebaut. Das sieht nun wie folgt aus:
Quelltext 1: 2: 3:
| jpg:=TResourceStream.Create(HInstance,'SEARCH',RT_RCDATA); Image1.Picture.Graphic.LoadFromStream(jpg); jpg.Free; |
Leider gibts beim Ausführen eine Zugriffsverlezung (Lesen von Adresse 00000000).
Ich versteh nur nicht warum, hab schon geprüft ob das JPG auch im JPG-Stream drin ist (mit jpg.SavetoFile) und das ist in Ordnung. also geh ich mal davon aus das die Anweisung
"Image1.Picture.Graphic.LoadFromStream(jpg);" Probleme macht.
Hat einer eine Idee oder einen Tip wie ich das Problem beheben kann oder wo mein Fehler steckt?
cu
Neidhard
|
|
JayK
      
Beiträge: 1013
|
Verfasst: Fr 25.03.05 12:42
|
|
|