1 2 3 4 5 6 7 8 9 |
TMiaStruttura = record case integer of 0 : (content : array[0..19] of char); 1 : ( primidue : array[0..1] of char; dalduealquattro : array[0..1] of char; cognome : array[0..15] of char; ) end; |
1 2 3 4 5 6 7 8 9 10 11 12 |
procedure TForm7.Button1Click(Sender: TObject); begin a.content := '0123456789ABCDEFGHIL'; ShowMessage(a.dalduealquattro); a.dalduealquattro := 'BB'; ShowMessage(a.content); end; |
thank’s to my self obviusly
Manage a System.string as buffer to copy content of string into a generic TStream:
1 |
Stream.Write(Str[1], StrLen * SizeOf(Str[1])); |
Unlike some multi-user environments most Ubuntu desktop users have the Operating System and drivers on their hard disks, SSDs or Live Boot USBs. There is a glitch where some users wait an extremely long time for network to come up during boot. In this case the recommendations is to set the maximum wait time to…
Read more
Country codes: Locale Languagecode LCIDstring LCIDDecimal LCIDHexadecimal Codepage Afrikaans af af 1078 436 1252 Albanian sq sq 1052 1250 Amharic am am 1118 Arabic – Algeria ar ar-dz 5121 1401 1256 Arabic – Bahrain ar ar-bh 15361 1256 Arabic – Egypt ar ar-eg 3073 1256 Arabic – Iraq ar ar-iq 2049 801 1256 Arabic –…
Read more
RadStudio 10.4 is a release that promises great things in all areas of this fantastic development environment. Taking a first test run we noticed: In FMX applications we have noticed a noticeable improvement in character rendering The new LSP (language server protocol) system seems to have made the IDE even more fluid and productive during…
Read more
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 71 72 73 |
TThreadedMsgEvent = class( TThread ) private FLock : TCriticalSection; FStr : TQueue<String>; FMemo : TMemo; function GetEvent : String; protected procedure Execute; override; public procedure AddEvent( aMsg : String ); constructor Create( AMemo: TMemo ); destructor Destroy; override; end; implementation { TThreadedMsgEvent } procedure TThreadedMsgEvent.AddEvent(aMsg: String); begin FLock.Acquire; FStr.Enqueue( FormatDateTime('DD/MM/YY HH:NN:SS.ZZZ',Now)+ ' : '+ aMsg ); FLock.Release; end; constructor TThreadedMsgEvent.Create(aMemo: TMemo); begin inherited Create(True); FreeOnTerminate := False; FOnMessage := ACallBack; FStr := TQueue<String>.Create(); FLock := TCriticalSection.Create; FMemo := aMemo; Resume; end; destructor TThreadedMsgEvent.Destroy; override; begin FreeAndNil( FStr ); FreeAndNil( FLock ); end; procedure TThreadedMsgEvent.Execute; begin while not Terminated do begin try if (FStr.Count > 0) then begin if Assigned( aMemo ) then begin TThread.synchronize( procedure begin FMemo.Lines.Add( GetEvent ); end; ); end; end; except end; TThread.Sleep(1); end; end; function TThreadedMsgEvent.GetEvent: String; begin FLock.Acquire; result := FStr.Dequeue; FLock.Release; end; |
From post found at: https://stackoverflow.com/questions/17506615/how-to-handle-log-in-a-threaded-manner-in-delphi