Dfm reader

Soyez le premier à donner votre avis sur cette source.

Vue 8 020 fois - Téléchargée 560 fois

Description

Cette source lit une image à partir d'une source DFM ( "je pense que ça veux dire: Delphi Form File" :p) bien sure vous pouvez utiliser les pointeurs ou de ASM (pour optimiser le code) moins de variables... fait ce que vous voulez, moi personnellement j'ai pas le temps de faire ça déja j'ai fais cette source juste en break time pour un ami qui a bc chercher sur le net et rien trouvé alors je pense que ça sera utile pour bc de gens.

bon! pour les DFM je pense que le delphi enregistre tous format que soit image jpeg icon ou tous autre format d'image en bitmap.
j'explique un peut plus,
si on utilisent un Timage pour enregistrer un image par exemple ; les données de cette image sont enregistrer dans le ficher DFM (Fichier ASCII) dans le Block qui situe entre "Picture.Data = {" jusqu'au prochaine "}" sous format de chaine en Hexadécimale, et il écrit le type de format original dans les 24 premiers bites genre (075 7D..bal bla) pour l'identifier format original "TJPEG ou TBITMAP" ou cas ou vous voulez récupérer ce que vous appartiens bien sure :D!, tous format bitmap commence par 42 4D = M B c a dire format bitmap (pour tester et ouvrer une bitMap avec un éditeur Hex pour voire, d'ailleurs c le cas de tous les fichier non ASCII, alors il ne reste que de récupérer tous block de donnée entre 42 4D jusqu'au prochaine "}" et convertir le code hex en byte puis les récupérer dans un Tstream et le reste n'est pas très dure a faire, ben! pour la plupart des collègues.

Source / Exemple :


//********Notre Procedure de conversation modifier 
//********Origine http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_20438223.htm
procedure HexStr2Bmp(Astring:Ansistring);
var
BmpStream: TMemoryStream;
Bmp1: TBitmap;
i: Integer;
Mystr:string;
begin
 showmessage('Size: '+floattostr((Length(Astring)/2))+' Octs');
if Length(Astring) mod 2 <> 0 then  //**on teste si c'est une valide bitmap
  Begin              //** (if is a valide Hex Code bitmap)******
  ShowMessage('Not Even');
  Exit;
  end;
BmpStream := TMemoryStream.Create;
//******on calcule le volume de notre stream (Stream size fom length code)
BmpStream.Size := Length(Astring) div 2;

for i := 0 to (Length(Astring) div 2)-1 do
 begin
 mystr:=Copy(Astring,((i+1)*2)-1,2);
 mystr:=trim(Mystr);
 //****assigne our byte in stream (on ajout nos byte calculer au steam)
PByteArray(BmpStream.Memory)[i] := StrToInt('$'+Mystr);

 end;
 //**Revenir au debut de stream
 BmpStream.Position:=0;
//form1.edit1.text := IntToHex(PByteArray(BmpStream.Memory)[0],2);  // ça vous donne 42=debut bitmap correct car 42,4D=B M
try
Bmp1 := TBitmap.Create;
BmpStream.Position := 0;
Bmp1.LoadFromStream(BmpStream);
FDFMREADER.Image1.canvas.Draw(0,0,Bmp1);
bmp1.SaveToFile('temps1.bmp');
finally
Bmp1.Free;
BmpStream.Free;
end;

//**************************************
procedure TFDFMREADER.ReadDFM(Filenamee:string);
label 1;
Var
ReadString:TStringList;
linee,wordd:string;
I, Llength:integer;
 texte:Ansistring;
begin
//****je vai pas parler de creation car tous le monde vas le savoir un jour
ReadString:=TStringList.create;
//********************************************
ReadString.LoadFromFile(filenamee);
pb1.Max:=ReadString.Count;
i:=0;

//*****on vas chercher notre "Picture.Data = { " ou se trouve le Block de donnée de bitmap
//*****search  "Picture.Data = { " the Block of bitmap hex code

while (i < ReadString.Count-1)  do
begin
 inc(i) ;
wordd:='';
linee:=readstring[i];
linee:=trim(linee);
wordd:=copy(linee,0,7);
if lowercase(wordd)='picture' then
while  (linee <> 'end') do
begin
 inc(i);
 //**********to be freeeeeeeee*********
 application.ProcessMessages;
linee:=readstring[i];
linee:=trim(linee);
Llength:=length(linee);
//****"{" it mean the end of Block data"
if copy(linee,Llength,1)='}' then
begin
linee:=copy(linee,0,Llength-1) ;
memo1.Lines.Add(linee);
 pb1.Position:=i;
 goto 1;
end else
memo1.Lines.Add(linee);
  pb1.Position:=i;

end;

end;

1: begin
texte:='';
Edit1.Text:=copy(memo1.lines.Text,24,24);
 memo1.Lines.Text:=copy(memo1.lines.Text,25,length(memo1.Lines.Text));
//******** HEX CODE saint*****clean our result*********
 for i:=0 to memo1.Lines.Count-1 do
texte:=texte+trim(memo1.Lines.Strings[i]);
HexStr2Bmp(texte); //**********Here the Procedure************
end;
end;

Conclusion :


Conclusion tous personne désire de faire un composant pour u charger des fichier sans utiliser les ressources RES DCR de delphi directemnt dans votre Executaple pour faire des installers par exemple, c le moment de la même façon que Delphi enregistre les donnée de bitmap dans un fichier ASCII (.DFM) .

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
169
Date d'inscription
dimanche 16 février 2003
Statut
Membre
Dernière intervention
15 avril 2008

je c tous ça, et j'ai éssayé d'usé ces procedures bien plus avant mais j'ai pas réussie a utiliser car ça planté bc et puisque j'ai pas eu le temps de continué alors j'ai laissé tombé , et pour le but lire la conclusion et fais marché ton imagination il bc a faire avec et n'éssay pas de pensé a les Resources ;).
bon courage.
Messages postés
3824
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 décembre 2020
37
ah bon ... pourtant ça fait exactement la même chose que ton code (même résultat) mais la grande différence c'est que ça n'est pas limité à un seul format tu peux tout récupérer :(Icônes, Images, Images Listes et plus encore).
Messages postés
169
Date d'inscription
dimanche 16 février 2003
Statut
Membre
Dernière intervention
15 avril 2008

