![]() |
Re: routine aendern(speichern in listbox>speichern in has
das problem ist, dass du dem programm ja keine zeit gibts die farbänderung
auch an zu zeigen, da du ja noch in deiner routine steckt (und dein programm damit in dem mom beschäftigt ist). du kannst dem programm zeit geben diese dinge zu bearbeiten indem du einmal Application.ProcessMessages; aufrufst nachdem du was geändert hast (z.B. deine panel-farbe). alternativ könntest du deine ganze routine in einene thread verpacken. dann würde dein programm auch nicht mehr einfrieren. aber das is doch etwas komplexer :) (zumindest wenn man es noch nie gemacht hat) |
Re: routine aendern(speichern in listbox>speichern in has
hey jetzt wirds langsam, echt cool was ihr alles wisst :) machst du das beruflich nat oder studierst du das?? muss ja irgendwo herkommen :) man sieht ja bei mir das normales schuldelphi nicht unbedingt tiefgreifend ist :tongue:
das mit dem threading hab ich schon irgendwo gelesen, aber ich glaub das programm is im mom schon so schnell, das es nicht stoert dass es einfriert ... mein chef war zumendest sehr zufrieden :dancer2: jetzt fehlt nur noch das mit dem excel, aber das is ja im andern thema :spin: |
Re: routine aendern(speichern in listbox>speichern in has
habe zwar informatik studiert, aber delphi habe ich mir über die jahre selber beigebracht.
is ja ne super hilfe dabei, die einen schon ganz schön weit bringt. und wnen man doch mal nicht weiter kommt gibts ja genug seiten/communities wo man nachschauen/fragen kann. man muß halt nur etwas ehrgeiz haben. was willst du da denn genau machen? einfach nur 2-spalten in excel anzeigen? excel kann doch auch csv-dateien lesen. erstell doch einfach ne csv und öffne die mit delphi. |
Re: routine aendern(speichern in listbox>speichern in has
naja im grunde genommen hab ich das ja mit savetofile schon ganz gut drin, nur erstens sollen beide listboxes drin gespeichtert werden und zweitens sollen die in einer tabelle mit zwei spalten gegenueberstehen, ungefaehr so:
unused pictures ________ used pictures ___bild345.jpg __________ bild898.jpg __........ __________________ ........ (unterstriche nicht beachten :wink: ) wie ich in dem andern thread schon geschrieben hab hab ich auch schon mit variants angefangen, siehste ja auch in meinem prog. aber mir fehlen irgendwie trotzdem die funktion wie zb. excel.sheets.add ... |
Re: routine aendern(speichern in listbox>speichern in has
da hab ich noch nie was mit gemacht. also von daher kenne ich mich damit nich wirklich aus.
aber mit csv-datein könntest du doch genau das machen. halt nur ohne design. aber wenn das nicht wichtig is... |
Re: routine aendern(speichern in listbox>speichern in has
ach design is nich wichtig, is nur dazu da das ein bissel abzugleichen, ob mein prog auch alles bekommt un so!
aber was genau meinst du mit csv-dateien? gibts da ne funktion aehnlich wie savetofile?? oder muss ich da was anderes schreiben? |
Re: routine aendern(speichern in listbox>speichern in has
![]() die csv-datei mußt du halt von hand schreiben (ist aber ja nur ne text-datei). also einfach einen string zusammenbasteln und in eine datei schreiben. |
Re: routine aendern(speichern in listbox>speichern in has
hallo nochmal,
mein prog ist fast fertig, in excel speichern kann ich jetzt auch nun wollte ich gern noch etwas bezueglich der hashtables wissen: wie kann man denn data(bzw.: nil) benutzten, also in meinem fall noch einen string speichern? |
Re: routine aendern(speichern in listbox>speichern in has
so jetzt hab ich mich noch ein bisschen ueber pointer informiert und mein programm geaendert, anscheinend speichert es auch schon meinen string im data der hashtabelle(hashpicofsit), aber bei der ausgabe will es einfach nicht funktionieren :(
hier mein quelltext dazu:
Delphi-Quellcode:
procedure TForm1.BtnSearchSitClick(Sender: TObject); //zum finden der Seiten in den ordnern und der urls der bilder
var direct,filename,key:string; //in den html dummy:Pointer; page:TStringList; idx:integer; re:TRegExpr; such:Boolean; begin direct:=Edpaths.Text; hashsit:=TStringDictionary.Create; hashpicofsit:=TStringDictionary.Create; if not (EdpathS.Text='') then begin GetFilesInDirectory1(direct,'*.html',hashsit,true,true); GetFilesInDirectory1(direct,'*.htmlm',hashsit,true,false); GetFilesInDirectory1(direct,'*.jsp',hashsit,true,false); end else ShowMessage('Please, insert the directory paths first!'); LbSit.Caption:=inttostr(hashsit.TotalCount); Panel2.Color:=clGreen; Application.ProcessMessages; //routine zum suchen der Url in den htmls page:=TStringList.Create; re:=TRegExpr.Create; hashsit.First; try while hashsit.Next(key,dummy) do begin page.LoadFromFile(key); re.ModifierI:=true; re.ModifierG:=true; re.ModifierM:=false; re.ModifierS:=false; re.ModifierX:=false; re.Expression:='<img .*?src=[\\]??"([^"]*?)[\\]??"'; such:=re.Exec(page.Text); if such then repeat idx:=LastPos('/',re.match[1]); if idx > 0 then filename:=copy(re.Match[1],idx+1,length(re.Match[1])) else filename:=re.match[1]; filename:=ReplaceHex(filename); if not (filename = '') then hashpicofsit.Add(filename,@key) //hier kommt keine fehlermeldung, scheint also zu funktionieren until not re.ExecNext; end; finally page.Free; re.Free; end; LbPicsFoundInPages.Caption:=inttostr(hashpicofsit.TotalCount); Panel3.Color:=clGreen; Application.ProcessMessages; end; procedure TForm1.BtnSearchFinClick(Sender: TObject); //vergleicht gefundene bilder(aus ordner) und gefundene bilder(in htmls) var key:string; dummy1:pointer; dummy2:^string; length,voll,i:double; parts,percent:integer; begin if not ((EdpathS.Text='')or(EdpathS.Text='')) then begin BtnSearchPic.Click; Panel1.Color:=clGreen; Application.ProcessMessages; BtnSearchSit.Click; Application.ProcessMessages; length:=Panel5.Width; voll:=hashpic.TotalCount*0.05; Panel5.Width:=0; i:=0; percent:=0; Panel5.Visible:=true; parts:=round((length*5)/100); hashpic.First; if (hashpic.TotalCount>0) and (hashpicofsit.TotalCount>0) then begin Screen.Cursor:=crHourGlass ; try while hashpic.Next(key,dummy1) do begin hashpicofsit.First; BtnSearchFin.Caption:='SEARCHING ...' ; i:=i+1; if i>=voll then begin i:=0; Panel5.Width:=Panel5.Width+parts; percent:=percent+5; Label6.Caption:=(inttostr(percent)+'%'); Application.ProcessMessages; end; if hashpicofsit.Find(key,dummy2) then //hier kommt die fehlermeldung begin LiBoUsed.ItemIndex:=LiBoUsed.Items.Add(key); LiBoUnused.ItemIndex:=LiBoUnused.Items.Add(dummy2^); //AUSGABE der data end end; finally begin Panel5.Width:=445; Label6.Caption:='100 %'; Label5.Visible:=true; BtnSearchFin.Caption:='Search for unused pictures'; screen.cursor:=crdefault; end; end; end else ShowMessage('In the folders or in the pages are no pictures been found'); end else ShowMessage('Please, insert the directory paths first!'); end; fehlermeldung: [error] ...: Types of actual and formal var parameters must be identical |
Re: routine aendern(speichern in listbox>speichern in has
hallo
hab deinen source nur kurz überflogen, aber versuch mal deine variable zu nem pointer zu casten, also so in etwa
Delphi-Quellcode:
edit:
if hashpicofsit.Find(key, Pointer(dummy2))
hab nun mal etwas genauer geguckt...
Delphi-Quellcode:
ich glaube nicht, dass das so funktionieren wird. du fügst einen pointer
if not (filename = '') then hashpicofsit.Add(filename,@key)
auf eine lokale variable ein, die beim verlassen der funktion nicht mehr verfügbar ist (somit auch, wenn du sie später verwenden willst). du solltest selber speicher reservieren für deinen string und dann einen pointer darauf einfügen. dieser string ist so lange verfügbar, bist du ihn selber freigibst. du könntest es in der art machen (so ausm kopf)
Delphi-Quellcode:
var
P: PChar; begin ... P := StrNew(PChar(key)); Dict.Add(filename, P); ... end; //später dann ... Dict.Find(filename, P); showmessage(StrPas(P)); //oder mache irgendetwas anderes mit dem string ... //wenn du ihn nicht mehr brauchst: StrDispose(P); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz