Új hozzászólás Aktív témák
-
Prego
senior tag
Sziasztok, most kezdtem el szakdogámat írni egy cégnél(Delphi), remélem a legnehezebb résszel kezdtem:
Szal egy olyan progit írok ami autók bérbradásával foglalkozik.
Olyan komponenst szeretnék csinálni, melyben ki lehet jelölni azt az időszakot amiben a bérlőnél van az autó:
Az eladó kiválaszt egy hónapot, pl 2008 augusztus, és annyi oszlop jelenik meg ahány napos a hónap (ezt már le tudom kérdezni Delphiben), és annyi sor, ahány autó van (ezt majd persze adatbázisból kérdezi le)
A bérlő azt mondja hogy XY autó kell neki aug 11-25. között, akkor az eladó egérhúzással kijelöli a naptárban a kérdéses napokat az autó sorában, majd felugrik egy párbeszédablak ahova be kell írni a bérlő nevét/telszámát és hogy érdeklődő e, vagy ki is fizeti az előleget (ennek van színkódja, mondjuk érdeklődő:szürke, fizetett: zöld, úton van már: piros). A párbeszédablak bezárása után a megfelelő cellák egyesülnek, kiszineződnek és beleírják a bérlő/érdeklődő nevét. Persze utólag egy kattintással vissza lehet hívni a párbeszédpanelt és megváltoztatni a színt, vagy törölni egy visszamondott bérlést/érdeklődést.
Eddig ezt a cégnél egy Excel táblával oldották meg, és bevált a módszer, az egész hónap átlátható (persze ha egy bérlés átnyúlik köv hónapra, akkor valahogy meg kéne jeleníteni a kérdéses napokat.
Valahogy így kéne kinéznie.
Már nézegettem a StrinGridet meg a DrawGridet, de valahogy egyik sem felel meg: nem lehet cellákat egyesíteni, hogy a név középre kerüljön, és nem tudom összehúzni akkorára a cellákat hogy beleférjen egy hónap a képernyőbe.
Ha valaki tud segíteni azt megköszönném a jövőben várhatóan lesznek még kérdéseim[ Szerkesztve ]
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Letöltöttem egy ingyenes komponenst ICGrid ami nagyon teszik a demója alapján, azt hiszem telepíteni is sikerült Delphi 7 alá, és a komponens palettában is látom őket.
Viszont amikor a Example mintafájlt meg akarom nyitni, akkor a követekző hibaüzeneteket kapom:
Error reading ICGridCalendar1.ExplicitLeft: Property ExplicitLeft does not exist. Ignore the error and continue?
Ugyanez az ExplicitWidth, ExplicitHeight propertykre is igaz.
Ezekre viszont sehol sem leltem a kimöritett állományok tartalmában.Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Egy rémálom, kódot kell analizálnom:
Van egy invalidate metódus az egyik Unitban:private
ForiginChanged: TNotifyEvent;
...
public
constructor create;
procedure invalidate;
...
published
property originChanged: TNotifyEvent read ForiginChanged write set_originChanged;procedure TOrigin.invalidate;
begin
if assigned(originChanged) then begin
originChanged(self);
end;
end;procedure TOrigin.set_originChanged(const Value: TNotifyEvent);
begin
ForiginChanged := Value;
end;Persze mondanom sem kell hogy néhány másik metódusban úgyanúgy szerepel az invalidate parancs, egyértelműen azért hogy a komponenst újrarajzolja. Akkor a fent definiált procedure mire való? Amúgy ezt az összevissza kavalkádot valahogy nem látom át, emiatt nem tudom mit csinál, hiába vetem össze az általam tanult és tanulmányozott forráskódokkal
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Olyat kéne megoldanom, hogy amikor elindul a program, lekéri hogy az adatbázisban hány jármű szerepel, és annyi TImage és mondjuk Memo-t tesz ki a formra. Gondolom a Form1.Create-ot kell megírnom.
Egyszerűsítve:
Van egy I: Integer változóm, és azt szeretném hogy annyi Button jelenjen meg a Form-on, amekkora a szám.Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
válasz Gyuri16 #1644 üzenetére
Köszi, már ez is működik.
Úgy csináltam a programot, hogy van egy .../source/login/login.exe progi, amin van néhány gomb, melyek a különböző modulokat indítják. Az egyik modul a .../source/cars/cars.exe, az autókat tárolja, BDE Paradox7 adatbázisban. A Cars.DB is ebben a mappában van, a progi látja is, viszont ha a login-ből indítom, akkor kiírja hogy nem találja az adatbázist a .../source/logins/cars.DB elérésen, de a progit aztán elindítja csak hát se felvenni se semmit nem lehet vele csinálni.
Az indításhoz használt parancs:
ShellExecute(Handle, 'open', '..\cars\cars.exe', nil, nil, SW_SHOWNORMAL).
Amúgy is bajosabb lesz az adatbázis a késöbbiekben, mert egy másik számítógépen lesz, mint a futó program, nem tudom hogy a BDE tudja e alapból a kliens-szerver dolgot, vagy kénytelen leszek külön szerverprogit összedobnom.Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Haladok:
Most úgy néz ki a progi hogy van egy Unit1+Form1 és egy Unit2+Form2 egy projekten belül.
A procedure TForm1.FormCreate(Sender: TObject);-be bepötyögtem azt hogy kérdezze le adatbázisból hány autó van, tegyen ki annyi Image-t képekkel, némi infóval mellette. Új autó Felvitele menüponthoz a Form2.Visible:=true; van, bejön az ablak, kitöltöd adatokkal, és nyomok egy felvitelt, bezárodik a Form2, de a Form1-en nem jelenik meg az új autó, csak ha újrainditom az egész programot (vagyis újra meghívódik a Form1.Create).
Hogy lehetne ezt megoldani?
Gondolom a Form1.FormCreate-et kell újra meghívnom, csak nem tudom milyen paraméterekkel.Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
válasz Fire/SOUL/CD #1649 üzenetére
Köszi szépen, megint előbbre jutottam.
Nah kezd már pofásodni a dolog, most már gyönyörűen egymás mellett jelennek meg az autók, ha a képre kattintok akkor új ablakban megjelennek az adatok.
Viszont felmerült a törlés kérdése, és persze akkor az egész cuccokat újra kéne rajzolni a formon. Szal az lenne a legjobb, ha felvétel/módosítás/törlésnél az összes dinamikus komponenst megszüntetni, és újra lekérdezi az adatbázisból, meg kirajzoltatni. A Destroy parancs gyönyörűen működik, gond csak avval van, hogy hibát dob ki, ha nem létező komponensre hívom meg (pl: program indításnál).
Kellene még egy olyan adatbázis formátum ami tud több mint 255 karakternyi string mezőt tárolni (képek elérési útját tárolni), meg később megoldani hogy egy autóról több képet is be tudjak drag&droppolni (a cél a használtauto.hu szerű, kisképek lent, ha rákatt akkor nagyban megjelenik).
Nameg rájöttem hogy drága jó iskolámban (nem mondok nevet) tök jó hogy megtanítottak egy csomó ilyen olyan algoritmust (mátrixok láncszorzása, 8királynő, életembe nem fogom használni algoritmus), és még jól meg is szivattak vele, de ettől még könnyen kezelhető GUI-t nem tudunk készíteni, már amikor szálkezelés meg komponenskészítés került szóba, csak hümmögtek meg kopiztak a tanárok ...
Így hát kénytelen vagyok titeket zaklatni[ Szerkesztve ]
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
válasz Fire/SOUL/CD #1651 üzenetére
Én most CodeGear 2009-et használok
Úgy tűnik sikerül megoldanom a dolgot, Létrehozok egy dinamikus array of "Componentname"-t és avval lehet buherálni. [link]
Talán más is hasznát veszi.Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Az egy dolog, csak én eddig sima ciklussal, tömb nélkül hoztam létre a formon a komponenseket, a bajok akkor jöttek elő, amikor az adatbázisban változatásokat eszközöltem, és az összes komponensnek megváltozott a helyzte egymáshoz képest, mivel a Destroy parancsot nem lehet csak úgy kiadni.
Most viszont egyszerűen felszabadítom a töböt, aztán újra létrehozom a komponensekkel. ...Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Memo box-ba (illetve Stringbe) akarok iratni aposztrofot tenni (SHIFT+1), mi a kódja?
KösziAki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
válasz Fire/SOUL/CD #1674 üzenetére
Köszi, a #$27 volt a jó megoldás.
Sajnos az SQL házimhoz kell rekordokat generáltatnom (100 darabot vigyen fel kézzel a ...)
Memo1.Lines.Add('INSERT INTO rent VALUES('+#$27+bYY+bMM+bDD+#$27+','+....)
Szal a ''' kiakadt. Mindegy ....
KösziAki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
válasz seepheerd #1677 üzenetére
Ha a vesszővel elválasztott rekordok beolvasása okoznak gondot:
type konyv = record
szerzo : string;
nev : string;
ar : word;
end;while not eof(f) do
begin
inc(i);
readln(f,s); //beolvassuk s segésztringbe az aktuális sort
t[i].szerzo := copy(s,1,pos(',',s)-1); //a pos fv. megmutatja hogy hányadik bötű a ,
delete(s,1,pos(',',s));
t[i].nev := copy(s,1,pos(',',s)-1);
delete(s,1,pos(',',s));
t[i].ar := strtoint(s);
end;
closefile(f);Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
válasz seepheerd #1679 üzenetére
procedure TForm1.Hozzrs1Click(Sender: TObject);
begin
Assignfile(f,'c:\Temp\adat.txt');
append(f);
seek(f,Filesize(f)); ///evvel megyünk a szöveges fájl végére ....
Write(f,Eidt1 text+' '+Edit2.text);
Closefile(f);
end;Hát ezt a szűrést konkrétan nem értem, de nem is a szöveges fájlkezelés témakörbe tartozik ....
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Ha már itt vagyok, felteszek két kérdést:
-Hálózatos progit írok (BDE), az adatbázis fájlok (.db, meg a képek és a PDOXUSRS.LCK) azon a gépen vannak egy megosztási mappában (sima XP prof), amelyik a legtöbbet fogja használni őket, viszont van egy másik XP-s gép (amin a progit fejvesztem), meg a főnök Vistás masinája. Úgy oldottam meg hogy minden tranzakció előtt tábla.open, utána meg tábla.close. gondolom elég kicsi a valsége annak hogy két ember tizedmásodperces pontossággal akarja ugyanazt a táblát használni, vagy érdemes lenne mindenféle Timert beleépíteni a progiba?-Ha a felületen módosítom egy rekord valamelyik attribútumát (legtöbbet Editboxban), visszaírásnál az egész rekordot vissza kell írnom, vagy van olyan eljárás ami megjegyzi melyik editbox tartalma lett módosítva és nem kell annyi kódot kopizni?
Köszi
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
válasz Fire/SOUL/CD #1682 üzenetére
Az első kérdésben akkor megnyugodtam.
A második nem is az adatbázis részben fontos, hanem az hogy beolvasok és kiiratom a 10 attributumot a formra, 10 EditBoxba, majd a Formon átírom az egyik értékét, és amikor a modosít gombra kattintok, ne mind a 10 attríbutumot írja felül, csak azt amelyiknek megváltozott a tartalma, tehát ne az legyen a módosítás kódja hogy:
Table1.FieldByName("ELSŐ ATTRIBUTUM").asinteger:=1;
Table1.FieldByName(" MÁSODIK ATTRIBUTUM").asinteger:=1;
Table1.FieldByName("HARMADIK ATTRIBUTUM").asinteger:=1;
Table1.FieldByName("NEGYEDIK ATTRIBUTUM").asinteger:=1;
Table1.FieldByName(" ÖTÖDIK ATTRIBUTUM").asinteger:=1;
Table1.FieldByName("HATODIK ATTRIBUTUM").asinteger:=1;
....hanem csak
Table1.FieldByName("EDITHEZ TARTOZÓ ATTR").asinteger:=Megváltoztatott Edit;Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
válasz Fire/SOUL/CD #1684 üzenetére
Hát akkor ötlet elvetve, mert több táblából dolgozik a gép (autók+bérlők = bérlés)
szal van ComboBox is ....Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
válasz Fire/SOUL/CD #1686 üzenetére
Köszi az elméletet, lehet majd nyáron átbabrálom a szakdogámat. Suliban még nem volt téma ez a mestertábla, sőt arra ösztökélnek minket hogy összetett kulcsokat használjunk, majd akkor utánanézek ennek is ...
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
A képen a (teszt)adatbázis látható, gondolom minden kiderül róla.
A bajom az, hogy amikor azt a parancsot adom ki hogy:
SELECT WORK FROM service.db WHERE PLATE ='KWG-183'
Akkor kiakad, Invalid use of keyword Token: WORK Line Number: 1
Ha SELECT * al próbálom megoldani, akkor mindent szupi, meg akkor is ha a WORK kivételével az összes mezőt beteszem a SELECT-be.
Adatfelvitelnél már nem is említem hogy kiakad ...
Mégse akar képet ... Paradox 7 Tábla, TQuery komponens, SDATE (dátum), PLATE (AlphaNumerikus(7)), WORK(Alphanumerikus(100), PRICE(Number) mezőkkel.[ Szerkesztve ]
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
nah újabb probléma: olyan kis progit fejlesztek, ami különböző helyeken található exe fájlokat indítana el. Próbáltam már a ShellExecute és a CreateProcess parancsokat, de mindkettő rosszúl akar működni. Vázolom:
Van a login.exe, ami futtatná a többit (6 gomb van rajta ...)
Van a cars.exe egy másik mappában, ami használ különböző fájlokat (relatív hivatkozással). A database.dat fájlt, ami az adatbázisok helyét mutatja meg teljesen jól működik, az adatokat lekéri, van viszont egy olyan jpg fájl, ami a beviteli formon jelenik meg, amikor alaphelyzetbe hozom. Ez utóbbit viszont a login.ex mappájában keresi.
Valami ötlet ha érthető voltam?Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Érdekes: két táblát használok: az egyikben az autók szerviztörténete található, minden tevékenységhez tartozik egy ár is (service.PRICE) A teszttáblába 9 rekord található, az árak 100 ... 900 (egyszerűség kedvéért az összegük 4500).
A másik tábla a házipénztárat tárolja (kivétel, betét) (cash.EPRICE)Ha azt a parancsot adom ki hogy:
SELECT
SUM(service.PRICE)
FROM service
Akkor kiadja a 4500 (jó) megoldást. Ha viszont azt adom meg hogy:
SELECT
SUM(service.PRICE)
FROM service, cash
akkor már 9000-et ad vissza (akkor is ha még csinálok egy lekérdezést a cash táblából).Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Asszem némi felvilágosításra szoroluk paraméterátadás terén
Van egy tömböm, golobális változóként: Kepek: array of TImage;
Amikor új képet húzok be a ScrollBoxba, akkor először lementi a képet a megfelelő mappába, majd, kiüriti a tömböt (letörli az összes addigi képet), és újra kipakolja őket.
Ha a következőképpen hívom meg a törlést:
procedure TForm2.EmptyArray (T: array of TImage);
var i : Integer;
begin
for i := Low(T) to High(T) do
begin
T[i].Free;
T[i] := nil;
end;
End;
...
EmptyArray(Kepek);Akkor ugyan megjeleníti az új képeket, viszont úgy, hogy a már létező képek fölé rakja (itt ott kilóg az előző képek széle).
Ha viszont úgy hívom meg hogy:
procedure TForm2.EmptyArray;
var i : Integer;
begin
for i := Low(Kepek) to High(Kepek) do
begin
Kepek[i].Free;
Kepek[i] := nil;
end;
End;
...
EmptyArray;Akkor minden szépen végbemegy.
A baj az hogy nem csak egy képes tömböm van, és az első megoldás valamivel csinosabb lenne ...
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Mármint az eljárás fejlécét vagy a meghívását?
Közben felmerült egy kis gondocska, leszedtem az európai országok zászlóit és ezeket szeretném ráhúzni a formomra. Mivel ezek nem fognak változni, ezért nem dinamikus komponensekkel kéne dolgoznom, hanem statikus TImage és CheckBox komponensekkel. Van e arra lehetőség hogy a komponenspalettáról egyszerre több komponenest rakja rá a panelra, vagy kénytelen leszek egyesével ráhuzogatni?
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Most tartok ott hogy nem tudom mi a kérdésem, inkább vázolom a tényeket:
készülődik a szakdoga progim, MS Access adatbázist használ, mellete még vannak képek és Word, Excel doksik, amiket generál.
Fősulin gyönyörűen megvitatjuk a jogosultságkezelés minden csínját - bínját, de gyakorlati megvalósítás nem igazán került még napvilágra.
Jelen pillanatban az adatok egy megosztott meghajtón vannak a 3 számítógép egyikén a hálózatban, ADO komponensekkel dolgozom. Szóval kéne valami jogosultságkezelés hogy ki törölhet, ki írhatja az adatokat, illetve ki csak olvashatja. Ezen kívül valami titkosítás sem ártana, mivel bárki becsatlakozik a hálózatba (nem nehéz), megnyithatja az adatbázist egy MS Accessel.
Milyen úton induljak el?Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Dinamikus tömböt szeretnék átadni:
procedure TForm1.Tombfeltolt;
var i,Tombhossz:integer;
begin
Randomize;
Memo1.Lines.Clear;
Tombhossz := Random(100);
Memo1.Lines.Add(IntToStr(Tombhossz)+' számú elemű tömb létrehozva');
SetLength(T,Tombhossz);
for I := low(t) to high(t) do
begin
T[i] := Random(1000);
MEmo1.Lines.Add(IntToStr(T[i]));
end;
MEmo1.Lines.Add(IntToStr(i)+' elem feltöltve');
end;procedure TForm1.Button2Click(Sender: TObject);
var Tomb:Array of Integer;
begin
Tombfeltolt(Tomb);
end;SetLength-nél kiírja fordításnál hogy Incompatible types. Ez csak egy példaprogi, az eredetiben a Tombfeltölt egy másik Unitban van, tehát nem tudom megadni globális változóként.
Aki másnak vermet ás az a Stack Pointer
Új hozzászólás Aktív témák
- Milyen egeret válasszak?
- Mikrotik routerek
- Hagyományos és extrém roller, kickbike, Boardy topik
- DIGI internet
- Xbox Series X|S
- Android alkalmazások - szoftver kibeszélő topik
- Google Pixel 8 Pro - mestersége(s) az intelligencia
- Azonnali processzoros kérdések órája
- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- PlayStation rajongói nyereményjáték
- További aktív témák...