Anonymní profil Sniper – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Sniper – Programujte.comAnonymní profil Sniper – Programujte.com

 

Příspěvky odeslané z IP adresy 92.240.176.–

Sniper
Delphi › Jedna funkce pro více Array…
2. 3. 2020   #385568

Rozumím. Osobně bych nikdy nikde nepřiřazoval nil do dynamického pole. Sice je to možné, ale prostě bych to nedělal. Já když mám takovouhle funkci, tak ji vždy vytvářím podle následujícího vzoru:

Function Selection(SelectionParameter; out SelectedObject): Boolen;

SelectionParameter mi určuje co chci vybrat (v tvém případě string určující pole). Pokud funkce vrátí true, tak SelectedObject obsahuje vybranou věc, ale pokud vrátí false, tak je SelectedObject nedefinován, nesmím ho dále použít a nesmím o něm vůbec nic předpokládat. Být tebou, napsal bych to podobně.

Sniper
Delphi › Jedna funkce pro více Array…
1. 3. 2020   #385560

Zdroják jsem moc nezkoumal, protože zdaleka není kompletní, ale pár poznatků...

  • třída TRegistry už v Delphi existuje, chtělo by to pojmenovat jinak (jen pro přehlednost)
  • prázdné dynamické pole je skutečně nil pointer, ale proboha nikdy to takhle netestuj, použij standardní funkci Length() - ta pro prázdné pole prostě vrátí 0
  • používej anglické názvy, v tomhle se nedá vyznat
  • pro porovnávání stringů nepoužívej operátor = ale standardní funkce k tomu určené (Ansi)CompareStr, (Ansi)CompareText, (Ansi)SameStr, (Ansi)SameText, ...
  • pokud chceš mít ty pole jako globální proměnné (což tedy nedoporučuji), tak ty metody co s nimi pracují mohou být třídní (class function, class procedure)
  • obecně mi to celé přijde špatně navržené - spravovat takový kód bude peklo, a hledat jakoukoliv chybu ještě větší, nadá se v tom vůbec vyznat - co to má vlastně dělat?

Sniper
Pascal › Třídění textového souboru v…
3. 1. 2019   #382694

Njn, osm let zpět. Fonty - předpokládám že se bavíme o GUI aplikaci, to by znamenalo že je problém v použitý komponentě/knihovně (Lazarus nebo něco jinýho?), ne v FP samotným, protože ten, podobně jako třeba holý C, pro nic takovýho podporu nemá.

Je fakt že pár let zpět to bylo s LCL (Lazarus component library) dost tragický, ale teď je to podstatně lepší. Ale zase, to není otázka jazyka, ale knihoven.

Sniper
Pascal › Třídění textového souboru v…
3. 1. 2019   #382691

Já dneska ráno. Mluvím o tomhle Free Pascalu: https://www.freepascal.org

Poslední stable release je 3.0.4 (pravda dnes již předloňský), trunk taky většinou jede dobře. Na FPC je postavený Lazarus, takže i GUI aplikace a použitelný editor/vývojové prostředí také nejsou problém.

Nemáš na mysli spíš Turbo Pascal nebo podobně?

Nezpochybňuju že starej HW je pořád kolem nás a je ho třeba, ale řešit to u školní úlohy mi přijde totálně mimo mísu.

Sniper
Pascal › Třídění textového souboru v…
3. 1. 2019   #382687

"navíc FreePascal má poslední stabilní verzi 1.0"  no to je blábol. Pascal sice není in, ledacos mu chybí a má spoustu nedostatků, ale tvrdit, že je mrtvej, to je jinej level. Když o vývoji pascalu (Delphi, FPC, Oxygene) nic nevíš, nebo žiješ před pětadvaceti lety, tak se k tomu laskavě nevyjadřuj.

Co sem taháš protected mode taky nevim, to je 35+ let stará záležitost procesoru (a přeneseně tudíž kompileru), programovacího jazyka se to netýká.

Sniper
Delphi › Jak přidat element na začáte…
23. 6. 2018   #221463

STEP ve většině dialektů pascalu (delphi nevyjímaje) není. Celkově to vypadá jak z jiného jazyka (NEXT taky v pas není).

