Nauka programowania w Delphi- od czego zacząć?

Dawno mnie nie było, a widzę, że ciekawie się wątek rozwinął :slight_smile:

Jakoś do tej pory nie pokazałeś tego systemu operacyjnego napisanego w Delphi… Czyżby naprawdę żadnego nie było? Bo ja Ci wszystkie znane mi napisane w C# pokazałem.

No i chętnie dowiedziałbym się (pewno nie tylko ja) o tym jak uruchomić DLLkę bez systemu operacyjnego. Mógłbyś wyjaśnić?

I nie oszukujmy się - żaden z tych języków nie jest do pisania SO, od tego są inne języki.

Tak samo Twoje ukochane Delphi nie nadaje się do programowania mikrokontrolerów bądź systemów wbudowanych. Z tym już lepiej jest w C# ;]

Co nie zmienia faktu, że gdy to już wyszło na jaw, nie potrafiłeś skonwertować napisu do liczby, co jest jedną z podstawowych operacji w każdym chyba języku ;] Nie czepiałbym się, gdyby nie to, że twierdzisz, że “znasz C#”.

Zaś gigantyczny, nieelastyczny i bezużyteczny switch, który pomagałeś w tamtym wątku budować był po prostu okropny pod względem programistycznym, bez względu na język.

Co Ty znowu pomieszałeś? Jakie IDE?

Biblioteka klas to tylko część .NET.

.NET to platforma, w której można tworzyć w językach zgodnych z CLI, a nie “teoretycznie z każdego”.

W każdym z tych języków wbudowane klasy i ich elementy nazwayją się tak samo. I w każdym z tych języków można tworzyć nowe kontrolki UI dziedzicząc po już istniejących, przecież o tym była mowa. C# nie ma tu nic do rzeczy, bo język to tylko narzędzie - składnia, semantyka i zestaw symboli.

Bardzo naukowe podejście, panie profesorze. Nie znasz się na czymś, więc jest syfem. Jak sądzę, dzięki temu Twoje życie jest dużo prostsze.

Pewno Tobie by to tydzień zajęło albo i nawet całe życie. Ale skoro chcesz coś udowadniać, to powinieneś być konsekwentny. W końcu skoro stawia się tezę, to należałoby ją udowodnić. Nie pisałeś rozprawek w podstawówce?

A skoro twierdzisz, że “znasz C#” to nie powinieneś sugerować, że tego nie da się zrobić ;]

O ile pole do wpisywania liczb stałoprzecinkowych ma jakiś sens, o tyle umieszczanie innych kontrolek w polu tekstowym czy też wariacje na temat groupboxa są tylko sztuką dla sztuki, bez jakiegokolwiek praktycznego zastosowania.

http://www.somekind.pl/_upload/dp/MagicControls.exe - to nie było nawet specjalnie trudne, ani tym bardziej niewykonalne. Trzeba było tylko trochę posiedzieć i pomyśleć. Czas wykonania zależy od umiejętności twórcy i stopnia znajomości przez niego technologii, nie zaś jej samej. Nie sądzę, aby akurat w tym przypadku Delphi i .NET różniły się jakoś znacznie. Zobaczymy, gdy wkleisz kod swoich kontrolek.

Mój kod obsługujący przycisk dynamicznego tworzenia: http://wklej.org/id/88401/?zawin=0

Mam za to kilka pytań to tych Twoich przykładów - wartość minimalna wynosi rzekomo 0, a i tak da się wprowadzać liczby ujemne. Dlaczego? Dlaczego dla każdej liczby ujemnej tekst w tytule okna wynosi “0,00”? Czemu po zapełnieniu pola liczbami i minusem nie da się nic wpisać do części dziesiętnej?

Piszesz też o dynamicznym tworzeniu kontrolek. Jak widzisz, w moim kodzie ja faktycznie po wciśnięciu przycisku dopiero deklaruję i incjalizuję kontrolki. Ty masz je zadeklarowane w sekcji “type” gdzieś na początku kodu. W Delphi na serio nie da się tworzyć w pełni dynamicznie, bez poprzedniej deklaracji? A co w sytuacji gdyby zaszła podtrzeba np. utworzenia tylu pól tekstowych, ilu zechce użytkownik?

