Jump to content

Attila Kovacs

Members
  • Content Count

    2071
  • Joined

  • Last visited

  • Days Won

    29

Everything posted by Attila Kovacs

  1. Attila Kovacs

    TdxfOutlookBar for Delphi 5

    http://google.com/ncr
  2. Attila Kovacs

    SetRange - Doesn't

    You could try to use the dataset's ".Filter" and ".Filtered" properties instead of this exotic SetRange.
  3. Attila Kovacs

    Feature Request for String Paste As

    A blind man walks into a bar. And a table. And a door. And a staircase.
  4. Attila Kovacs

    Feature Request for String Paste As

    @Lars Fosdal It's the GExperts section 😛 Again 😉 Maybe we need some css tuning on the title 😉
  5. Attila Kovacs

    Feature Request for String Paste As

    That is so easy, a little wizard with 2 menus. Forgive me for the code quality, looks like I did not give too much flamingos about it. // Paste procedure TClipboardWizard.mePasteFromClipboard(Sender: TObject); begin with BorlandIDEServices as IOTAEditorServices do if Assigned(TopView) then begin TopView.Buffer.EditPosition.InsertText(GetFormattedString); TopView.Paint; // invalidation end; end; function TClipboardWizard.GetFormattedString: string; var List: TStringList; q: integer; begin if Clipboard.HasFormat(CF_TEXT) then begin List := TStringList.Create; try List.Text := Clipboard.AsText; for q := 0 to List.Count - 2 do List[q] := #39 + List[q].Trim.Replace(#39, #39#39) + #32#39#43#32#47#47; q := List.Count - 1; List[q] := #39 + List[q].Trim.Replace(#39, #39#39) + #32#39#59#32#47#47; Result := List.Text; finally List.Free; end; end; end; //Copy procedure TClipboardWizard.meCopyToClipboard(Sender: TObject); begin with BorlandIDEServices as IOTAEditorServices do if Assigned(TopView) then Clipboard.AsText := RemoveUnneededChars(TopView.Block.Text); end; function TClipboardWizard.RemoveUnneededChars(const Value: string): string; var List: TStringList; q: integer; begin if Value.Trim <> '' then begin List := TStringList.Create; try List.Text := Value; for q := 0 to List.Count - 1 do List[q] := List[q].Trim([#32, #33, #34, #35, #36, #37, #38, #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, #74, #75, #76, #77, #78, #79, #80, #81, #82, #83, #84, #85, #86, #87, #88, #89, #90, #91, #92, #93, #94, #95, #96, #97, #98, #99, #100, #101, #102, #103, #104, #105, #106, #107, #108, #109, #110, #111, #112, #113, #114, #115, #116, #117, #118, #119, #120, #121, #122, #123, #124, #125, #126, #127]).Replace(#39#39#39, #39#39#32#39).Trim([#39]).Replace(#39#39, #39); Result := List.Text; finally List.Free; end; end else Result := ''; end;
  6. Attila Kovacs

    TdxfOutlookBar for Delphi 5

    I only know one company who refuses to host old version of their products. If he had a license he should contact DevExpress and ask for the package or for declaring it as abandonware.
  7. Attila Kovacs

    TdxfOutlookBar for Delphi 5

    Ask DevExpress?
  8. TEventHandler<T> ? TObservable<T> ? Just my 2 cents, never used them, but it's a good base to start the conversation.
  9. If it's true, is it related to the bloated dcu's with generics reported by Stefan back in the days?
  10. Attila Kovacs

    No C/S FireDac for Delphi Professional

    You could also quit your emba subscription and use the last one you have with FD.
  11. Attila Kovacs

    No C/S FireDac for Delphi Professional

    https://www.devart.com/unidac/
  12. Attila Kovacs

    Reading fields with different lenghts

    it's not necessary to move the data anywhere, just cast the memory to the record type TMyData = record bSTX: Byte; bSep1: Byte; Field1: Word; bSep2: Byte; Field2: Array [0 .. 5] of Byte; bSep3: Byte; Field3: Array [0 .. 2] of Byte; Field4: Array [0 .. 4] of Byte; bsep4: Byte; bETX: Byte; bLRC: Byte; end; PMyData = ^TMyData; var DataFromCOM: TBytes; begin SetLength(DataFromCOM, SizeOf(TMyData)); DataFromCOM[2] := 122; WriteLn(PMyData(DataFromCOM).Field1.ToString); ReadLn; end.
  13. I was tired writing IncludeTrailingURLDelimiter(IncludeTrailingURLDelimiter(dir1)+dir2) ... etc. so I thought I can write a little URL Builder. As I'm a lazy dog, I did not want to go with classes, I wanted something self managed, but to have that I had to solve the auto initialization, so here I'm (see the code) Sure this is not the most resource saver solution, but this wasn't my goal. Any thoughts? Positive, negative, everything welcome, just that we can learn something. lURL := TURLBuilder.AddDir('dir').AddDir('dir2').AddFile('file'); unit URLBuilder; interface type TURLBuilder = class //record private type TURLBuilder = record private FUrl: string; public function AddDir(const ADir: string): TURLBuilder.TURLBuilder; function AddFile(const AFile: string): TURLBuilder.TURLBuilder; class operator Implicit(a: TURLBuilder.TURLBuilder): string; class operator Explicit(a: TURLBuilder.TURLBuilder): string; end; public class function AddDir(const ADir: string): TURLBuilder.TURLBuilder; static; end; function IncludeTrailingURLDelimiter(const AURL: string): string; implementation function IncludeTrailingURLDelimiter(const AURL: string): string; begin Result := AURL; if (AURL <> '') and (AURL[High(AURL)] <> '/') then Result := Result + '/'; end; { TURLBuilder } class function TURLBuilder.AddDir(const ADir: string): TURLBuilder.TURLBuilder; begin Result.FUrl := IncludeTrailingURLDelimiter(ADir); end; { TURLBuilder.TURLBuilder } function TURLBuilder.TURLBuilder.AddDir(const ADir: string): TURLBuilder.TURLBuilder; begin Result.FUrl := FUrl + IncludeTrailingURLDelimiter(ADir); end; function TURLBuilder.TURLBuilder.AddFile(const AFile: string): TURLBuilder.TURLBuilder; begin Result.FUrl := FUrl + AFile; end; class operator TURLBuilder.TURLBuilder.Explicit(a: TURLBuilder.TURLBuilder): string; begin Result := a.FUrl; end; class operator TURLBuilder.TURLBuilder.Implicit(a: TURLBuilder.TURLBuilder): string; begin Result := a.FUrl; end; end.
  14. Attila Kovacs

    Reading fields with different lenghts

    @AndrewHoward cast the data to a corresponding packed record
  15. Attila Kovacs

    Reading fields with different lenghts

    @Mike Torrettinni Woww. Even if the presented protocol is a binary one?
  16. Attila Kovacs

    Having fun with Delphi

    I don't know, it's URL not a Path, and PathSeparator etc.. are class vars, I would not touch it for a second. ah, it's a record, in this case that's what I did not find. I knew there was something but could not remember what, thx. Edit: I tried TPath.Combine and I can't alter the separator char. Either I'm missing something or it's just for file paths.
  17. Attila Kovacs

    Having fun with Delphi

    @Kas Ob. I went through all these versions in my mind, even with clearing in the class operators, but it's just not right. You also have to know the implementation details for that version. @Marat1961 There is no desire on reinventing the wheel, I would have been pleased if there were something in the RTL. The cited func works with path separators and not url separators, as far as I can see. However the suggestion by @Kryvich to introduce a TURIPart=type string; and add some helpers sounds good.
  18. Attila Kovacs

    Having fun with Delphi

    @Kryvich I'll think about #2, sounds legit. thx
  19. Attila Kovacs

    Having fun with Delphi

    @Kryvich Yes, but It's slightly different from my wishes. Dir1 Dir2 has to be TURL.
  20. Attila Kovacs

    New funcionality proposal

    I'm using A and O. And I can write it down by my own.
  21. Attila Kovacs

    Organizing enums

    He wants to _find_ the appropriate enum and not obfuscate it deeper. It should be a task for the IDE which fail big time in it, even the help provided by emba is trying to hide which are the possible values. Still, I would not say that your example is a "better way" but you are mixing variables with types. So it should be something like: type TGEnums = class type THTMLType = (htTemplate, htStatic, htHeader, htCustom); end; var x: TGEnums.THTMLType; begin x := TGEnums.THTMLType.htTemplate; --- or --- type THTMLType = (htTemplate, htStatic, htHeader, htCustom); TGEnums = class type HTMLType = THTMLType; end; var x: THTMLType; begin x := TGEnums.HTMLType.htTemplate;
  22. Attila Kovacs

    An XML DOM with just 8 bytes per node

    I just felt like with the best cow of the dairy-farm which gives 40 liters of milk then knocks over the bucket. Can't compile the code because of the inline variables 😕
  23. Attila Kovacs

    Simple inlined function question

    Well, maybe you could write a generic search class having the whole code only once in your app, but hard to give any advice without knowing the details. Just leave it as it is, it always works.
  24. Attila Kovacs

    Simple inlined function question

    move the loop into the inlinded proc
  25. Attila Kovacs

    Simple inlined function question

    Register optimization, I never put more than one test into one procedure, but the problem is the inlining introduce the extra boolean evaluation instead of just the 3 in the "if". 🤷‍♂️
×