type
  TStringsObjArr = array of TStrings;

procedure arrayInsert(var arr: TStringsObjArr; str: TStrings);
var 
  i: integer;
begin
  SetLength(arr,length(arr)+1);

  For i := High(arr) downto Succ(Low(arr)) do
    arr[i] := arr[i - 1];

  arr[0] := str;
end;

Když předáváš v parametru objekt, NIKDY to nedeklaruj jako var pokud k tomu není opravdu vážný důvod.

Sniper
Delphi › Jak přidat element na začáte…
23. 6. 2018   #221461

Takto nelze do funkce předávat dynamický array. Jak to máš deklarované tak parametr arr je open array (použij google pro detaily), musíš si nadefinovat typ pro to pole, a ten typ pak použít pro daný parametr.

type
  TStringsObjArray = array of TStrings;

procedure arrayInsert(var arr: TStringsObjArray; str: TStrings);
...
Sniper
Pascal › Hexadecimal
15. 6. 2018   #221369

A jaký že je tvůj způsob?   
Testování bitu pokud mám hex-string bych já osobně udělal asi takhle: 

Function TestBit(const Str: String; BitIndex: Integer): Boolean;
var
  Num:  Integer;
begin
If (BitIndex >= 0) and (BitIndex <= (SizeOf(Integer) * 8)) then
  begin
    Num := StrToInt(Str);
    Result := (Num shr BitIndex) and 1 <> 0
  end
else raise Exception.CreateFmt('TestBit: Bit index (%d) out of allowed range.',[BitIndex]);
end;
Sniper
Delphi › Vytvoření třídy
3. 5. 2018   #220660

Příště to nezkracuj.
Ale chyba je i u mě, to přiznávám - nevšiml jsem si totiž dost důležitý věci. Ty nevoláš objekt ale třídu! TForm1 není objekt, je to třída - změň to na Form1 (nebo jak se ten form jmenuje).

Sniper
Delphi › Vytvoření třídy
3. 5. 2018   #220658

Nu, allBigger1 je objekt, kompiler tedy očekává, že když už sis ho vyžádal, tak s ním něco budeš dělat (volat metodu nebo přistupovat k vlastnostem).

Sniper
Delphi › Smyčka for .. in array
3. 5. 2018   #220646

Nápověda: "TStrings contains abstract or, in C++ terminology, pure virtual methods and should not be directly instantiated.". Prostě, pokud vytvoříš instanci TStrings (nebo jiný abstraktní třídy), a náhodou zavoláš něco, co pracuje s abstraktní metodou, tak to spadne na abstract exception. Zrovna TStrings např nemá vůbec implementovaný getter pro property Strings[].

Sniper
Delphi › Smyčka for .. in array
3. 5. 2018   #220640

Tak hlavně, jak už bylo zmíněno, D7 neumí FOR-IN, to bylo přidaný v D2007. A ohledně TStrings/TStringList - TStrings se abstraktní třída, používej ji jenom pro deklaraci parametrů, nikdy nevytvářej instanci.

Sniper
Delphi › ExtractStrings a TStrings
1. 5. 2018   #220593

Neb v tom máš nepořádek, pole má velikost maxTestItems, ale pracueš s maxSubFolders položkami. Jsi si jistý, že maxTestItems je 11, nebo že maxSubFolders  je menší nebo rovno maxTestItems?

Sniper
Delphi › ExtractStrings a TStrings
1. 5. 2018   #220591

Protože je nesmyslná syntaxe. Tohle je Delphi, ne C++, tady nejsou ternární operátory. Nemluvě o tom, že se tam pokoušíš přiřadit dva různý typy (string a integer).

Sniper
Delphi › ExtractStrings a TStrings
1. 5. 2018   #220588

A ještě, watcher ti nic neukazuje protože Line je objekt ke kterému nemáš zdroje, tudíž delphi neznají jeho strukturu a nemají ti co ukázat. Pokud bys měl zdrojáky tak ti to vypíše všechny jeho parametry.

Sniper
Delphi › ExtractStrings a TStrings
1. 5. 2018   #220587

Mimochodem tyhle unsafe hlášky jdou vypnout v nastavení, což bys taky měl udělat.