I dalszych klika pytań technicznych dotyczących Delphi - którego ja nie znam, a Ty znasz doskonale:

  1. Powiedz mi ile linijek kodu w Delphi potrzebujesz na ustawienie wszystkim polom tekstowym na formularzu czerwonego koloru tła? Albo ile zajmie Ci przeszukanie tych wszystkich pól, znalezienie tego, w którym jest wpisany najdłuższy tekst i wyświetlenie w messageboxie tej wartości? W obu przypadkach bez względu na to, ile tych pól tekstowych jest.

  2. Jakiego typu danych najlepiej użyć do przechowywania wyników finansowych (zysku/straty) firmy za zeszły rok. Oczywiście należy pamiętać o tym, że w zeszłym roku firma mogła nie istnieć, więc wyniku finansowego nie miała - tę informację też trzeba przechować.

  3. Jak wygląda obsługa serializacji?

  4. W jaki sposób można monitorować zmiany plików wewnątrz jakiegoś katalogu?

  5. Jak wygląda obsługa isolated storage?

  6. Jakie algorytmy szyfrujące i haszujące są standardowo dostępne?

  7. Jak wygląda zarządzanie uprawnieniami do wykonywania kodu aplikacji? Czy można używać zasad bezpieczeństwa opartego na rolach do ograniczenia wykonywania poszczególnych sekcji kodu?

  8. Czy jest dostępny mechanizm refleksji?

  9. Czy jest jakiś odpowiednik dla lambda expressions?

  10. Czy w Delphi można tworzyć programy pod Windows Mobile?

Delphi nie jest złe. Ono jest po prostu zacofane. Z tego, co wiem, to dopiero ostatnia wersja wprowadziła typy generyczne, metody anonimowe i obsługę Unicode, czyli rzeczy, które w takim głupim .NET są od wielu lat, a w innych technologiach jeszcze dłużej.

Mi o osobiście po prostu nie podoba się składnia tego języka - jest miejscami zbyt rozwlekła i nieczytelna. Dziwne operatory, dziwny sposób deklaracji zmiennych (zdaje się, że nie można nawet inicjalizować wraz z deklaracją), brak możliwości deklaracji w dowolnym miejscu programu, dziwaczne operatory inkrementacji i dekrementacji, switch, który nazywa się case. A najgorsze są wszechobecne begin i end, które tylko zaciemniają kod.

Dziwny, czyli inny niż w C, a więc i większości pozostałych popularnych języków programowania. To jest wada, bo później wielu osobom ciężko się przestawić.

I chyba nikt nie musi znać się na Delphi, żeby widzieć, że traci na popularności wśród pracodawców, wystarczy obserwacja rynku. A o to mi chodziło w moim pierwszym poście. A co jest tego przyczyną? Mogę zgadywać, że właśnie to, że wcale nie jest takie fajne, jak się wydaje na pierwszy rzut oka.

Nie znam systemu operacyjnego napisanego w Delphi co wcale nie oznacza (oczywiście, dla tych kto zna się na logice) że takiego niema ani że nie da się napisać.

DLL’ka jest plikiem z kodem maszynowym, więc może być odpalony np przez BIOS, tak samo jak się odpalają pliki systemowe.

Jak ktoś napisał kompilator z C# na kod maszynowy mikrokontrolera to owszem. Na zamówienie pisałem kompilator z pascala do kodu maszynowego ATmega128.

Ja zaproponowałem użycie Convert:: i to zadziałało to że masz inne ulubione metody na to, nie oznacza że nie potrafiłem. Kłopot był z Length - Z poziomu Delphi (niestety jest caseinsensitive) wszystko jedno jak napiszesz, a kolega napisał że próbował ->Length więc już do tego nie wracałem skoro “próbował”.

Prosiłem uważne przejrzeć wątek. Np:

to oczywiście wyraźnie świadczy że jestem zwolennikiem takich beznadziejnych switch’y.

Co nie zmienia faktu że .NET jest biblioteką klas, oczywistym jest że wszędzie te klasy nazywają się tak samo. Nazwanie tego “platformą” to zwykły chwyt reklamowy.

