Hirdetés
- Felháborodott az Apple, a Meta az iPhone-felhasználók üzeneteit akarja olvasni
- A luxusmárkáknak kell a bitcoin, az USA jegybankjának nem
- Letiltja az USA a politikusokat a telefonhívásokról és szöveges üzenetekről
- Nagy áttörés jön a napelemek piacán, nem kell annyi hely a paneleknek
- Belenyúlt az USA az Epic Games igazgatótanácsába, nyomoz az NVIDIA
Új hozzászólás Aktív témák
-
lacko81
tag
Kezdő vagyok még a témában és néhány kérdésemre szeretnék választ kapni.
String --> Ascii kód ---> Bináris szám konverzióra lenne szükségem. De valamiért az IntToBin függvény nem működik. Azt írja ki, hogy nincs deklarálva ez a függvény, olyan mint ha nem is ismerné... az IntToHex az működik.
A másik kérdésem, hogy vannak-e a Delphiben bit- műveletekre függvények? Jobbra-balra Shiftelés, Set-Bit, Clear-Bit és ilyesmikre gondolok.A recipriverzexkluzíva egy olyan szám, amely önmagán kívül minden más számmal egyenlő.
-
ViragL
tag
Van egy hatalmas problémám BDS2006 alatt, a probléma tehát a következő:
Adott 1 form, amin van 1 TdxDockSite , amelyre Align = alClient. A docksite-ban van
1 TdxDockPanel.
Ha ebből a formból származtatok egy új formot, és ráteszek még 1
dockpanelt, akkor látszólag minden rendben, szépen le is dokkolja, úgy
ahogy azt eredetileg akarjuk, de amikor el akarom menteni a formot, akkor a következő kivételt dobja: ''A component named dxDockPanel1 already exists''.
A dolog érdekessége az, hogy a dxDockPanel1 nem más, mint az ősön elhelyezett dockpanel, tehát úgy tűnik, mintha az új dockpanelt ugyanolyan néven akarná beszúrni
mentéskor a dfm-be. Lényegtelen a név, ha átnevezem pl dpRecord-ra, akkor meg arra a névre
dobja a kivételt.
Ötlet, tipp, javaslat?
Még annyi, hogy DevExpresses komponenseket használunk, de azt már kizártuk, hogy a hiba komponensekben van. -
veterán
köszönöm a válaszaitokat, majd este kipróbálom
-
bevik
csendes tag
2. Származtathatsz új komponenst a TrackBar-ból, amibe megírod az OnMouseUp eseményt, és a Position értékét OnKeyUp és OnMouseUp-nál olvasod ki.
3. uses ... Jpeg, GifImage;
Hogy működjön, töltsd le valahonnan a GifImage.pas-t. (a .png-t én sem tudom)
[Szerkesztve]Mindig legyél a legjobb abban amit csinálsz.
-
veterán
pár kérdésem lenne:
1. a savedialog-nál hogyan lehet megcsinálni hogy ha olyan fájlra akarsz menteni ami már létezik akkor rákérdezzen hogy felülírja-e
2. trackbarnál vagy minél (húzgálni lehet a pöcköt rajta, s állítja az értéket...) azt szeretném megcsinálni, hogy ne folyamatossan állítsa, hanem mikor elengeded az egér gombját
3. ja és a végső jelentlegi gond, hogy van egy openpicturedialogom ami elméletileg tud gif, png és jpg képet megnyitni tudtommal. a megnyitott képet átadom egy image-nek ahova azt ő szépen kirajzolja, viszont csak bmp képet tudok megnyitni -
s-cy-net
csendes tag
válasz Tele von Zsinór #1490 üzenetére
Elnézést kérek mindenkitöl. Töbé nem fordul elő. Ami az árakat illeti,messze nem ijen olcsó,mint ahogy azt bevik állitja. Majd 120$!
Remélem el nézitek.
s-cy-net@hotmail.com -
bevik
csendes tag
válasz s-cy-net #1488 üzenetére
Ezt azért nem kellett volna
Max 2 percembe került megtalálni gugli barátunkkal.
De hogy még a terjesztés tiltására való figyelmeztetést is bemásoltad, hát ez lol.
''distribution of all or any portion of the code contained in this file is strictly prohibited and may result in severe civil and criminal penalties and will be prosecuted to the maximum extent possible under the law''
Az árakról pedig: 16$ a lefordított unitért, vagy 26$ a forrásért sztem igazán nem sok, főleg hogy súgót és támogatást is kapsz hozzá.
De ha sok, akkor nem nagy kunszt megírni Tele von Zsinór adott jó ötletet. Lehet hogy nem lesz univerzális és profi, de a te alkalmazásodba biztos elég lenne.
Vagy ha egy ilyen apró kihívás megtántorít, akkor felejtsd el ezt a pályát!Mindig legyél a legjobb abban amit csinálsz.
-
s-cy-net
csendes tag
Moderálva. - Race
Ezt nem kellett volna!! -
s-cy-net
csendes tag
válasz Tele von Zsinór #1484 üzenetére
ok. már meg oldottam. A következőből kell ki indulni:
type TWindowHook = function(var Message: TMessage): Boolean of object;
type
TMessage = packed record
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;
[Szerkesztve] -
s-cy-net
csendes tag
helo .
kösz a tippet,de egyre jobban szorít az idő. Ha esetleg valakinek megvan a FormMagnet komponens,persze (Full pas-ra számitok pedig nem dcu-ra) s-cy-net@hotmail.com ezen a cimen jelentkezzen. Igazán rendkivüli komponenseket adhatok cserébe mint( TSynEdit_full package, stb.)
[Szerkesztve]
[Szerkesztve] -
s-cy-net
csendes tag
Helo mindenkinek
Tudna-e valaki tippet adni,hogyan lehet 2 Form mágnesezése.
Szóval, mint a Winampnál össze ragadjonak. FormMagnet komponens nélkül?
Elöre is kösz!
[Szerkesztve] -
csewe
csendes tag
köszönöm hogy enyi energiát szántál a problémám megoldására a kódot kinyomtattam megpróbálom átrágni rajta magam de eléggé megijedtem mikor megláttam enyi kinlódás csak mert xp van a gépen már klomolyan fontolgatom hogy visszalépek win 9x verzióba mert ott könnyedébn megoldottam volna gondolom megvan a teljes progikód neked ha nem nagy gond átkűldhetnéd privát az emeil.emre hogy kísérletezhessem vele a problémát egyenlöre megoldottnak takintem míg ez ellenkezöje ki nem derül
mindent köszi
szia -
P.H.
senior tag
_READCOMM-ban és _WRITECOMM-ban:
result:=GETOVERLAPPEDRESULT(com.handle,com.overlap,moved,false);
(nem látszik a vége), és az utolsó sor mindkettőben:
if not result then size:=moved; end;
(not kimaradt).Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
P.H.
senior tag
Valóban megáll LPT portnál, ha nincs rádugva semmi, illetve ha a ''az én cuccom pedig nem válaszol csak végrehajt'' azt jelenti, hogy nem billenti meg az ACK vonalat sem, akkor megoldás az overlapped (magyarul aszinkron) I/O.
Kérdés: azt nem írtad, hogy a jel kiment azért?
Az overlapped I/O-t inkább ide írom, még hasznos lehet. 4 kis rutin, ezek mennek LPT-re és COM-ra is, illetve a COM-ra lesz még egy kis toldalék.
..uses Windows;
..type
....TCOMM = record
........Handle: THANDLE;
........TimeOut: DWORD;
........Overlap: OVERLAPPED;
........State: DCB; end;
..const
....COMM_SUCCESS = 0;
....COMM_OPEN_FAILED = 1;
....EVENT_CREATION_FAILED = 2;
....COMM_STATE_SET_FAILED = 3;
{===================================================================}
..function _OPENCOMM(PortName:PCHAR; var Com:TCOMM): byte;
....begin
......result:=COMM_SUCCESS;
......ZEROMEMORY(@com,sizeof(com));
......com.handle:=CREATEFILE(portname,
..........(GENERIC_READ or GENERIC_WRITE),
..........0,
..........nil,
..........OPEN_EXISTING,
..........(FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED),
..........0);
......if com.handle = INVALID_HANDLE_VALUE then
........result:=COMM_OPEN_FAILED
......else begin
........com.overlap.hevent:=CREATEEVENT(nil,true,false,nil);
........if com.overlap.hevent = 0 then begin
..........result:=EVENT_CREATION_FAILED;
..........CLOSEHANDLE(com.handle); end; end; end;
{===================================================================}
..procedure _CLOSECOMM(var Com:TCOMM);
....begin
......CLOSEHANDLE(com.overlap.hevent);
......CLOSEHANDLE(com.handle); end;
{===================================================================}
..function _READCOMM(var Com:TCOMM; var Size:DWORD; var Dest): boolean;
....var Moved: DWORD;
....begin
......RESETEVENT(com.overlap.hevent);
......result:=READFILE(com.handle,dest,size,moved,@com.overlap);
......if not result and (GETLASTERROR = ERROR_IO_PENDING) then
........begin
........WAITFORSINGLEOBJECT(com.overlap.hevent,com.timeout);
........result:=GETOVERLAPPEDRESULT(com.handle,com.overlap,moved,false);
........end;
......if result then size:=moved; end;
{===================================================================}
..function _WRITECOMM(var Com:TCOMM; var Size:DWORD; var Src): boolean;
.....var Moved: DWORD;
.....begin
......RESETEVENT(com.overlap.hevent);
......result:=WRITEFILE(com.handle,src,size,moved,@com.overlap);
......if not result and (GETLASTERROR = ERROR_IO_PENDING) then
........begin
........WAITFORSINGLEOBJECT(com.overlap.hevent,com.timeout);
........result:=GETOVERLAPPEDRESULT(com.handle,com.overlap,moved,FALSE);
........end;
......if result then size:=moved; end;
{===================================================================}
Kell egy struktúra, ami tartalmaz minden struktúrát és változót, amit kell: TCOMM
Kell egy eljárás, ami megnyitja a portot (megkapja a nevét string-ként - 'LPT1', 'LPT2', ..., 'COM1',COM2', ...), és a struktúrát és megnyitja: _OPENCOMM. Ha a megnyitás sikertelen, akkor visszaadja, hogy miért (a port foglalt vagy nem létezik, illetve segédváltozó kreálása sikertelen).
Kell egy eljárás, ami bezárja a portot: _CLOSECOMM
Kell egy-egy író és olvasó eljárás: _WRITECOMM és _READCOMM. Ezek megkapják, hogy honnan/hova és hány byte-ot olvassanak be vagy írjanak ki, illetve közvetve a struktúrában a kísérleti időt millisecundum-ban: TimeOut mező (hogy ne kelljen minden egyes alkalommal megadni). Vissza boolean, hogy sikerült-e a teljes transfer, illetve ha nem, akkor a méretváltozóban visszadja, hogy ténylegesen mennyi sikerült a megadott idő alatt.
Ezekkel egy egyszerű rutin:
..procedure TForm1.StartClick(Sender:TObject);
....var
......Data:byte;
......Bytes: DWORD;
......lpt2: TCOMM;
....begin
......data:=1;
......if _OPENCOMM('LPT2',lpt2) = COMM_SUCCESS then begin
........lpt2.timeout:=5000;
........bytes:=sizeof(data);
........_WRITECOMM(lpt2,bytes,data);
........_CLOSECOMM(lpt2); end; end;
A megnyitás után beállítja a timeout-ot (most 5000 ms), majd kiír a portra (jelen esetben, ha minden igaz, tartja a byte-ot a kimeneten, mivel ACK nem érkezik), majd lezárja. Gondolom, sejthető, hogy neked akkor nem is kell timer így, mivel a _WRITECOMM-ot kell egy ciklusba tenni, mivel az 5 másodpercenként fog visszatérni, FALSE-szal ugyan, de az nem érdekes.
A fentiek hasonlóan működnek 'COMx' portnév megadásával is, de ott az _OPENCOMM után lehetőség van a paraméterek beállítására, pl. így (most legyen com1 a struktúra neve):
..GETCOMMSTATE(com1,com1.state);
....with com1.state do begin
......baudrate:=9600;
......bytesize:=8;
......parity:=EVENPARITY;
......stopbits:=ONESTOPBIT; end;
....SETCOMMSTATE(com1,com1.state);
Gondolom, kommentálni nem kell, hogy mit jelent a jelenlegi beállítások lekérése, egyes paraméterek átírása, majd beállítás.
A progamozási stílus remélet átlátható, az API-hívások, a belsőeljárás-nevek és a konstansok nagybetűsek, és igyekeztem a lehető legkevesebb utasítást egy sorban hagyni.
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
csewe
csendes tag
kipróbáltam egérklikkre kellene kiküldenie egy bájtot majd bezárnia a progit de lefagy így néz ki
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure llllll(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Data: byte;
Moved: DWORD;
hPort: THANDLE;
implementation
{$R *.DFM}
procedure TForm1.llllll(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
data := 1 ;
hport:=createfile('LPT1',
(GENERIC_READ or GENERIC_WRITE),
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hport <> INVALID_HANDLE_VALUE then begin
writefile(hport,data,sizeof(data),moved,nil);
closehandle(hport); end;
close ;
end;
end.fusd át hátha russzulm használom a kódot amit írtál nekem
köszi -
P.H.
senior tag
Ok, az viszont benn van a munkahelyemen, holnap elhozom. Nem akarok itt és most improvizálni, mert az olvasás, ha minőségi, akkor overlapped kell legyen. Írásnál még elviselhető, hogy addig megáll a program, amíg ki nem írja a teljes adatot, de az olvasás már csak ne működjön úgy, hogy megmondod, hogy mondjuk 1 KB-ot vársz a port-ról, aztán a program 'lefagy', amíg be nem jött a teljes mennyiség. Már ha egyáltalán pontosan tudható, hogy mikor fog jönni.
Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
P.H.
senior tag
Kiírja a portra a megadott adatokat, nem kell visszajelzés. Olvasni vissza a readfile-lal lehet, paraméterei megegyeznek a writefile-lal.
Egyszerű példa, hogy mennyire alacsony szintű ez: az első próbálkozásom portokkal az volt, hogy megírtam szinte a fenti kódot, hogy olvasson be a COM1-ről 512 byte-ot. ('COM1', és readfile), fogtam egy soros golyós egeret, menet közben rányomtam a COM1-re, persze semmi driver, észre se vette a Windows, elindítottam a programot. Kb. 5 másodpercig húzkodtam az egeret, aztán kiírta a program, hogy megvan az 512 beolvasott byte. Ennyi.
[mod]: Igazából kiírásnál nem is kell, hogy legyen valami rádugva a port-ra, úgy is sikeres az írás. Csak kinyomja a register-ekbe, mintha OUT-tal írnád.
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
P.H.
senior tag
A writefile írja ki valójában az adatot, de az egész a file-kezelés analógiájára épül (megnyitás-transfer-lezárás), és mivel kizárólagosan nyitja meg a portot (más nem férhet hozzá, amíg nyitva van), legjobb egy egységként kezelni az egész folyamatot.
A writefile amúgy akármilyen hosszú adatot ki tud küldeni egyszerre, nem kell byte-ozni (paraméterei: handle, a kiírandó buffer címe, a buffer hossza, mutató egy DWORD-re (most Moved), illetve egy nil itt most, visszatérési értéke egy boolean. Akkor sikeres a transfer, ha TRUE-val jön vissza, és a megadott DWORD (Moved) értéke megegyezik a paraméterként megadott buffermérettel.)
[mod]: az oldal ''The only step you are required to do is call LoadIODLL somewhere at the beginning of your program. Make sure you do this or you will find yourself faced with all sorts of interesting crashes.''
Az egyetlen lépés, ami szükséges, a LoadIODLL meghívása valahol a program elején. Csináld meg, vagy érdekes/érthetetlen dolgokat fogsz tapasztalni. (Az enyémhez term. nem kell majd. Illetve vagy egy olyan érzésem, hogy az IO.DLL a program teljes ideje alatt fogja a portot. Vagy mindet. De nem ismerem, csak nézegetem az oldalát.)
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
csewe
csendes tag
ha csak enyi akkor mé ma kipróbálom
ojan rutin kellene ami ritmikusam küld ki adatot az lpt2-re atimerrel gondoltam megoldani már csak azt a sort kéne megadnod amejik kiküldi az adatot mert az át jkell tennem a timer rutinba gondolom az if____thenben van az a sor én ugy látom de az a biztos ha megmondod -
P.H.
senior tag
Szerintem feleslegesen bonyolítod a dolgot ezzel a IO.DLL-lel, meg azzal a szemlélettel, hogy kézzel megadott port-ra írsz. Az összes Windows tudja a fenti kódomat, ami persze működik is, kipróbáltam.
Első ránézésre az IO.DLL link-jére és a kódodra, a LoadIODLL() hívás hiányozik. Az IO.H szerint:
function LoadIODLL: longint; stdcall; external 'io.dll'.
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
csewe
csendes tag
azt gondolom hogy itt az xp jelenti a gondot merthogy mos az van a gépen . közben kopróbáltam az IO.dll-t de nem működik avval sem pedig máshol nagyon ajánlják de lehet hogy csak én vagyok béna bár konkrét progirészletet kaptam de nem akar kiérni a jel az lpt-re így néz ki
unit PrinterPort;
interface
uses Classes, Forms, StdCtrls, Controls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function IsDriverInstalledoolean stdcall; external 'io.dll';
procedure PortOut(Portord;Datayte) stdcall; external 'io.dll';
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
PortOut($378,1);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PortOut($278,1);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
IsDriverInstalled;
end;
end.
két gomb van az egyikkel az lpt1 amásikkal az lpt2-re küld ki agy bájtot ha valaki látja mért nem működik az kijavíthatná
köszi -
P.H.
senior tag
Az API portkezelő általános portkezelésre van kihegyezve, a kódod valahogy így nézne ki legegyszerűbben, NT alapú Windows-okban (9x alatt már a CreateFile első paramétere):
var
..Data: byte;
..Moved: DWORD;
..hPort: THANDLE;
begin
..hport:=createfile('LPT1',
......(GENERIC_READ or GENERIC_WRITE),
......0,
......nil,
......OPEN_EXISTING,
......FILE_ATTRIBUTE_NORMAL,
......0);
..if hport <> INVALID_HANDLE_VALUE then begin
....writefile(hport,data,sizeof(data),moved,nil);
....closehandle(hport); end;
end;
Ez megnyitja az LPT1 portot írásra-olvasásra, kizárólagos használattal. Ha a kapott handle érvényes (= a megnyitás sikeres), akkor a Data változó tartalmát kiírja a portra, majd lezárja a handle-t.
Ehhez csak uses Windows; kell a program vagy unit elejére, bár az alapból ott van.Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
csewe
csendes tag
válasz Tele von Zsinór #1462 üzenetére
megnéztem az ajánlott oldalt nem éppen delfi progframozással foglalkozik valami használható nincs?
-
csewe
csendes tag
válasz Tele von Zsinór #1462 üzenetére
köszi mindjárt meg is nézem és ha valami nem világos akkor visszatérek ide
-
csewe
csendes tag
sajna nem vagyok jártas anyira a delpfiben windows api fügvényeket nem igazán használtam még és egyébkáént is az api fügvényes portkezelő valószínűleg kivan hegyezve nyomtatókra ezére választ vár a kiküldött kódra az én cuccom pedig nem válaszol csak végrehajt íme a kódrészlet
asm
mov dx , 0378h ; portcím
mov al , dat ; kiküldendő adat
out dx, al ;kiítás a pórtra
end ;
ha valaki tudja ezt az asm rutint helyettesítani úyg hogy windows alatt is menjen a dolog azt kérem tegye meg hogy leyrja nekem a helyettesítő kódrészletet.
nemragaszkodom az asm kódhoz lhet a delphiben alkalmazható bámi más megoldás is -
P.H.
senior tag
Gondolom vannak pl. IN és OUT utasítások az assembly részben, ezek Windows alatt nem lehetnek benne felhasználói programokban, csak a kernelben és driver-ekben, azaz privilégizált utasítások (privilege instruction, DOS-ban nincs ilyen megkötés, azért ment Pascal-ban). Tehát a programmal semmi gond, biztosan helyes, csak ez az út járhatatlan.
Inkább Windows-on (API) keresztül csináld az LPT-vezérlést.
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
csewe
csendes tag
sziasztok
az én problémám az hogy delphi 5 ben irtam egy progit ami külömbözö adatokat küld ki az lpt portra asm-ben van a portraküldés de indításkor kapok egy üzenetet amit nem értek (no inglis)
project project1.exe raised exception dass eprivilege with message 'privilege instruction' process stopped,use step or ron to continue.
erre kinálja az OK gombot
megjegyzem még régebben ugyanez az asm progirészlet pascalban simán müködött .
minden tanácsot szivesen fogadok.
a progi feladata egyébként az lpt porton lévö elektronika vezérléselenne.
előre is köszi. -
veterán
válasz Tele von Zsinór #1452 üzenetére
megcsináltam hogy legyen egy Tabsheeten az egy cucchoz tartozó gombok s akkor a tabsheet-et tüntetem el.
-
P.H.
senior tag
válasz Bandus99 #1456 üzenetére
A Thn egy típus.
Írd be a teljes forrást, úgy könnyebb lesz. (A fentit Delphi4 alatt írtam, ment).
[mod]: Vagy arról van szó, betű szerint? Hányas Delphi?
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
P.H.
senior tag
válasz Bandus99 #1453 üzenetére
Azért nem fordul le, mert a c1 char típusú, a pred(cs) pedig nem. (affene, már mondatot is ;-vel zárok alapban )
esetleg így:
type Thn = (he, ke, sz, cs, pe, szo, va);
var
..Ch1: Thn;
begin
..ch1:=pred(cs);
..writeln(ord(ch1));
..readln;
..end.
Azért writeln(ord(ch1)), mert alapban a writeln nem ismeri a Thn típust, így ki lehet íratni az elem index-ét (0-6 között lesz.)
Ez biztos, hogy Delphi-s, nem sima Pascal? Vagy console-os Delphi program lesz? Csak a readln/writeln miatt kérdem.
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
Bandus99
őstag
Sziastok
segitsetek mi lehet a hiba ebben miert nem mukodik?
var
Ch1: char;
hn: (he, ke, sz, cs, pe, szo, va);
begin
Ch1 := pred (cs);
Writeln (Ch1);
readln;
end.Van me'g ve'r a koffeinkeringe'semben
-
veterán
olyat hogyan lehet egyszerűen szépen csinálna ha van három gombom ami csak adott esetben kell egyébként nem látható. tudom hogy van láthatósága minden gomban de nem akarom gombonként állítani hanem valami csoportba kéne rendezni őket :$
-
P.H.
senior tag
Csak elferült valamiért dőlt betűsre... Na mindegy.
Még annyi, hogy
- ha tényleg '0.0' formában jönnek az adatok, akkor magyar Windows alatt mindenképp kell a második, try-except-es rész, az StrToFloat-hoz (default a vesszős elválasztás)
- a második kódban term. else if áll, 'else of' helyett.
- a második except-be után akkor is bele fog futni, ha a string végén kevesebb, mint 3 szám van, amellett, hogy ha 1-nél több tizedes-elválasztó van. (a '.1' és a '1.' string-eket nem tudom hirtelen, hogy kezeli-e az StrToFloat helyesen, de talán igen)
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
P.H.
senior tag
Ha mindenképp a string végén van a 3 lebegőpontos, space-szel elválaszva, akkor haladj hátulról.
var
..I,J,Pos: longint;
..Szam: array [1..3] of double;
..Data,Temp: string;
..begin
....data:='szin bela 0,0 0,0 0,0';
....for pos:=3 downto 1 do begin i:=length(data);
......while (i > 1) and (data <> ' ') do dec(i);
......temp:=copy(data,i+1,MAXLONGINT);
......szam[pos]:=strtofloat(temp);
......delete(data,i,MAXLONGINT); end; end;
(ha a copy() vagy a delete() utolsó paramétere MAXLONGINT, akkor a string végéig fog másolni/törölni).
Ha az sem igaz, hogy biztosan space-ekkel vannak elválasztva, akkor
(data <> ' ') helyett mehet (datain ['0'..'9','.',',' ] ), akkor is törölni fogja az elválasztó karaktert.
Arra viszont figyelj, hogy ha StrToFloat-tal konvertálod számmá, akkor angol Windows alatt . (pont) a tizedes-elválasztó, magyar alatt pedig ',' (vessző), különben leáll exception-nal. Érdemes így írni, amit írtam fentebb:
......try..szam[pos]:=strtofloat(temp);
......except for j:=1 to length(temp) do
........if temp[j] = '.' then temp[j]:=','
........else of temp = ',' then temp[j]:='.';
........try szam[pos]:=strtofloat(temp);
........except { ekkor hiba van, 2 pont vagy 2 vessző } end; end;
Ekkor a pontokat lecseréli vesszőre és a vesszőket pontokra, és lemegy, mindegy, milyen nyelvű a Windows. Illetve nem teljesen, mert ha a Vezérlőpontban a tizedes-elválasztót átírták valami másra, akkor így jártak :)
[mod]: csak normális kinézetű lesz lesz lassan...
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
g4dg3t
senior tag
úgy szerinted nem jó ha poszal megkeresem az első pontot, s index-1től kopizok?
Ha elofeltetelkent kikothetjuk, hogy a keresett resz elott nem fog ''.'' szerepelni a string-ben, akkor jo lehet ugy is. Tehat ''szin.ize bela.bigyo 0.0 0.0 0.0'' sornal gondot okozna.
Jol ertem, hogy a Pos fv-t belepesi feltetelkent hasznalod? Az igy vegtelen ciklust kell, hogy okozzon. Postold azt a while ciklust, este megneznem.
[Szerkesztve] -
veterán
-
g4dg3t
senior tag
legegyszerubben Pos, PosEx es Copy fuggvenyekkel (elofeltetel hogy a stringben mindig a 3. space-tol kezdodjek a kerdeses reszlet):
var
Ind: integer;
OutStr: string;
...
Ind:=Pos(#32,Sor);
if Ind > 0 then Ind:=PosEx(#32,Sor,Ind + 1);
if Ind > 0 then Ind:=PosEx(#32,Sor,Ind + 1);
if Ind > 0 then OutStr:=Copy(Sor,Ind + 1,Length(Sor) - Ind)
else OutStr:='';
...
Pos es PosEx fv helyett ciklust is szervezhetsz...kinek mi elegansabb.
[Szerkesztve] -
veterán
nekem egy ilyen sorból kellene
sor:='hello belatipus bela1 0.0 0.0 0.0';
ból a 0.0 0.0 0.0 string.
a gondom az hogy a 0.0 0.0 0.0 lehet akár 1.0 1.0 1.0 is de lehet 1.0 0.0 0.111 is meg akármilyen érték. Tulajdonképpen 3 db double
hogyan tudnám kinyerni a stringből -
bukica
csendes tag
Azt meg lehet oldani, hogy a StatusBar felosztott részeit különböző színűekre állítsam, vagy használjak valamilyen más megoldást?
-
ViragL
tag
Hajrá! Nemtudom mennyire lesz összetett a program amit csinálsz, az általad talált delay függvényt sem ismerem, de így látatlanban azt mondom, hogy problémás lesz a dolog. Gondolom a jó öreg ''pascalos'' delay-t ültette át valaki delphibe, ha igazam van akkor az aktuális szál működését függeszti fel a paraméterben megadott időre, ha ez így van, akkor, mivel egy szálad van összesen az egész program működését felfüggeszti arra az időre, ergo se menü se semmi nem lesz használható addig. Nekem sok bajom volt vele anno, csak azért írom ezt ide, hogy ha hasolót tapasztalsz, tudd miért van.
MOD: nem off
[Szerkesztve] -
P.H.
senior tag
Legegyszerűbben a pos függvénnyel.
Pl.: i:=pos('amit keresel','amiben keresel').
Longint típust ad vissza, ha ez nulla, akkor a keresett szöveg nincs a sztringben, nemnulla esetén annak első előfordulási pozíciója.
[mod]: a kis- és nagybetűk között különbséget tesz.
[Szerkesztve]Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
ngb
csendes tag
Hi!
Nekem egy olyan kérdésem lenne, hogy megírtam delphibe egy programot és azt szeretném egy weblapba integrálni, akkor azt hogyan tuom megcsinálni? (ha egyeltalán meg lehet) -
veterán
honnan tudom meg hogy egy string tartalmaz-e egy másik stringet?
-
veterán
tehát ebből hogyan tudom kinyerni a r,g,b értékeit?
mod 3B majd
div 2B
mod 2B div B
mod B?
(div egészrészes osztás mod maradék )
találtm egy ilyet
procedure rgbValues(color:TColor;var red,green,blue:byte);
begin
red :=GetRValue(color);
green:=GetGValue(color);
blue :=GetBValue(color);
end;
azaz ha nekem egy 0.0 és 1.0 közötti szám kell színenként (1.0 a 255 0.0 a 0) akkor a kód így néz ki:
procedure rgbValues(color:TColor;var red,green,blue:double);
begin
red :=(GetRValue(color)/255);
green:=(GetGValue(color)/255);
blue :=(GetBValue(color)/255);
end;
[Szerkesztve] -
P.H.
senior tag
A TColorDialog-ot kiteszed a form-ra, majd a programban:
if ColorDialog1.Execute then xxx:=ColorDialog1.Color;
Ha az .Execute TRUE-val tér vissza, akkor az OK-ra kattintottak rajta, a .Color-ból olvasható az utolsó kiválsztott szín.Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙
-
veterán
színt szeretnék választani programban. van valami colordialog
Arra lennék kíváncsi hogy milyen formában tudom a választott színt visszakapni. -
bukica
csendes tag
Hogyan lehet a progam futását pl. 2 másodpercre várakoztatni (2 mp szünet)?
-
bukica
csendes tag
Egy másik problémám, hogy lehet egy 'státusz' sort kitenni egy form-ra, hogy azon programfutás közben különböző dolgokat ki tudjak írni (rekord számláláló,üzenetek stb.), és ezek azonnal meg is jelenjenek, nem csak akkor mikor az adott feladat lefutott?
Nem tudom elég érthetően fogalmaztam-e? Pl. egy indexelés előtt ki akarom írni, hogy 'Türelem indexelés', majd mikor az indexelés lefutott, eltüntetni az üzenetet? -
-
ViragL
tag
Nem konkrétan delphi, de mivel úgyis elsősorban delphisek használnak IB-t vagy FireBirdet, ezért itt is megkérdezem: Van itt olyan ember aki IBExpertet használ?
-
bukica
csendes tag
Oké köszi ezt Én is kipróbáltam, és jó is, csak a font charsetet ANSI_CHARSET-re kell állítani, akkor jelenik meg az átmérő jel.
Már csak az az a probléma, hogy a billentyű lenyomásakor a beírja a karaktert, és a kurzor a sor elejére ugrik.
Hogyan lehet azt megoldani, hogy maradjon a szöveg végén a kurzor? -
veterán
válasz Tele von Zsinór #1407 üzenetére
hmm ez tök jó köszi a segítséget.
-
Tele von Zsinór
őstag
Tegyük fel pl hogy neked integerből kell egy tömb, azt így deklaráld:
var a: array of integer;
utána valahol a futás során kiderül, hogy 5 eleme kéne hogy legyen:
setlength(a,5);
ezután ugyanaz, mintha ezt csináltad volna:
var a: array[0..4] of integer;
és persze bárhol lehet állítgatni kisebbre, nagyobbra. Ha kisebbre veszed, akkor a végéről kiesnek az elemek, azokat nem kapod vissza, ha megint nagyobbra állítod.
[Szerkesztve] -
btotyi
tag
Tedd rá egy button onclick-re
procedure TForm1.Button1Click(Sender: TObject);
Var i : integer ;
Button : TButton ;
begin
for i := 0 to 9 do
begin
Button := TButton.Create(Self);
Button.Caption := IntToStr(I) + '. gomb';
Button.Parent := Self;
Button.Top := i * 26 ;
Button.Visible := true ;
end;
end; -
btotyi
tag
Ez működik :
Ctrl + 0 (nem numerikus taszton !)
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If (key = $30) and (ssCtrl in Shift)
then
begin
edit1.Text := edit1.Text + 'Ř';
end;
end;
Az edit mező Font propertyn állíts be pld Arial fontot. -
ViragL
tag
Ok, csak javaslat volt.
Egyébként a Delphi helje a Borland büszkesége lehet, az egyik legjobb, ha nem a legjobb. A dinamikus tömbre konkrétan emlékszem, hogy nagyon szépen le van írva. A filelistás dolgot is megtalálod a helpben, ha szerencséd van van hozzá példakód is az alapján el kell, hogy boldogulj.
[Szerkesztve] -
veterán
válasz Tele von Zsinór #1398 üzenetére
az 1. kb értem bár nem 100%ig
a 3-at nem vágom sajnos
Új hozzászólás Aktív témák
- ! 2 év gyártói garancia ! AULA F87 PRO Vezeték Nélküli Mechanikus Gamer Billentyűzet
- OWON SPM6103 programozható tápegység (0-60V/0-10A) és multiméter
- Razer Blade 16 - i9-13950HX, RTX 4090 (175W MAX TDP!), 32GB DDR5, 2TB SSD, Win11 Pro - GARI
- GoPro 7 Black Edition
- iPad Pro 13" 2024 1TB M4 16GB Silver (normál üveg) - MAKULÁTLAN - 3 Év Garancia
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest