Jump to content

qubits

Members
  • Content Count

    105
  • Joined

  • Last visited

Posts posted by qubits


  1. Single person, two player, Thumb against thumb, Ball Basher for Robots.

    Juggle up to twelve sphere's of galactic matter in outer space.

     

    SpaceBallz

     

    Started out as a quick pong demo, but with Alexandria's grace, it turned into SpaceBallz!!

    A game in a class.

     

    I can do 12 balls for about 4 mins.

     

    It's a birthday present for Delphi.

    Sorry, I'm poor, have to take a hand made gift for now.

     

    Happy Birthday DELPHI!!

     

    ~q

    SpaceBallz.jpg

    • Like 6

  2. Nothing new, use to be Norton and McAfee, that would mess with ALL Delphi apps, haven't seen any troubles with the big ones in a while.

    It's only a few that have their patterns wrong, i wouldn't worry, anti-virus is a double edge sword, cuts both ways sometimes.

    If it does affect you, then contact the anti-virus makers and get them straight.

     

    rename your exe to .txt and then zip it up, just maybe it might get through email, but it's a big maybe, easier to drop it in some cloud storage.


  3. lol, a test.. ok, i'll stab..

     

    if the top works. then VString is in fact a point and has to be de-referenced hence the ^,

    but the bottom does not treat VAnsiString as a pointer and it fails, so maybe it's also a pointer too..

     

    make the bottom look just like the top except VAnsiString instead of VString and give it a wirl..

    note, only commenting on //works fine //not working because it all looks like one big IF to me.. 🙂

     


  4. 21 hours ago, kvk1989 said:

    here is main issue (strtoint64)

    Did you get this going?

    noticed the 64 bits too, but then your copying 10 chars into the str1, so could potentially overflow a 32 bit integer, unless maybe str1 fails on the conversion and the error is silenced somehow.

    use a local var and do the conversion before updating pb1, wrap it in a try except and catch it.


  5. 20 hours ago, kvk1989 said:

    Form7.pb1.Position := Trunc(((maxprogress - StrToInt64(str1)) / maxprogress) * 100);

    set break points here, examine Position, if all is good and you see it update while debugging, then maybe all you need is Form7.pb1.Refresh;

    a bit messy, good luck!

     


  6. not usre how you got there, this is whats in the demo, i expanded the comments

     

    procedure TMainFrm.SendString;

    var
    aHdr:tPacketHdr;
    aStr:String;
    aBytes:TBytes;
    aBuff:TBytes;
    begin
     
    aStr:='Hello from client!!';//string could be sent into procedure
     
    if Length(aStr)>0 then
    begin
    FillPacketIdent(aHdr.Ident);//fill our indent
    aHdr.Command:=CMD_STR;//tell server its a string
    aBytes:=TEncoding.ANSI.GetBytes(aStr);//encode string to array of bytes
    SetLength(aBuff,SizeOf(tPacketHdr)+Length(aBytes));//make our transmission buffer big enough for header and string
    aHdr.DataSize:=Length(aBytes);// size of string, always use length instead of size of on dynamic sizes
    Move(aHdr,aBuff[0],SizeOf(tPacketHdr));// move the header into buffer
    Move(aBytes[0],aBuff[SizeOf(tPacketHdr)],Length(aBytes));//move string into buffer just after header
    PacketClntDm.cliSock.Send(aBuff,Length(aBuff));//send it off
    SetLength(aBytes,0);
    SetLength(aBuff,0);
    end;
     
     
     
     

    end;


  7. i can also second ae's approach, especially if you wanted some automation.

    app launches, check Application.ExeName, if it's the orig, copy orig to newname, launch newname, then exit.

    now you can update orig exe as needed.

     

    Launcher app approach is typically just another application that executes the other after checking for and applying updates.


  8. If you still sending your own packets, then strings need a header too, then converted to array of bytes just like the jpeg.

    added a send/recv string to the packet client and server demo, so you can see one way to do this.

    also generalized the server a bit, changed from q of jpeg to tPacketData which is DataType then array of bytes.

    Updated server example to show simple method of determining incoming array data.

     

    i tend to treat my strings as fixed arrays of bytes and those are in larger records of data.

    don't typically just send one string.

    i'll update the demo to show how to send record structures in a few days.


  9. 21 hours ago, al17nichols said:

    create an application that can check for updates and if needed download new an update before launching.

    if it's an application, the easiest answer is in the first sentence..

    make a launcher that checks for updates then launches main app, then exits..

     

    I can also second Dave's recommendation as I've used TMS as well and it works great, no second app to maintain.

     

     

    • Like 1

  10. You're welcome, was a nice break from my robot wars.

    Which by the way, I used the demo ics packet server to test my cross platform packet client.

    Put a working demo of this up, should also compile for Berlin.

    Does the same, but pic recv is used as texture for cube which you can spin around, so it's like cooler. 🙂

    TJpegImage doesn't exist in FMX, this shows how to save a jpeg stream.

     

    Caution, did demo in my crazy 3d world, looking at the code too long may have adverse side affects.

    robots-ics

     

    have fun!

    ~q

     

     


  11. you know, sorry..

    noticed this on berlin too ,thought it was a wad (working as designed), it stopped if i coded faster.

    was going to ask if they could make this audible, some times late nite coding, i nod off, be nice to have my ide beep at me when i fall asleep.. 🙂


  12. no worries, your close, just remember, it's not a string or anistring, it's bytes.

     


    type
      TMyClient = class(TWSocketThrdClient)
      public
        Buff        : array[0..9999999] of byte;
        Count:integer;
        ConnectTime : TDateTime;
        ClearToSend :boolean;
        GoodHeader  :boolean;

      end;

     

     

    procedure TServerCommsDm.SocketDataAvailable(
        Sender : TObject;
        Error  : Word);
    var
        Cli : TMyClient;
        Len:integer;
        aPacketHdr:TPacketHdr;
    begin
        Cli := Sender as TMyClient;
        //recv bin data into our buffer..
        Len:=Cli.Receive(@Cli.Buff[Cli.Count],SizeOf(Cli.Buff)-Cli.Count);

        //did we get some!!
        if Len <= 0 then
            Exit;

            //count it..
            Cli.Count:=Cli.Count +Len;
           //see if we got enough for a packet
         if Cli.Count>=SizeOf(TPacketHdr) then
            begin
            Move(Cli.Buff,aPacketHdr,SizeOf(aPacketHdr));
            if CheckIdent(aPacketHdr.PacketIdent) then
             begin
             Cli.GoodHeader:=true;
             Display('Recvd Valid Header:DataSize='+IntToStr(aPacketHdr.DataSize));
              //packets can have extra data.. check for a datasize..
              if Cli.Count>=(aPacketHdr.DataSize+SizeOf(aPacketHdr)) then
               begin
                Display('Received packet from ' + Cli.GetPeerAddr);
                ProcessData(Cli);
               end;
             end else
                begin
                  Cli.GoodHeader:=false;
                  Display('Received bad header from '+Cli.GetPeerAddr);
                  Cli.Count:=0;//start it all again
                  FillChar(Cli.Buff,SizeOf(Cli.Buff),#0);//zero the buffer
                end;
            end;

    end;

     

     

     


  13. Buf should be an array of byte.

    Also should be big enough to grab your image and get rid of the additional #0.

    But like the other have pointed out, this will only work if it's all your sending.

    Really, you should make a packet header with a fixed known size that should at least let you know the size of the additional data to recv.

    Then, you just recv packet header, see data size and keep receiving unit you get it all.

     

     

    i do something like this..

     

    pPacketHdr=^tPacketHdr;

    tPacketHdr= packer record

      Indent:array[0..15] of byte;//indentifier

      Command:byte;

      DataSize:integer;

    end;

     

     

    i use tByteDynArray as my final buffer..

     

    outBuff:tByteDynArray;

    TotalSize:=SizeOf(tPacketHdr)+MemStrm.Size;

    SetLength(outBuff,TotalSize);

    offSet:=0;

    Move(packetHdr,outBuff[offSet],SizeOf(tPacketHdr));

    offSet:=offSet+SizeOf(tPacketHdr);

    then move the rest in..

     

     

     

    first get the header with 0 data moving, then just add data, any data.. use command byte to tell you what your getting.. ident is unique to you and you can set and check it on every packet, if it doesn't match your ident ignore it..


  14. Ok, very strange.

     

    This is on my project I ported from Berlin.

    Made a new folder.

    c:\d11

    then my common units

    c:\d11\common

    then my proj

    c:\d11\proj

     

    project folder only has 1 main form frmMain.pas, and a datamodule.

    all the rest is in my common folder as I share these, haven't since I started porting, but kept same folder structure.

     

    everything seems fine, port moving along nicely.

    was doing a backup this morning and noticed that everything in my common folder seemed old.

    All the file date/times are pre D11??

    checked contents and they are correct, can open unit in ide make a change, save it, but no change in file date/times.

    tried deleting .history thinking something jammed up from berlin, no luck.

     

    file date/times in my proj folder are updating as I change and save them.

     

    also made a new unit, saved it in \common -date/time is now

    waited a few minutes, changed and saved, no change in date/time

     

    now the strange part, had some troubles at the start of the port, so made a test project.

    same basic folder structure and that project seems to update file date/times just fine.

     

    and I should add, with the bump at the start of the port, I recreated the project file in D11, so project source and files should only be from D11.

     

    the only diff between test proj and actual is amount of units in the common folder,

    Test had about 7

    Actual over 50

    No forms, just units.

     

     

    Not causing me any issues, except for brief moment of confusion when backing things up, just strange.

     

     

     

    Thanks, sorry..

     

    ~dave

     

     

     

×