Po pierwsze, nie jestem profesorem. Po drugie, nasza rozmowa przypomina dyskusje kierowce ferrary (Delphi) i kierowce malucha (C#/.NET) w czasach PRL’u na temat tego co jest lepsze. Przy czym kierowca ferrary trochę jeździł maluchem a kierowca malucha nigdy nie siedział za kołkiem ferrari. A wszystkie argumenty kierowcy malucha sprowadzają się do znacznie większej popularności tego malucha co z jego punktu widzenia jednoznacznie świadczy że maluch jest lepszy.

To akurat oszczędza miejsce na formatce, znacznie wygodniejsze niż typowe podejście. Użytkownicy bardzo chwałą takie rozwiązanie.

Najpierw doprowadź to chociażby do polowy możliwości mojej kontrolki. W mojej jak w polu napisano 123.40 wstajesz kursorem pomiędzy 2 a 3 naciskasz przecinek i wychodzi ci 12.34; wstajesz pomiędzy 3 a 4 naciskasz przecinek i wychodzi 123.40. Moja kontrolka nie pozwala na wprowadzenie niedozwolonych znaków, twoja pozwala je wprowadzić a potem usuwa, czego efektem jest brzydkie mruganie. Twoja dziwnie się zachowuje przy kasowaniu pierwszego znaku po przecinku za pomocą BackSpace.

Min i Max nie oznaczają braku możliwości wprowadzania, oznaczają jedynie że pobierana wartość z właściwości Value zostanie ograniczona.

Jeżeli postawić właściwość MaxLength na 0 to można będzie wprowadzać dowolnej długości napis (domyślnie ustawia się na ilość_po_przecinku+ilość_przed+2+(Min<0?1:0)), zazwyczaj ustawiam na tyle ile się zmieści w widocznym polu kontrolki aby nie pozwolić na auto skrolling.

Dynamicznie tylko po to żeby było widać jak to jest zrobione czy np nie jest to jakaś bitmapa podstawiona pod pole tekstowe lub jak w przypadku przykładu Fiołka - zwykły groupbox.

Czerwony kolor dla wszystkich pól tekstowych na formatce:

for I:=0 to ComponentCount-1 do if Components[I] is TEdit then TEdit(Components[I]).Color:=clRed; [/code]

Najdłuższy tekst wśród pol tekstowych znajdujących się w środku GroupBox’a o nazwie G

[code=php]SetLength(S,0);
for I:=0 to G.ControlCount-1 do if (G.Controls[I] is TEdit)and(Length(TEdit(G.Controls[I]).Text)Length(S)) then S:=TEdit(G.Controls[I]).Text;
ShowMessage(S); 

Ja w takich przypadkach używam Extended z ustawioną wartością +NAN lub -NAN.

Za pomocą TFrame.

FindFirstChangeNotification

PathName:=IsolatedStorage; Tak a propos gdyby M$ nie schrzanił tej sprawy od początku to nie trzeba by było pisać specjalnych skomplikowanych metod na ten cel.

Chyba każdy mi znany. A wszystkie które są w .NET też można łatwo wykorzystać z poziomu Delphi. Czyli albo tyle samo co w C# albo więcej.

Normalny mutex z uprawnieniami, z tym że to trochę bez sensu wg mnie.

Wpisujesz sobie do stringu kod asemblerowy i odpalasz jako funkcje. Ba, możesz kod w pascalu podany przez użytkownika, skompilować w locie (są gotowe komponenty), wynik kompilacji wstawić do stringa i odpalić jako funkcje/procedurę. Albo uruchamiać wprowadzony z ręki kod w trybie interpretatora. Czyżby w C# takie coś jest możliwe?

Czyli odpowiednik #define w C++, ale nakręcili w tym C# !!

Albo ja jestem nienormalny albo TFrame (i zagnieżdżanie formy w formie) ma się nijak do serializacji danych.

Bardzo proste. Wkładasz na TFrame wszystko co cię interesuje do przekazania. Zapisujesz do strumienia ten cały TFrame. Po drugiej stronie odtwarzasz ze strumienia. I masz wszystko na tym TFrame w stanie nie zmienionym. Jeżeli zaś chodzi o zwykłe dane (w sensie pobrane z bazy danych, wyliczone, wprowadzone przez użytkownika) to do tego jest TPersistent oraz TCollection.

Bardzo dużo, w 99% przypadków wystarczy define.

Spójrz na opis lambda expresion

delegate int del(int i);

del myDelegate = x => x * x;

int j = myDelegate(5); //j = 25

// to samo co

#define myDelegate(x) (x*x)

(int x, string s) => s.Length > x

// to samo co

#define dluzszy_niz(x,s) (s.Length>x)

Owszem w odróżnieniu od define, taka funkcja posiada swój adres więc potrafi trochę więcej niż zwykły define, np można podpiąć pod zdarzenie albo przekazać jej adres jako parametr, ale na palcach jednej ręki można wyliczyć przypadki w których w jakimś moim kodzie to by coś ułatwiło.

Tak, będę sobie robił define dla każdego wyrażenia akurat jakie mi się zachciało :-). W takim wypadku to w gruncie rzeczy zamiast i robienia cudów z #define to możemy sobie funkcję napisać i zadziała. Owszem, w ten sposób się da uzyskać mniej więcej to samo, ale w inny (dla niektórych - mniej wygodny) sposób - ale oczywiście wyrażenia lambda to taki “lukier składniowy”, nie każdemu muszą podchodzić. Nie zgodzę się jednak, że to odpowiednik #define, bądź, że #define jest odpowiednikiem lambda - służą do czego innego, ale z pomocą #define da się uzyskać podobny efekt jak wyrażenia lambda.