Sniper
Delphi › ExtractStrings a TStrings
1. 5. 2018   #220586

Proměnné pTest je ve chvíli, kdy se na ní díváš, už nepřístupná/neexistuje. Ano, je to optimalizace, aby tam proměnný nezacláněli dýl, než je třeba.

Blok try-finally má svůj důvod - memory leak ti nic neříká?

Nebezpečný type casting ti to hlásí proto, že referencuješ obsah managed typu, tudíž nemáš vůbec žádnou kontrolu nad jeho obsahem mimo kód kde se používá.

Sniper
Delphi › Otevření obrázku ze souboru
1. 5. 2018   #220584

Pozor, TCanvas.Pixels je otřesně pomalý! Pro analýzu a větší operace zásadně používat TBitmap.ScanLine.

Sniper
Delphi › ExtractStrings a TStrings
1. 5. 2018   #220576

Tvůj kód jsem nezkoušel (neb se v něm nevyznám), ale tohle: 

procedure Foo;
var
  Str:  String;
  Line: TStringList;
  i:    Integer;
begin
Str := 'Latina;0';
Line := TStringList.Create;
try
  WriteLn(ExtractStrings([';'],[],PChar(Str),Line));
  WriteLn;
  For i := 0 to Pred(Line.Count) do
    WriteLn(Line[i]);
finally
  Line.Free;
end;
end;

...funguje jak má. Takže chyba bude jinde.

Sniper
Delphi › Otevření obrázku ze souboru
30. 4. 2018   #220566

Hodně záleží jak ten obrázek zobrazuješ. Pokud pomocí TImage, tak tam je property Picture a to má metodu LoadFromFile.

Sniper
Delphi › Jaký je význam konstrukce C…
29. 8. 2017   #217701

Ne, takhle dostaneš pole tříd, ne pole objektů. Na pole objektů ti stačí dát tam jenom společnýho předka (array of TDoprProstredek, nebo dokonce array of TObject).
V tom odkazu je i příklad použití (volání konstruktoru na třídě, která není při kompilaci známá, tak se volá právě na referenci třídy předané runtime).

Sniper
Delphi › Jaký je význam konstrukce C…
29. 8. 2017   #217699
Sniper
Delphi › filesize
30. 5. 2017   #216471

To nejsi sám   

Když jsem začínal, tak mi precedence unit taky pěkně zatápěla. Od tý doby jde jednotka Windows vždycky na úplnej začátek, a je klid.

Sniper
Delphi › filesize
30. 5. 2017   #216468

Máš blbě řazený jednotky v uses. Volá se FindClose z jednotky Windows místo ze SysUtils, a ta očekává handle, což je v D7 cardinal.

Takže buď si oprav pořadí (SysUtils musí být ZA Windows, http://www.delphibasics.co.uk/RTL.asp?Name=Uses), nebo to uprav na SysUtils.FindClose(...).

Sniper
Delphi › Jak změnit velikost písma u…
21. 5. 2017   #216160

Nepřepisuje se ta velikost až za běhu programu? Jestli je to v těch programech, o jakou přesně komponentu jde (form, název)?

Sniper
Delphi › Jak změnit velikost písma u…
21. 5. 2017   #216158

Vyber prvek co chceš měnit, okno "object inspector" (bývá vlevo), záložka "properties", font -> size.

Sniper
Delphi › Jak zkompilovat program
21. 5. 2017   #216157

Tak jsi to zvládnul sám, gj!

Moc jsem ten kód nezkoumal, ale jde dát typecasting dword(-1). Jinak -1 je v 32bitech $FFFFFFFF.

Sniper
Delphi › Jak zkompilovat program
21. 5. 2017   #216148

Po jedné drobné úpravě (změna typu pro výsledek funckce WinExecAndWait na dword) to jde přeložit v Delphi 7 Personal - vzhledem k tomu, jak kód vypadá, bych to v ničem novějším nepřekládal (kvůli unicode stringům). Možná by to po konverzi zvládl i Lazarus, ale nezkoušel jsem. Každopádně holé FPC to nepřeloží protože se tam používá VLC.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý