3 Probleme, brauche Hilfe :)



  • Hi Leute,
    ich bin dabei ein Progemm zu schreiben und bin dabei auf 3 Probleme gestossen.

    Zum einen habe ich eine RichList, wessen inhalt ich ueber Sockets verschicke. Zu diesem Zweck, lasse ich alle Strings der RichtList zu einem String zusammenschrumpfen nur jeweils mit einen bestimmten Symbol als "Abgrenzung" dazwischen.
    Wenn der Socket wieder bei einem Clienten ankommt, soll bei jedem dieser Abgrenzungszeichen wieder ein neuer String entstehen.
    Wie kann ich eien String nach einem bestimmen Zeichen, oder Zeichenkombination durchsuchen? und/Oder, bie bekomme ich die Zeichenlaenge eines Strings herraus?

    2. Moechte ich, dass User ueber das Programm Bilder hochladen koennen. Diese sollen dann zu einer Bestimmten Groesse verkleinert werden und dann gespeichert werden. Wie kann ich Bilder vom System verkleinern lassen und das dann Speichern?
    Meine Idee waehre, ueber TImage ein Bild laden und dann von TImage einen Screenshot machen und diesen Speichern, somit waehre das bild verkleinert und auch speichertechnisch kleiner, jedoch weis ich nicht, wie ich einen Screenshot automatisch machen kann und wie ich einen nur vom TImage-element machen kann.

    Bitte um schnelle hilfe.

    Danke

    LG

    L



  • zu 1. Schau Dir mal die Methoden von AnsiString genauer in der Hilfe an.
    zu 2. Scheint mir zu umständlich. Da gibt es einfachere Möglichkeiten. Entweder in der Hilfe zu TImage::Picture einlesen, oder zum Thema Bilder skalieren hier im Forum oder via Google suchen. Man wird einiges finden.

    //Edit
    z.B. in der FAQ



  • Die WinAPI bietet z.B. StretchBlt zum Strecken/Stauchen von Bildern. Weiß nicht, ob es im Builder nicht vielleicht bessere Möglichkeiten gibt.

    Übrigens, wo ist Problem Nr. 3 geblieben? 😉



  • 😉 Danke fuer eure Antworten..., ja Problem 2 und 3 habe ich zusammen geschrieben. Das 3. Bezog sich darauf eventuell einen Screen von dem Verkleinerten bild zu machen und diesen zu speichern.

    Ich werde eure IDeen mal ausprobieren. Sonst noch jemand eine Idee?



  • L schrieb:

    Zum einen habe ich eine RichList, wessen inhalt ich ueber Sockets verschicke. Zu diesem Zweck, lasse ich alle Strings der RichtList zu einem String zusammenschrumpfen nur jeweils mit einen bestimmten Symbol als "Abgrenzung" dazwischen.

    Wenn TRichList eine VCL-Komponente ist, kannst du die Streaming-Mechanismen der VCL benutzen, um das Objekt zu serialisieren.



  • Ok, danke ich versuche es.

    Nun habe ich noch ein Problemchen.
    Ich habe ueber einen Socket einen Strema verschickt, welcher ein Bild enthielt. Dieses wird auch vom Server erkannt und gespeichert.

    TStringList *DataFile = new TStringList;
    DataFile->LoadFromFile("data/files/files.sys");
    int BufferGroesse = Socket->ReceiveLength() ;
    BYTE *Buffer_BYTEp = new BYTE[BufferGroesse];
    Socket->ReceiveBuf(Buffer_BYTEp, BufferGroesse);
    EmpfangFile->WriteBuffer(Buffer_BYTEp, BufferGroesse);
    EmpfangFile->SaveToFile("data/files/"+DataFile->Strings[0]+".jpg");
    DataFile->Strings[0] = StrToInt(DataFile->Strings[0])+1;
    DataFile->SaveToFile("data/files/files.sys");
    TMemoryStream *Connect2 = new TMemoryStream;
    TStringList *DatenSend2 = new TStringList;
    //ERSTELLE DATEN
    DatenSend2->Add("file00");
    DatenSend2->Add(DataFile->Strings[0]);
    

    Nun ist das Problem, ich moechte, dass dem Clienten ein Signal schicken, Uebertragung erfolgreich. Doch das funktioniert nicht so ganz, da das Bild in mehreren Durchlaufen gespeichert wird (heist der Serversocket wird mehrmals angesprochen). Wie kann ich das realisieren, dass wenn die Uebertragung beendet ist (also das Bild komplett ist), das signal geschickt wird und DataFile->Clear() ausgefuehrt wird.

    Danke schonmal fuer eure Hilfe.


Log in to reply