A co do TFrame - przyznam, że dawno nie dotykałem Delphi głębiej, ale chyba nigdy w ten sposób tego bym nie stosował. Ale widać każdy ma inne pomysły.

PS. Rzadko widzę w miarę konstruktywną dyskusję na temat wyższości masła… ekhem, jednego języka nad drugim :wink:

Pewnie, istnieje jeden kompilator Delphi, który potrafi wypluwać tylko PE… Jak wyobrażasz sobie napisanie systemu, jeżeli nie możesz zrobić czystej binarki?

Oczywiście. Najpierw procek się trochę przejedzie po nagłówku MZ, potem PE, następnie spisie sekcji, wyrównaniu i przejdzie do kodu… Nawet jeśli by doszedł do tego, to i tak się wywali na pierwszym lepszym odwołaniu do danych. Nie, co ja mówię - Delphi generuje 32-bit exeki, procesor w Real Mode rozumie tylko 16-bit instrukcje (32-bit też, ale wtedy są inaczej zakodowane, to raz, dwa, że RAMU mamy tylko 1 MB i mamy straszną rzecz - segmentację pamięci), więc ani do tego nie dojdzie… Szczerze? Na pewno zaraz po wejściu w MZ header pójdzie skakać po RAMie hen, daleko, i tylko reset przywróci go do normalności (o ile nie wywoła żadnego przerwania czy nie będzie się bawił z portami, a to raczej na pewno się stanie).

Jaaasne.

#include 


using namespace std;


int main(int argc, char **argv, char** envp)

{

	int a = rand();

	a = a + 2;

	cout << a;

	++++a;

	cout << a;

	//! a++++; error C2105: '++' needs l-value

	//! cout << a;

}

Daje nam ładne:

_main	PROC ; COMDAT


; 6 : {


	push	esi


; 7 : int a = rand();


	call	DWORD PTR __imp__ rand


; 8 : a = a + 2;

; 9 : cout << a;


	mov	ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A

	mov	esi, eax ;zachowujemy zmienną na przyszłe wywołania

	add	esi, 2 ;a = a + 2, a w zasadzie a += 2;

	push	esi

	call	DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z


; 10 : ++++a;

; 11 : cout << a;


	mov	ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A

	add	esi, 2 ;a += 2;

	push	esi

	call	DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z


; 12 : //! a++++; error C2105: '++' needs l-value

; 13 : //! cout << a;

; 14 : }


	xor	eax, eax

	pop	esi

	ret	0

_main	ENDP

Wyciąg prosto z visuala, z opcją /FAs.

Witam,

Zainteresowała mnie serializacja za pomocą TFrame. Sam nie znam Delphi, czy mogę prosić o przykład serializacji SOAP analogicznej do tego kodu w C#?

using System;

using System.IO;

using System.Runtime.Serialization.Formatters.Soap;


[Serializable]

public class Car

{

    public string Make;

    public string Model;

    public uint Year;

    public byte Color;

}


public static class Program

{

    public static int Main(string[] args)

    {

        Car vehicle = new Car();


        vehicle.Make = "Volvo";

        vehicle.Model = "S40";

        vehicle.Year = 2006;

        vehicle.Color = 3;


        FileStream stmCar =

            new FileStream("Car4.car",

                           FileMode.Create);

        SoapFormatter sopCar = new SoapFormatter();


        sopCar.Serialize(stmCar, vehicle);

        return 0;

    }

}

Byłbym też zainteresowany zserializowaniem do pliku listy/tablicy 1000 obiektów klasy Car (w koncu mozemy mieć 1000 różnych samochodów - przyklad czysto abstrakcyjny).

Chciałbym tez spytać, w jaki sposób napisać w Delphi samohostujący się webserwis (bez uzycia zewnetrznego serwera http), używający protokołu https (SSL) oraz jakiejś podstawowej autoryzacji - może być oparta na kontach użytkowników w systemie XP/Vista. Dobrze by było, żeby całość ustawien webserwisu i hosta była zawarta w odpowiednich sekcjach pliku xml z konfiguracją. No i i klienta tego webserwisu.