@cirec je connais ces procédures, mais c'été pas le but.
Messages postés
169
Date d'inscription
dimanche 16 février 2003
Statut
Membre
Dernière intervention
15 avril 2008

Pour @cirec,j'ai met le lien en Haut!alors tu veux quoi au juste???
Seriesement vous ete tous Aveugles, Lire SVP La conclusion.
//*********Conclusion**********
tous personne désire de faire un composant pour charger des fichier sans utiliser les ressources RES DCR de delphi directemnt dans votre Exécutable pour faire des installers par exemple, c le moment de la même façon que Delphi enregistre les donnée de bitmap dans un fichier ASCII (.DFM) .
//****************************************************
ce que je voulais dire c'est : qu'on peut stocker des donnée binaire en format ASCII et les récupérer qu'on ton veux,
j'explique:
on peut converire un fichier binaire en code ASCII puis le charger dans une variable; un Widestring par exemple, comme ça le fichier et dans votre executaple, bien sure vous allez ajouté le nom et l'extention du fichier ainsi vous pouvez crypter et compressés vos données, et quand vous avez besoin, vous récupérez votre fichier vous n'avez qu'a renversez la procedure.
c'été ça le but, Personnelement ça marche chez moi nikel, j'éssay just de compréssé mes donnée car la taille du fichier an code ASCII se double c normale, c le resultat de conversation.
personnellement quand j'ai vue tous le code de mon ami et apré que j'ai pue comprendre comment le delphi manipule les Fichier source DFM ça ma venu cette idée, chui pas bornée moi!! les Raws Scoket, Blocked no Blocked socket, AVR ARM, thread, Classe, composant, ASM ^point, checksum, GPR Protocol, TStringstream, array of byte, Ortographe, les petit code de gens ...
ça ne me dit rien tous ça,
mais quoi faire avec !! ça , peut m'occupe, j'espère que je me suis fais comprendre, il faut avoir l'esprit un peut vaste.

Et pour mon voisin @nethacker, c vrai ce que ta dit , mais pour se que tu suggérais c possible, pour le moment je ne peut le faire qu'avec RemObject c a dire exécuté un script en runtime pour me facilté la tâche et pas vraiment complètement, car il faut connaitre tous le syntaxe de fichier DFM pour evitez les surprises d'un propreité ou évènement inattendue ;), car le delphi ne copie pas batement les proprité des composant en string, c un peut plus que ça.

Finalement les Mecs c un plaisir de changé des idées avec vous,c la seul chose qui me tien a posté des sources ici ;).
Messages postés
288
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2011

C'est pas DFMreader ! c'est plutot dfm's icon reader !
ca serait bien si ta source affiche une form à partir d'un dfm ! voir même concevoir !
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.