- Az NVIDIA szerint a partnereik prémium AI PC-ket kínálnak
- Két Zen 5-ös dizájnjának mintáit is szállítja már az AMD
- A Colorful "fagyosan kompakt" alkatrészekkel megy elébe a nyárnak
- A Keychron ismét egy űr betöltését vállalta magára az egerek szegmensében
- Az átlagnál vaskosabb ventilátorok kandikáltak ki a Corsair vitorlája mögül
- Milyen CPU léghűtést vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Az NVIDIA szerint a partnereik prémium AI PC-ket kínálnak
- Kormányok / autós szimulátorok topicja
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- Milyen monitort vegyek?
- HP ProLiant MicroServer Gen8
- Milyen TV-t vegyek?
- Milyen billentyűzetet vegyek?
- 3D nyomtatás
Hirdetés
-
Eleglide C1 - a középérték
ma Szintet lépett az Eleglide, az egyébként egész korrekt M2 után a C1 sokkal komfortosabb közlekedésre alkalmas.
-
Kapnak egy rakás reklámot a Roblox játékosai
it Videohirdetésekre készülhetnek ezentúl a virtuális világokban a Roblox játékosai.
-
Spyra: akkus, nagynyomású, automata vízipuska
lo Type-C port, egy töltéssel 2200 lövés, több, mint 2 kg-os súly, automata víz felszívás... Start the epic! :)
Új hozzászólás Aktív témák
-
félisten
Hali!
Eköször inkább értelmezném a feladatot.
Szóval adott egy inteligens ház, benne inteligens eszközökkel. Kellene egy klinesprogi (házanként) ami az adott házban található inteligens ezközök adatait gyűjti össze és továbbítja a szerverig?Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
Rendben, tiszta hogy mit akarsz írni, de én a helyedbe elfelejteném a "tömbözősdit".
Erre van egy sokkal jobb megoldás: megosztott Adatbázis(interneten is). Úgy is Delphi 7-ben készíted a progit, minek szívatnád magad feleslegesen?
Ha jól kialakítod az adatbázis strukturá(ka)t, akkor nagyon egyszerűen, hibátlanul működő professzionális vezérlő-rendszert készíthetsz.Fire.
UI: Ha a "hálózaton keresztül átvinni," alatt azt érted, hogy a hálózati kommunikációt is te akarod megírni, hát ahhoz sok sikert! (az eredei szakmám rendszerprogramozó...)
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
A legegyszerűbb az az, amit javasoltam korábban. Interneten megosztani adatbázist.
Így nem kell hálozati kommunikációval foglalkozni, meg a sok sok vele járó "nyüggel".
Alapvetően nem elég megírni hogy egy byte átmenjen a neten(ez a legegyszerűbb talán), az a sok meló hogy gondoskodni kell a hibakezelésről, titkosításről, CRC hibákról stb.
(ahogy írtad, ha anyukád bekapcsolja a locsolót, akkor(CRC hibából adódóan nem azt a parancsot kapja a szerver) ne az legyen, hogy a hűtő szétfagyaszt mindent, 100 fok van a lakásban stb, csak pont a locsoló nem megy!valóban vannak előregyártott kommunikációs protokoll unit-ok, meg kell őket nézned, aztán mérlegelj hogy melyik megoldást választod. Ha ez utóbbit választod, akkor győződj meg, hogy valóban tudnak-e titkosítani, CRC hibát kezelni stb, hogy csak a legalapvetőbb dolgokat említsem. Ebben biztosan tud segíteni neked shev7.
Fire.
UI: most lelépek, csak este vagy holnap leszek.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
Sajnos a CPU Core hőmérséklet mérése az egyik "legkellemetlenebb" terület, ami abból adódik, hogy nincs egységes szabvány. Ahány "sensorgyártó", annyiféle, folyamatosan frissíteni kell a gyártók adatbázisát, mert egyébként hibás hőmérséklet értékek jönnek vissza.
Ez az egyik legjobb DLL, amit javasolni tudok, de sajnos nem ingyenes, sőt húzós az ára.
[link]Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
A FormCreate csak egyszer hajtódik végre, amikor a program indul, többször nem, és nem is lehet rá hivatkozni. Ez a kis példa arra jó, hogy bármilyen műveletet hajtasz végre az adatbázison, akkor automatikusan az Edit1-be bekerül az adott tábla rekordjainak száma.
(Ha ezt megérted, akkor pedig már egyszerűen a saját igényid szerint alkalmazhatod)procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Text:=IntToStr(Table1.RecordCount);
end;
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
Form1.OnShow(Self);
end;Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
Nem tudom, milyen verziójú a Delphi, amit használsz, Én amit írok az a Delphi 7-re vonatkozik.
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).
Nem létező komponensnél persze hogy mindig hibát dob, ezért javasolnám a statikus megoldást. Tudod, hogy max hány kép szerepelhet egy autóról, a többi dolgot meg rábízod a az adatbázismotorra. DBImage komponenst kiraksz, amennyit maximalizáltál, aztán az autók képeit tartalmazó táblából meg betöltögeted a képeket.Kellene még egy olyan adatbázis formátum ami tud több mint 255 karakternyi string mezőt tárolni (
Paradox7 táblákkal szoktam dolgozni(hacsak az ügyfél nem ragaszkodott valamiért máshoz).
MEMO field a megoldáskésőbb megoldani hogy egy autóról több képet is be tudjak drag&droppolni
Bár azt nem igazán értem, hogy honnan-hova akarsz drag-drop, de az autók fényképeinek a tárolásához Paradox7, BINARY field. Ahogy a nevéből adódik, bináris adatok, amik lehetnek, kép, hang, program, weblap, stb....., tehát bármi.Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz OtheriS #1656 üzenetére
Hali!
Az a prog amit használsz, egész biztosan telepítős változat volt. Amikor Delphi-be készítenek egy adatbáziskezelő alkalmazást, akkor csak installos válzotban adják át az ügyfélnek, mivel ahhoz hogy egy adatbázist elérj(kezelj) ún. adatbázismotorok kellenek.
(Delphi esetén a leggyakoribb a BDE - Borland Database Engine). Ezeket az adatbázismotorokat telepíteni kell. (ezeken keresztül lehet elérni az adott típusú adatbázist, kezelni az ALIAS, SESSION stb "tulajdonságokat")
hiába mented le az adatbázist meg a programot, egy teljes win telepítés után az adatbázismotor már nem lesz fenn a gépen. Ezért ezt csak úgy oldhatod meg, ha programot újratelepíted(már ha megvan a telepítős változat)Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
-
félisten
válasz cellpeti #1668 üzenetére
Hali!
Rég találkoztunk...(persze én vagyok elfoglalva)
Nem tudom milyen delphit telepítesz, de az eredeti delphi 7(nekem jogtiszta van Enterprise) biztosan nem hoz létre semmilyen temp állományt RARSFX1 könyvtárba...
Szóval, ha ez nem eredeti szoftver, akkor szerintem csak ez a gond...Fire.
UI: küldtem privet
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
Erre gondolsz? Tehát egy bárhova elhelyezhető Mainmenüt akarsz csinálni?
Ha igen, akkor írj, holnap leírom, hogy lehet megoldani egyszerűen.
(most hulla fáradt vagyok, a gépeléshez... )Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
-
félisten
Hali!
Van amikor valóban nem lehet elkerülni a karakterkódokat, az SQL parancs-sztringek esetében azonban(meg máshol is) a QuotedStr() függvény remekül alkalmazható...
Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
1. Ha az egész táblához nem akarod, hogy hozzáférjen más, amíg Te dolgozol vele akkor használd az EXCLUSIVE tulajdonságot a táblán. (Delhi súgóban részletesen)
Ilyenkor semmilyen más alkalmazás nem férhet a táblához, vagy a komplett adatbázishoz.
(igaz csak Paradox ill. dabse táblákon megy, illetve nem minden SQL szerver ismeri(már ha használsz SQL szervert))
Ha esetleg az a gondod, hogy nehogy egyidőben szerkesszétek mondjuk ugyanazt a rekordot, akkor ezen nem kell aggódni, mert ezt a BDE lekezeli, mivel abban a másodpercben amikor EDIT módba állítod a rekordot(azaz szerkeszted) már lock-olja is, mindaddig amíg CANCEL vagy POST nem lesz. Ez idő alatt nem lehet hozzáférni a rekordhoz másnak.(a tábla más rekordjaihoz igen, csak ehhez nem)2. Itt remélem egyre gondolunk, azaz ha egy rekordnak pl 10 attributuma(oszlop, mező) van, és Te csak 1 attribot akarsz módosítani benne(a maradék 9-et nem) akkor természetesen van rá egyszerű megoldás. PL:
Table1.FieldByName("ATTRIBUTUM NEVE").asinteger:=1;Remélem jól értettem a kérdéseid...
Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
Igen, jól írod, akkor csak az az egy módosul, de egyszerűbb lenne, ha nem Edit-et használnál, hanem DBEdit-et.
Ennek az objektumnak pont az a szerepe, hogy a rekord adott mezőjéhez lehet rendelni, azt automatikusan megjeleníti ill. EDIT módban módosíthatod a rekord aktuális mezőjét vele.
Így nem kell azzal foglalkozni, hogy egyenként beírd az EDIT-ekbe minden egyes mezőt, amit a form-on megjeleníteszFire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
Az ötlettel nincs semmi baj, azt hiszem értem mit nem értesz, illetve hogy miért tetted fel a korábbi kérdéseid. Nézd el nekem(és ezt nem rosszindulatból mondom, segíteni szeretnék ha igényt tartasz rá), de azt hiszem, hogy bizonyos alapvető adatbáziskezelői dolgokkal nem vagy tisztában...ugyanis:
1. Mindegy hány adatbázisod van ill. azon belül hány tábla
2. Mindegy hogy megosztott vagy sem az adatbázis vagy akár egy tábla
3. Master-Detail kapcsolatokat pont erre találták ki, mi is az?
Adott pl 2 tábla, az egyik a Master(Mester, Fő, Elsődleges, Főnök ), a másik meg a Detail(részletek, alárendelt, másodlagos), amit Master-Detail kapcsolattal összekapcsolsz.
Ezt a táblák létrehozásakor(Database Desktop) és a Delphi projectben is meg kell tenni. Abból áll(legegyszerűbb esetben) hogy mind a Master, mind a Detail táblában van két egyforma mező, ami segítségével az "összekapcsolás" elvégezhető.(azt hogy hogyan, csak akkor írom le, ha igényt tartasz rá) Mire jó is ez?
Hát arra, hogy pl az esetedben az adott bérlőhöz tartozó autóbérletek jelenjenek meg, anélkül hogy Te kezelnéd le több táblából(macerás, meg felesleges amikor a BDE elvégzi helyetted). Aztán olyan előnye is van, hogyha pl 1000 emberke kibérelte ugyanazt a kocsit, mondjuk az ABC-123 rendszámút, aztán kiderül utólag, hogy annak a kocsinak XYZ-321 a rendszáma(mert pl valaki rosszul vitte be az adatokat ), akkor nem kell mind az 1000 embernél átírni a rendszámot, csak az autók táblában 1 helyen.(persze itt is vannak beállítási kérdések, meg mérlegelni kell hogy ez megengedhető-e egyáltalán)
4. A DBEdit, DBComboBox, DBMemo,stb nem okoz nekik gondot, hogy egy másik táblából vagy a Detail táblából megjelenítsenek, módósítsanak bármelyik mezőt.Fire.
UI: mégeszer mondom(írom), nem kioktatásnak szántam, csak pár alapvető dolog segítségével, sok felesleges, macerás, magában sok hibát rejtő, időigényes feladattól kimélheted meg magad....(nem beszélve arról, hogy Delphi-ben "így kell csinálni"...
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz #95904256 #1698 üzenetére
Hali!
Megoldható emígyen:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Uses TypInfo;
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
with Form1, ListBox1 do begin
Clear;
Items.Add('A form1-en található komponensek száma: '+IntToStr(Form1.ComponentCount));
for i:=0 to Form1.ComponentCount-1 do begin
Items.Add(Form1.Components[i].Name);
with Form1.Components[i] do begin
if GetPropInfo(ClassInfo, 'WordWrap')<>nil then Items.Add('VAN WordWrap tulajdonsága')
else Items.Add('NINCS WordWrap tulajdonsága');
end;
end;
end;
end;
end.Delphi 7 ben íródott.
Kell egy TButton(Button1), TEdit(Edit1) és TListBox(ListBox1) a Formra(Form1).
Ami végülis a lényeg, az a GetPropInfo() függvény
A ComponentCount függvénnyel lekérjük a Form1-en lévő komponensek számát, majd egyenként végigmegyünk rajtuk egy ciklussal, és lekérjük az infót az adott tulajdonságról. Itt a WordWrap tulajdonságot ellenőriztem, ha a GetPropInfo nil értékkel tér vissza, akkor nincs ilyen tulajdonsága az adott komponensnek.
(Itt csak a Button-nak van ilyen tulajdonsága)
Ahhoz hogy használni tudd, kell ez a Unit: Uses TypInfo;A kód szerintem érthető, tisztán látszik hogy kell használni, ha mégsem akkor persze írj nyugodtan.
Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
Nem írtad hogy full-os dvd van, van csak "simán leszedett" változat. A fulldvd-n minden progi rajt van ami kell a telepítéshez. Olvasd el a HELP-et ott le vagyon írva, hogy miknek kell lenni előtelepítve.
Leggyakrabban két dolog "hiánya" miatt nem indul el a telepítő
MDAC 2.8
.Net 2.0Xp estében egyik sincs telepítve, Vista-nal(Ultimate) a NET 2.0 igen
Szóval első körben ezt a kettőt telepítsd felFire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Hali!
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text)
end;Fire.
UI: Mondjuk ennek semmi köze a Lazarus-hoz...
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Yodafon #1713 üzenetére
Hali!
Arra tudok gondolni, hogy egy másik unit-ban van a kódod, nem a pl Form1-t tartalmazó unit-ban.
Az a lényeg, hogy ebben a unit-ba használd a StdCtrls unit-ot, mivel ebben vannak deklarálva a Scrollbar konstansok (ssNone, ssBoth, ssVertical, ssHorizontal)
uses StdCtrls
Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Yodafon #1718 üzenetére
Hali!
Mondjuk az a "csak több dimenzióban" nem igazán tudom mire gondolsz...
Esetleg, hogy egy tartományt (range) jelölsz ki, azaz több cellát, és azon akarsz valamilyen műveletet végezni?
Ha esetleg erre akkor így lehet példul:
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage(
'A kiválasztott tartomány kezdőcellája(x,y):'+
IntToStr(StringGrid1.Selection.Left)+','+IntToStr(StringGrid1.Selection.Top)+
Char(13)+'A kiválasztott tartomány utolsó cellája(x,y):'+
IntToStr(StringGrid1.Selection.Right)+','+IntToStr(StringGrid1.Selection.Bottom)
);
end;Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Yodafon #1720 üzenetére
Hali!
vz12 leírta helyesen hogy mire kell odafigyelni.
Valamint szigorúan "eredeti" paraméterlistával:
procedure TForm1.Sajat_SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);Én annyival egészíteném ki, hogy mivel nevet is adtam az objektumoknak(stringgrid1, stringgrid2, stb) ezért van, hogy nem "akármilyen néven" hivatkozok rá(StringGrid1SelectedCell, StringGrid2SelectedCell)
Valamint a progi kilépésekor fel kell szabadítani az objektumokat.
Gyakorlatban ilyen a kód.unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure StringGrid2SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mezo:array[1..2] of TStringGrid;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
for i:=1 to 2 do begin
mezo[i]:=TStringGrid.Create(Self);
mezo[i].Parent:=Form1;
mezo[i].Name:='StringGrid'+IntToStr(i);
end;
mezo[1].Top:=20;
mezo[1].Left:=50;
mezo[1].FixedCols:=0;
mezo[1].FixedRows:=0;
mezo[1].ColCount:=3;
mezo[1].RowCount:=3;
mezo[1].DefaultColWidth:=20;
mezo[1].DefaultRowHeight:=20;
mezo[1].Ctl3D:=false;
mezo[1].Width:=64;
mezo[1].Height:=64;
mezo[1].ScrollBars:=ssNone;
mezo[1].OnSelectCell:=StringGrid1SelectCell;
mezo[2].Top:=200;
mezo[2].Left:=120;
mezo[2].FixedCols:=0;
mezo[2].FixedRows:=0;
mezo[2].ColCount:=3;
mezo[2].RowCount:=3;
mezo[2].DefaultColWidth:=20;
mezo[2].DefaultRowHeight:=20;
mezo[2].Ctl3D:=false;
mezo[2].Width:=64;
mezo[2].Height:=64;
mezo[2].ScrollBars:=ssNone;
mezo[2].OnSelectCell:=StringGrid2SelectCell;
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
ShowMessage('Első grid');
end;
procedure TForm1.StringGrid2SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
ShowMessage('Második grid');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:Integer;
begin
for i:=1 to 2 do begin
mezo[i].Free;
end;
end;
end.Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Yodafon #1723 üzenetére
Hali!
Oks, akkor figyu. Írd le légyszives, hogy mit szeretnél megvalósítani, de sima hétköznapi nyelven. pl
"Ha rákattintok a stringgrid1-re, akkor formázza le a HDD-t, ha meg a stringgrid2-re, akkor elötte kérdezze is meg, hogy leformázhatja-e...."Szívesen segítek, de most elvesztettem a fonalat pl ezért:
"Pont azt szeretném elkerülni hogy minden mezönek saját SelectCell-je legyen."
A TStringGrid objektunak nincs ilyen tulajdonsága, függvénye, procedúrája, stb
onSelectCell eseménye(event) az van, na ezt meg nem a programozó dönti el, hogy az objektummal létrejöjjön-e vagy sem. Csak azt, hogy felprogramozod vagy sem.Szóval hétköznapi nyelven írd le, hogy mit szeretnél, abból majd rájövök(remélem)
Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
-
félisten
válasz Flashback #1871 üzenetére
Ja, Én úgy vettem ki, hogy az a gondod, hogy form-on kívül vagy belül kattintottak, bocsesz.
procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState;
X, Y: Integer) ;
begin
case Button of
mbLeft:
begin
end;
mbRight:
begin
end;
end;
end;[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz RootRulez #1886 üzenetére
Nem mostanában FTP-ztem, de ha jól rémlik, akkor ez az Indy FTP Component lesz ugye?
Ha igen, akkor a PUT-al lehet feltolni fájlt, ezt ellenőrizd, mert ott meg fog jelenni a hiba.
Kivédeni ilyen eseteket úgy lehet, hogy más néven tolod fel a fájlt, majd ha az sikeresen lezajlott, akkor törlöd a régit, ezt az utóbbi feltöltöttet meg átnevezed a szerveren.Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
1. Ezzel a progival próbáld megnyitni a DBF fájlokat, hogy kiderüljön, hogy valóban adatbázis fájlok, nem csak a kiterjesztésük az. DBF Commander
2. A DBF az csak egy típusú adatbázis a sok közül, nem csak "Delphi-ben" használatos.UI: Ha az adatbázis jelszóvédett, akkor azt ki kell deríteni, avagy (ez bevett szokás) a raktárprogi esetleg jelszót kér indításakor, amely jelszó egyben az adatbázis jelszava is.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Már mint a raktár progira írod hogy "ősi" vagy a DBF Commander-re? (Ez utóbbi biztosan fut W8/8.1 x64 alatt is)
Ha a raktárprogiról van szó, azt meg ki kell próbálni. Ha valóban Delphi-ben íródott és telepítős, akkor fel kell települni a Borland Database Engine-nek is (BDE), az meg okozhat meglepetést.
Ettől függetlenül próbáld meg, ha nem menne, akkor meg Virtuális gépen biztosan futni fog(egy ezeréves Delphi 7-ben írt progim szorult fejlesztésre, ami szintén adatbázis jellegű, semmi gond(W8 x64 alatt Virtualbox)Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
ShellExecute(0, PChar('print'), PChar('d:\valami.pdf'), nil, nil, SW_HIDE);
(A PDF-nek társítva kell lennie egy alkalmazáshoz, ami automatikusan megnyitja. Az mindegy, hogy a W8 beépített PDf olvasója vagy a Foxit vagy az Acrobat...)
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Ezen nincs mit "érteni"... Sajnos ez is egy user error. A ShellExecute egyértelmű: [link]
Az, hogy ettől eltérsz vagy nem tudod, hogy hogyan kell alkalmazni, az user errror...
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
-
félisten
válasz Calogero #2001 üzenetére
Nem tudom még aktuális-e a dolog, írtam egy másik megközelítésű megoldást, talán találsz benne hasznos dolgokat, amiket a jövőben is fel tudsz használni/alkalmazni.
unit CalogeroCopyUnit;
interface
uses
System.SysUtils, System.StrUtils, Winapi.Windows;
procedure CalogeroCopy;
implementation
procedure CalogeroCopy;
const
SourcePath = 'D:\Calogero\A\';
DestinationPath = 'D:\Calogero\B\';
var
DTA: TSearchRec;
Result: Integer;
begin
ChDir(SourcePath);
Result:=FindFirst('*.*',faAnyFile,DTA);
repeat
while (Result=0) do begin
if DTA.Name='.' then begin
Result:=FindNext(DTA);
Result:=FindNext(DTA);
Continue;
end
else if ((DTA.Attr and faDirectory)<>faDirectory) and
(AnsiMatchStr(AnsiUpperCase(ExtractFileExt(DTA.Name)), ['.TXT','.DB'])) then begin
CopyFile(PChar(DTA.Name),PChar(DestinationPath+DTA.Name),False);
end;
Result:=FindNext(DTA);
end;
until Result<>0;
end;
end.UI: Delphi XE3-ban készült, így ha jóval régebbi Delphi-vel dolgozol, akkor a uses szekcióban módosítsd a unit-ok nevét SysUtils, StrUtils, Windows
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Számos oldal kínál INGYENES digitális aláírást, de azokkal nem szabad foglalkozni. "Sajnos" ezt a "jelenséget" csak úgy lehet orvosolni, hogy pl az MS-nél (avagy egyéb hivatalos szervezetnél) hivatalosan regisztrálsz és FIZETSZ érte.
Valóban vannak hivatalos oldalak, amik FREE-ként hirdetik magukat, de hidd el, hogy azok max. pár hónapig adják a hozzáférést.
Annyit viszont biztosan tudok mondani, hogy lehet, hogy egyébként meg van az un. Digital Signature(helyi/Local alkalmazásokra), de az automatikusan hálózati alkalmazásokra nem érvényes. Ha ez a szitu, akkor az illetékes ADMIN-t kell megkeresni, hogy intézkedjen. (Ha van Digital Signature egy cégnek, akkor az ADMIN ingyen tudja érvényesíteni, akár(mint ez esetben is) hálózati alkalmazások esetén is.Bocaa
Mivel nem adtál pontos megközelítést(nem biztos, hogy a beépített FX-t használod, lehet pl DX11 FX-t is stb stb), ezért most első (basic) hangon a Canvas.LineTo függvény lehet a megfelelő a számodra(nyilván a coordinate-system pontjait egy tömbben tárolod.)Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Keeperv85 #2011 üzenetére
1. Ha parancssorból futtatod, így pl: "c:\akarhol\is\van\FalloutNV.exe", akkor gond nélkül indul?
2. Registry-ből biztosan a megfelelő útvonal jön vissza a path változóba? (backslash van a végén biztosan?)
3. Biztosan szükséges az UTF8ToSys fx használata?Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz petison #2019 üzenetére
Hali!
Talán másnak még hasznos lehet...
Ez a kód kitörli a subsub menüket (amíg léteznek) a legmagasabb sorszámútól lefelé haladva.
procedure TForm1.Button1Click(Sender: TObject);
begin
if MainMenu1.Items[0].Items[3].Count-1>-1 then begin
Form1.Caption:=MainMenu1.Items[0].Items[3].Items[MainMenu1.Items[0].Items[3].Count-1].Caption;
MainMenu1.Items[0].Items[3].Delete(MainMenu1.Items[0].Items[3].Count-1);
end;
end;[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz petison #2021 üzenetére
Persze, ezért adtam a megoldást...
Törléskor nem ellenőrizted, hogy létezik-e az adott SUBMenu.. (mer' nem)
TI: lehet -1, azaz nincs adott submenu... Azt meg nem lehet törölni.procedure TMainWin.DelMenu;
var TI: integer;
begin
TI:= WinMenu.Items.Items[0].Items[3].Count-1;
WinMenu.Items.Items[0].Items[3].Delete(TI);
end;Itt nem elleőrizted az adott submenu meglétét, feltételezted(azt nem kellene), hogy van...
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2023 üzenetére
Szia!
Bocsi, de sokan alábecsülik a "túrós pacalt" és Én sem voltam sokáig(meló miatt)....
Annyi hibádzik, hogy az Invalidate után újra kell inicializálni a Canvas-t...
Amúgy meg minden OK... [link]UI: én fejlesztettem az SSDOK-t, és a Máté Jani által fejleszett Hard Disk Sentinel is Delphi-ben íródott...
UUI: Jó lenne, ezt a topikot feléleszteni, ugyanis, Linux alá is lehet fejleszteni "túrós pacal" nyelvben"...
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2025 üzenetére
Ahogy Te szeretnéd ezt kivitelezni, úgy igen, mindig újra kell létrehozni (előtte meg törölni).
De ennél lenne egy egyszerűbb módszer is, ha ScrollBar-t használnál.
Innen letölthetsz egy egyszerű forráskódot, ki is próbálhatod és világos lesz: [link]
Én a legújabb RAD studióban most kipróbáltam, működik rendesen. Lazarus is vélhetően megeszi.[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2027 üzenetére
Tehát akkor 2 dologról van szó
1. van egy pályakép, amit mozogjon/mozgatható legyen (az mindegy most a példa kedvéért, hogy a mozgatást mi váltja ki: egér/bill. időzítő stb)
2. te rá szeretnél még rajzolni a pályaképedre ilyen "puffancs"-nak keresztelt dolgokat és az alatt is mozgatható legyen a pályaképMaradjunk a korábban adott forráskódnál, mert az elég egyszerű, annyival kell kiegészíteni, hogy mindig ki kell rajzoltatni a "puffancsokat", de magát a canvas "törlését" a CopyRect belső eljárás megoldja azáltal, hogy a pályaképből általad megadott négyszög területet bemásolja (ezáltal a canvas adatait törli/felülírja) az image1 objectum canvas-ába. Ezt, mivel belső eljárás, gyorsan teszi. A CopyRect után csak újra ki kell rajzoltatni, amit szeretnél(puffancsokat).
Mindösszesen 2 sort módosítottam a korábbi forrásfájlban, ami kiír egy szöveget, meg rajzol egy kört.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
ScrollBar1: TScrollBar;
ScrollBar2: TScrollBar;
Button1: TButton;
procedure ScrollBar2Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
MyBitmap: TBitmap;
implementation
{$R *.DFM}
procedure TForm1.ScrollBar2Change(Sender: TObject);
var
RectDest, RectSource: TRect;
begin
RectDest:=Rect(0, 0, Image1.Width, Image1.Height);
RectSource:=Rect(ScrollBar1.Position, ScrollBar2.Position, Scrollbar1.Position+Image1.Width, ScrollBar2.Position+Image1.Height);
Image1.Canvas.CopyRect(RectDest, MyBitmap.Canvas, RectSource);
Image1.Canvas.TextOut(20,MyBitmap.Height div 2,'Ez itt egy szöveg, amit mindig ki kell iratni');
Image1.Canvas.Ellipse(30,30,80,80);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyBitmap:=TBitmap.Create;
MyBitmap.LoadFromFile('factory.bmp');
Image1.Picture.Bitmap.Assign(MyBitmap);
ScrollBar1.Max:=MyBitmap.Width-1-Image1.Width;
ScrollBar2.Max:=MyBitmap.Height-1-Image1.Height;
end;
end.Szóval nem az a lényeg az egészben, hogy Scrolbar-t használsz-e vagy sem, hanem hogy a CopyRect eljárást használd.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2029 üzenetére
Ehhez fel kell majd raknom a Lazarus-t, mert ezt a kódot a Delphi biztosan nem eszi meg.
Első ránézésre nem látom okát, hogy miért húznák a csíkot a puffancsok.
Ami (mint írtam, ránézésre) hiba lehet (hacsak nem szándékos), az
1. nem annyi puffancsot jelenítesz meg, mint amennyit betöltesz fájlból
2. szvsz amikor egyik irányba mozognak a puffancsok, akkor zsugorodni fognak, másik irányba meg visszanyerik eredeti méretüketHa lesz egy kis kedvem hozzá, akkor megnézem mi a helyzet gyakorlatban, aztán majd jelentkezem.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2031 üzenetére
Szia!
Hát megnéztem (Lazarus fel(x64), konfig (mert az alap xar)), hát itt nincs semmi "puffancs" húzás...
Mondjuk a CopyRect esetedben nem is alkalmazható... Azt ki kell "kommentezni" az Invalidate-t meg engedélyezni.
Az a módszer, amit alkalmazol, több helyen vérzik. nem tudom egyenként leírni, hogy mi a gond(tudom, csak hosszú), ezért linkelek egy HSZ-t (Ő egyébként DX FX-ben is otthon van)[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Nem hinném, hogy tolonganának a versenyzők, akik még D4-t használnának, úgy általában sem, de amúgy mi lenne a kérdés?
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2045 üzenetére
Nem Lazarus, hanem RAD Studio (Delphi), de a lényeg ugyanaz.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormResize(Sender: TObject);
Const
Panel1TopGap = 8;
Panel1BottomGap = 8;
Panel1LeftGap = 8;
Panel2RightGap = 8;
//Panel1 és Panel2 közti távolság
Panel1Panel2Gap = 8;
begin
Panel1.Top:=Panel1TopGap;
Panel2.Top:=Panel1TopGap;
Panel1.Left:=Panel1LeftGap;
Panel1.Width:=(Form1.ClientWidth-(Panel1LeftGap + Panel1Panel2Gap + Panel2RightGap)) div 2;
Panel2.Width:=Panel1.Width;
Panel2.Left:=Panel1LeftGap+Panel1.Width+Panel1Panel2Gap;
Panel1.Height:=Form1.ClientHeight-(Panel1TopGap + Panel1BottomGap);
Panel2.Height:=Panel1.Height;
end;
end.Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2048 üzenetére
"...(bár nekem nem pont a főablak felényiek a PaintBoxok)..."
Akkor ezt a sortPanel1.Height:=Form1.ClientHeight-(Panel1TopGap + Panel1BottomGap);
cseréld erre
Panel1.Height:=(Form1.ClientHeight-(Panel1TopGap + Panel1BottomGap)) div 2;
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Fire/SOUL/CD #2049 üzenetére
"...(bár nekem nem pont a főablak felényiek a PaintBoxok)..."
Ahhh, benéztem, vedd tárgytalannak az előző hozzászólást...Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2051 üzenetére
1. A div 2 azért van, hogy a 2 objektum (esetedben PaintBox-ok (továbbiakban PB)) egyforma méretűek legyenek, szóval ezt nem kell módosítani.
2. Ha azt szeretnéd, hogy ne pont a Form1.ClientWidth fele legyen a PB-k szélessége (vízszintesen), akkor a Panel2RightGap értékét kell megnövelni, Én most 200-ra tettem (majd alább a képeken látszani fog)
3. A Form1.OnCreate eseményére nincs szükség, mert az OnResize is lefut a progi indításakor, az meg elintézi egyből a méretezést (ez is majd képen látszódik).
4. A 2. pontban leírtaknak akkor van értelme, ha a 2 PB mellett még van(nak) objektum(ok) és azok méretét fixen akarjuk tartani, csak a PB-k méreteződjenek át.
(Itt a példában egy balra igazítot Panel-n elhelyezett 8 gomb marad fix méreten)IDE-ben így néz ki, a PB-k össze-vissza, méretük sem egyforma
OnResize automatikusan elrendezi a PB-k helyzetét, méretét progi futtatásakor
Vízszintesen méretezve | Függőlegesen méretezve | Mindkét irányban méretezveSzóval ha esetleg dobnál egy képet a progidról, ahol látom, hogy milyen a Form felépítése (milyen objektumok vannak, hogy néz ki), akkor talán könnyebb lenne segíteni.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2066 üzenetére
A Pixels a SetPixel és GetPixel függvényekre támaszkodik, a Graphics unit-ban találhatóak.
property Pixels[X, Y: Integer]: TColor read GetPixel write SetPixel;
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2070 üzenetére
Így első nekifutásra az elv jónak néz ki, csak mégsem jó az arány, amit okozhat ennek a sornak a hibája:
radnezetmag:=((opanelkep.width-4)*form1.height) / palyakep.canvas.height;
opanelkep.width-4
helyettopanelkep.height-4
kellene...Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Fire/SOUL/CD #2071 üzenetére
Ehhh, egy "kicsit" régi hsz-ra válaszoltam...
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz Tomi_78 #2073 üzenetére
Azt tudom javasolni Én is, amit vz12 kolléga is, ne foglalkozz futásidejű létrehozással (már ami a popup-okat illeti), sokkal egyszerűbb IDE-ben, a TpopupMenu objektumot használni, ebből annyit dobhatsz a form-ra, amennyit csak szeretnél, duplaklikkel meg szerkesztheted őket a beépített editorral ( elem neve, felirata és minden egyes elem onclick eseményét is). Mindenféle programozás nélkül, ha hozzárendelsz egy pl. Button-hoz egy popup-t(egyszerre értelem szerűen csak 1-t, de a létrehozott popup menük közül bármelyiket futás időben is
Button1.PopupMenu:=TPopupMenu(PopupMenu2);
), akkor az úgy fog működni, hogy a gombon jobb egérrel kattintva fog megjelenni.
Le is lehet tiltani (futás időben is, ha ez az igény), hogy megjelenjen avagy sem jobb egérre, ehhez az AutoPopup tulajdonságot lehet használni, pl:Button1.PopupMenu.AutoPopup:=False;
, ez elrejti a Button1 popupját...[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
Új hozzászólás Aktív témák
- Háztartási gépek
- Milyen CPU léghűtést vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Az NVIDIA szerint a partnereik prémium AI PC-ket kínálnak
- Ukrajnai háború
- WLAN, WiFi, vezeték nélküli hálózat
- Kormányok / autós szimulátorok topicja
- Helldivers 2 (PC, PS5)
- iPhone topik
- Megjelent az iOS 17.4, minden idők egyik legfontosabb iPhone-frissítése
- További aktív témák...