Czy Delphi w jakiś sposób wspiera tworzenie takich aplikacji, będacyh bądź co bądź standardem w wielu zastosowaniach biznesowych?

Nie rozumiem co masz na myśli?

A tego nawet sam pewnie nie rozumiesz.

Fajnie, a teraz zajrzyj do dokumentacji procesora i zobacz czasy wykonania instrukcji inc oraz add.

TFrame - pozwala na serializację całych formatek. Właściwie zapisywanie, całej klasy i jej odczyt z/do strumienia odbywa się za pomocą jednej instrukcji dla wszystkiego co pochodzi od TPersistent, w tym wszystkie kontrolki, oraz formatki. W Delphi jeżeli stworzyłem drzewo binarne i wpiszę go do strumienia to dzrewo zostanie tam zapisane wraz ze swoją strukturą. Czyli zapisywane i odczytywane poprawnie również wskaźniki na inne klasy o ile klasy na które te wskaźniki wskazują również zapisane do tego samego strumienia (stad TFrame). Jeżeli masz w strumieniu zapisane wskaźniki na coś co nie jest zapisane do strumienia to po odczycie masz listę tych “nie odzyskanych” wskaźników, więc można je zainicjalizować czymś innym. Masz takie możliwości w C#?

To sobie ściągnij z internetu, jest to w przykładzie użycia komponentu TJvXMLDatabase. Tak a propos ten kod który podałeś nie kompiluję się pod “Microsoft Visual C# 2008 Express Edition” (brak Soap), czyli owszem jest w C# ale nie dla wszystkich, najpierw trza zapłacić firmie M$ za takie “dobrodziejstwo”. Zauważ że w Delphi masz za darmo. Poza tym przytoczę kawałek kodu z tego przykładu dotyczący logowania:

lQuery := GHospital.Database.Query('SELECT * FROM users.xml WHERE (UserLogin = "' + ARequestInfo.AuthUsername + '") AND (UserPassword = "' + ARequestInfo.AuthPassword + '")');lQuery.Results.Items.Count = 0 then ...[/code]Nie musisz chyba znać paskała ani delphi aby zrozumieć o co tu chodzi - masz normalne zapytania SQL do pliku XML, jest taka możliwość w C#?




[quote="giaur"]

Chciałbym tez spytać, w jaki sposób napisać w Delphi samohostujący się webserwis (bez uzycia zewnetrznego serwera http), używający protokołu https (SSL) oraz jakiejś podstawowej autoryzacji - może być oparta na kontach użytkowników w systemie XP/Vista. Dobrze by było, żeby całość ustawien webserwisu i hosta była zawarta w odpowiednich sekcjach pliku xml z konfiguracją. No i i klienta tego webserwisu.
[/quote]
Jest to przy okazji powyższego przykładu. :lol:

Rozumiem. Może mam coś wyjaśnić?

Wymyśliłeś nową matematykę, w której 2*1 (2 * inc) jest mniejsze niż 1*1 (1 * add)? Pomijając już zupełnie partial register stall na EFLAGS w przypadku inc.

To wszystko wyjaśnia…

Tak proszę o wyjaśnienia. Czego dotyczy ten twój jakże rozległy, obfitujący w hiperbole i niemal poetycki opis? Odnoszę wrażenia że dotyczy on twojej próby napisania czegokolwiek.

Każdy język programowania w którym można cokolwiek napisać bezpośrednio w assemblerze może być użyty do napisania systemu operacyjnego. W Delphi mogę napisać w assemblerze dowolną funkcje.

Podziel się źródłem tej informacji :lol:

Kolejny orzeł od programowania używający emocji zamiast logiki?

  • [*:2yxt9xno]Co znaczy “wypluwać tylko PE…”?[*:2yxt9xno]Co masz na myśli mówiąc “nie możesz”?[*:2yxt9xno]Co w twoim mniemaniu oznacza termin “czysta binarka”?

Nie znam człowieka, który potrafi latać, co wcale nie oznacza (oczywiście dla tych, którzy znają się na logice), że takiego nie ma, ani że nie da się zrobić…

Daj spokój i przestań uprawiać filozofię. Dopóki nie udowodnisz, że się da, nie ma o czym gadać.

DLL to biblioteka współdzielona pod systemy z rodziny Windows. Aby ją odpalić musisz mieć taki system, albo coś, co jest w stanie chociaż go emulować. Prawda?

Może Ty masz kernel Windowsa wbudowany w BIOS, ale to chyba jedyny taki przypadek na świecie.

http://www.microsoft.com/netmf/default.mspx

To nie są “inne ulubione metody”, tylko standard w .NET. I akurat metody z serii TryParse są fajne pod tym względem, że nie sypią wyjątkami i zwracają wartość typu bool, więc można ładnie obsłużyć błędy konwersji w programie.

Przez kilkanaście postów nie umiałeś pomóc w prostym problemie z .NET, ergo nie znasz podstaw tej technologii.

Platforma to coś, co daje podstawę dla czegoś innego. Platforma .NET daje podstawę do działania programów na nią napisanych (bo poza nią nie da się ich uruchomić). Nie widzę tu chwytu marketingowego ;]

.NET to nie tylko zestaw klas, to także całe środowisko uruchomieniowe i kompilator JIT.

Wiadomo, że nie. Ale z uwagi na to, że prowadzisz zajęcia w szkole wyższej, to zgodnie z przyjętą konwencją, należy się tak do Ciebie zwracać.

Chociaż Twoi studenci w prywatnych rozmowach mówią o Tobie całkiem inaczej. I w sumie wcale im się nie dziwię :smiley:

Daruj sobie takie porównania - nazywasz jakąś technologię syfem i nie jesteś w stanie tego udowodnić.

No więc czy w Delphi, czy w .NET można to zrobić. Więc w czym Delphi lepsze?

Nie podałeś wymagań funkcjonalnych na początku, więc pisałem po swojemu :slight_smile:

Moja kontrolka po wciśnięciu przecinka automatycznie przenosiła kursor na początek części dziesiętnej, uznałem to za wygodne zachowanie. Zmiana, o którą prosisz jest banalna, wymaga po prostu zmiany reakcji na wciśnięcie przecinka.

Proszę bardzo: http://www.somekind.pl/_upload/dp/MagicControls2.exe

Dla Ciebie to połowa możliwości Twojej kontrolki :smiley: Boję się spytać o drugą :stuck_out_tongue:

To teraz Ty doprowadź swoją kontrolkę do połowy możliwości mojej - tak, aby po zmianie lokalizacji (która po prostu udaje uruchomienie pod systemem z innymi ustawieniami regionalnymi) zmieniał się odpowiednio symbol waluty na labelu w polu tekstowym oraz sposób wyświetlania ceny w tytule okna.

A przede wszystkim - aby działało kopiuj/wklej/wytnij/zaznacz wszystko ze skrótów klawiaturowych, bo jak na razie to zaznaczać się nie da nic, wklejać liczb z przecinkiem także nie.

To raczej są ważne dla użytkownika rzeczy ;]

Mruga, jeśli ktoś jak małpa wali w klawiaturę :slight_smile: Ale ok, jeden if i po mruganiu, do kontrolki wpuścimy tylko te klawisze, które chcemy.

Możesz wyjaśnić? Bo moim zdaniem zachowuje się tak, jak Twoja.

Rozumiem, to tylko chwyt marketingowy. Nie mam więcej pytań.

No popatrz, a ja mogę w pełni dynamicznie :slight_smile: Mogę robić co chcę i gdzie chcę. Ale oczywiście C#/.NET jest gorszy :stuck_out_tongue:

Wiele ci to da, jeżeli nie możesz utworzyć, erm, czystej binarki.

Software Optimization Guidefor AMD64 Processors i Intel® Architecture Optimization to źródła, które kłamią, tak?

To znaczy, że kompilator potrafi zrobić tylko plik formatu Portable Executable.

Że nie możesz, to chyba proste…

Nie w moim mniemaniu. Czysta binarka oznacza plik który ma czysty kod maszynowy dla x86 - bez żadnych głupich nagłówków itp.

Hm prosiłem o przetłumaczenie konkretnego kawałka kodu na Delphi, aby ocenić czy rzeczywiście da się to zrobić prościej w Delphi (mniejsza ilość linii kodu źródłowego, prościej). W odpowiedzi rzucasz mi jakimiś nazwami komponentów, które jakoby to realizują, a których nawet nie mogę odnaleźć na google (szukam: http://www.google.pl/search?hl=pl&lr=&e … se&spell=1 i jakos nie widze skąd mam ten komponent ściągnąć i gdzie przejrzeć przykłady).

Ale pal licho pobieranie komponentu: napisz mi analogiczny przykład z jego wykorzystaniem - pomijam już fakt, że jakos ciezko go znalezc i ze bez niego ani rusz.

Daj mi przykład takiej serializacji (SOAP a nie jakies ch… wie co we wlasnym formacie, co to za serializacja?, program bez GUI, serializuję obiekty własnej klasy a nie jakies kontrolki na TFrame).

W VC# tez masz za darmo jak sobie VC# kupisz - nie wiem o co biega? A Delphi to za darmo rozdają? Bo o ile wiem, to w darmowej wersji instalowanie komponentów jest zablokowane , a wersja pełna kosztuje nie mniej niż VS. Chyba ze proponujesz używanie archaicznej wersji personal, ktora na to pozwalała (Delphi 6? sprzed ilu to lat?) albo zabawe w dynamiczne dodawnie komponentu bez instalowania w wersji darmowej Turbo Delphi, co de facto jest kombinowaniem w celu obejścia licencji Borlanda i w wypadku konieczności rozwijania, konserwacji, rozwijania i debuggowania złożonego projektu przyniesie same kłopoty - jeżeli to uwazasz za rozwiazanie, to jestes smieszny. Poza tym nie chce mi sie sprawdzac czy w wersji Express to jest - najprawdopodobniej nie dodałeś referencji do projektu i dlatego ci się nie kompiluje (tu moge sie mylic bo szczerze to nie wiem czy jest to w wersji Express czy nie)

Twierdzisz, ze w powaznych zastosowaniach biznesowych mam sie opierać na jakichś darmowych komponentach, pisanych przez nie wiadomo kogo, bez żadnego wsparcia i bawić się w doinstalowywanie tego do Delphi (jezeli w ogole uda mi sie znaleźć to na google i zainstaluje sie bez bledów w mojej wersji Delphi, bo oczywiscie kazda wersja to inna wersja kodu źródłowego komponentu - po co kompatybilnosc). A jak zajdzie potrzeba, zeby rozwijał to po mnie ktoś inny, to znów bedzie sie meczył z doinstalowaniem tegoż kompomenentu bo i naczej nic nie zrobi (po co przenośność, to dla idiotów)

A gdziez to? Chce samohostujący webserwis, z obsługą certyfikatów, autoryzacji i SSL i nie chce mi sie szukać jakichs komponentów - chcę to w standardzie, bo obsługa takich rzeczy to standard w dzisiejszych czasach. Pytam która wersja Delphi to zapewnia? I co to ma wspolnego z jakąś niby bazą danych w xml, wiesz w ogóle co to jest webserwis?

Zgodze sie z przedmówcami - Delphi nie jest złe, jest po prostu daleeeeko w tyle w stosunku do dzisiejszych wymagań - co prawda powstają czasami jakieś komponenty, które próbują “łatać” te braki, ale to zawsze będą tylko półśrodki, a nigdy realna alternatywa. Visual Studio oferuje pakiet naprawdę potężnych narzędzi w standardzie i żadne komponenciki do Delphi nie będa nigdy oferować tego samego - co najwyżej namiastkę.

Poza tym, tak na “chłopski rozum” - kto może stworzyć lepsze środowisko developerskie dla systemu operacyjnego, niż jego twórca? Inni zawsze będą w tyle, bo inaczej być nie może

Albo jeszcze inaczej: wystawię Ci webserwis z opisem WSDL (standard) - będziesz w stanie w pół minuty zrobić kod, który się połączy z webserwisem i wywoła jakąś metodę? W Javie nie ma problemu, w .NET zapewne też nie (choć akurat .NETa nie znam zbyt dobrze).

Masz tam jakiś komponent, za pomocą którego połączysz się z webserwisami na Hessianie (ostatnio zdobywa b. dużą popularność w stosunku do SOAPa)? Hessian obsługuje oficjalnie: Java, C++, C#, Python, Flash/Flex, D, Erlang, PHP, Ruby, Obj C. Implementacji dla Delphi tam nie ma - czyli wnioskuję, że w świecie webserwisów nikt poważnie nie zaprząta sobie nim głowy.

Masz tam coś, co pozwoli mi zbudować łatwo inny styl GUI niż domyślny Windows BEZ konieczności pisania wszystkich kontrolek od nowa? Np sześciokątne guziki? Wiele korporacji tworzy własny niepowarzalny L&F swoich produktów. :stuck_out_tongue:

Możesz korzystać ze sprzętowej akceleracji 2D/3D przy rysowaniu na formatkach, bez uciekania się do programowania bezpośrednio w DirectX / OpenGL?

Masz tam jakiś mechanizm wywołań zdalnych działający podobnie jak .NET remoting / RMI / RPC (do tego jest potrzebna m.in. normalna serializacja, nie taka udawana przez TFrame)?

Delphi IMHO można się uczyć jak ktoś lubi po prostu poznawać różne inne technologie (dla samego funu poznawania czegoś innego), ale ja po poznaniu podstawowych technologii wymaganych przez rynek (C, C++, Java lub C#, Python lub Ruby lub ew. PHP) raczej poświęciłbym czas na poznanie czegoś bardziej odjechanego - np. Haskella albo Scali.

W Visualu to kwestia importowania wsdl-a do projektu - IDE utworzy samo szablon klas (m.in. klase klienta) na podstawie zawartosci wsdla. Aby wywolac metode wystarczy stworzyc obiekt tej klasy. Jezeli chodzi o obsluge webserwisów w Delphi to nie wiem. Ale w C++ Builderze zdaje sie ze sa jakies komponenty do obslugi webserwisu (tylko jako klient), ale nigdy nie udalo mi sie ich uzyc z webserwisem WCF napisanym pod .NET lub javą - chyba opierają się na baaardzo starej specyfikacji wsdl. Oczywiscie o takich rzeczach jak autoryzacja (jakakolwiek), SSL mozna całkowicie zapomnieć. Nie wiem jak jest w Delphi, pewnie podobnie. Ze wspołparacą websewrwisu Java (Linux)<->Net (WinXP) nie ma w zasadzie problemu (schody zaczynają się przy zaawansowanych metodach autoryzacji, bo MS czasami ostro nagina standardy, ale to juz inna bajka).

Teoretycznie mozna dziedziczyc po TButton i samemu narysowac przycisk.

Co do reszty to zgadzam sie z przedmówcą

Ja chwilowo pobronię Delphi:

Od Delphi 9 (na tej wersji się zatrzymałem i to akurat pamiętam ;-)) jest for…in. Działa tak samo.

A do przechowywania informacji finansowych jest sobie specjalny typ danych Currency.

Da się. Delphi miało coś do tego, aczkolwiek trochę chore w realizacji, bo tworzyło się EXE i on działał jako CGI chyba. Ale się dawało, WebService też. Zresztą Delphi.NET ma wsparcie dla ASP.NET (kiedyś dla 1.1, pewnie teraz już dla 2.0).

Animacji na strony się nie da… chociaż jak się ktoś uprze to ActiveX i da się zrobić wszystko… pod nIEktórymi przeglądarkami :wink:

Są komponenty pozwalające ładnie stylować/skórkować sobie całą formę i tworzyć niepowtarzalny L&F. Bez konieczności pisania od nowa. Choć chyba czegoś na poziomie WPF nie ma.

Co oczywiście jest złe i jedyny słuszny look&feel to systemowy :wink:

BTW przeczytałem dzisiaj w jednym z czasopism, że Delphi 2009 dorobiło się komponentów do ribbonów w standardzie, tego to nawet VS nie ma. Jeszcze :wink:

Ano to nie do konca prawda - jest juz od dawna w Visual C++ SP1, ale tylko dla aplikacji Win32 i MFC. Jezeli chodzi o .NET, to chodza pogloski ze ma byc w .NET 4.0 - zobaczymy. Do .net sa na razie tylko płatne komponenty do ribbonów. Delphi goni, albo przynajmniej sie stara, ale lepiej by nadrobili bardziej przydatnymi rzeczami niz to - chociazby klasy do szyfrowania, webserwisów, regural expressions, serializacji czy obsługi xml - to by było imho bardziej przydatne.

A w ogóle ten ribbon to jakąś smieszna licencje ma - zdaje sie ze patent mowi, ze nie mozna tego uzyc w programach bedacych konkurencja dla MS - czyli jak upublicznisz notepad ze wstazka to moga cie pozwac - przegiecie. I dla mnie osobiscie srednio sie podoba

Z tego co mówił prelegent na ITAD-zie to nie możesz używać w programach będących konkurencją dla MS Office, znaczy się OpenOffice itp. Notepada można - choć sobie tego nie wyobrażam - może jeszcze cmd.exe ze wstążką? :wink:

Ok, koniec dygresji.

“Nauka programowania w Delphi- od czego zacząć?”

Od odpowiedniej książki.

Nie jest złe (choć może nie załapałem ironii, jeśli tak, to nie muszę tłumaczyć dlaczego). Bardzo dużo aplikacji ma własny L&F lub przynajmniej systemowy z pewnym faceliftingiem. Nawet aplikacje Microsoft (np. Microsoft Office) nie trzymają się kurczowo standardowego L&F. Inne przykłady: Skype, QuickTime, WinAmp, PhotoShop, NetBeans, Azureus. Generalnie chyba nikomu to nie przeszkadza, jeśli aplikacja wygląda ładnie i jest użyteczna.