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

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

 

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

LiborBes
Delphi › Výstup z media přehrávačů
28. 1. 2008   #64299

Hm,

to nie je zlozite, ale nie je to take jednoduhe. Si predstav, ze naprogramujes prehravac ty a niekto na inom fore povie, ze chce citat z tvojej aplikacie pesnicku... Ide o to, ze moznosti je niekolko, no musi ich podporovat program.

1. Treba sa popozerat, ci neexistuje API k danej aplikacii pre medziprocesovu komunikaciu - musel by to podporovat prehravac a ty by si komunikoval pomocou nejakeho protokolu.

2. Mozno sa da zaregistrovat aplikacia ako COM, potom by stacilo naimportoval TLB (Typovu kniznicu) a pracujes s aplikaciou, akoby bola objektom v Delphi. (zalezi na aplikacii, ci je COMova) - takto sa da naimportovat napr. Windows Media Player (ODPORUCAM)

3. Komunikacia cez LAN - niektore aplikacie maju rozhranie zverejnene ako TCP server (zvyknu to byt Linuxove prehravace) - znova si treba nastudoval protokol pristupu od vyrobcu.

4. "Hacknutie" spustenej aplikacie - kazda aplikacia sa da ovladat z inej, to si vsak vyzaduje pevne nervy pri skumani "ciernej skrinky"

Zhrnute:
Treba googlit konkretnu informaciu na webe, lebo neexistuje univerzalna odpoved.

LiborBes
Delphi › Grafika v BD7, prosím o rady…
28. 1. 2008   #64293

Kresli sa stale na Canvas a ten vracia farbu bodu na suradnici X, Y. Kedze ty potrebujes Y = 0 (prvy riadok), tak len farby prekopirujes - musis vsak osetrit, aby PaintBoxy boli ronvako dlhe. Mozno ti pomoze toto:



for Index := 0 to Pred(PaintBox1.Width) do
begin
if Index <= PaintBox2.Width then
PaintBox2.Canvas.Pixels[Index, 0] := PaintBox1.Canvas.Pixels[Index, 0];
end; // FOR

LiborBes
Delphi › Delphi a SQL
28. 1. 2008   #64292

Da, ale tento server to musi mat povolene, co nezvykne byt - kazdy DB server bezi lokalne/remote a ak provajder zverejni port, na ktorom fici jeho databaza, je mozne nastavit komponenty na danu komunikaciu, no ako som pisal, nie je to bezne (z hladiska bezpecnosti).

Stale si ale mozes pomoct tak, ze si vytvoris sprostredkvatela, ktory bude komunikovat s DB za teba. Je to riesenie ako skrabat sa pravou rukou po lavom uchu, ale ak potrebujes len zapisat nejaku vetu do DB na webe, tak si urobis PHP skript, ktoremu posles cez query / hidden data a ten to postne do DB. Pred rokucimi rokmi som primitivny priklad opisal, potom to publikoval iNet:

http://www.inet.sk/clanok/4337/tunnelling-4-4-http

mozno pomoze.

LiborBes
Delphi › Komunikace mezi TcpServer a…
28. 1. 2008   #64291

Tak mam strasne zle naprogramovane v Delphi6. Je to este zo strednej skoly, no obhospodaruje to X klientov, vie medzi nimi prepinat a dokonca aj posiela binarne subory. Zdrojak mozem zverejnit - ale priznavam sa, uz sa k nemu nehlasim :) je to fekal, no chodilo mi to.

Otazka vsak je, co potrebujes? Ak potrebujes komunikovat napr. tak, ze si program zisti, ci nie je na nete nova verzia programu, ak ano, tak si ju stiahne, je lepsie pouzit SOAP (webove sluzby) - je to velmi primitivne a threadovanie a vsetko sa vlastne staraju nizsie vrstvy.

Ak potrebujes vymienat DataSety (preto som kodil na strednej ten vlastny protokol), tak je neskutocne jednoduchsie pouzit distributivne programovanie ako DCOM / Corba - naucit sa to, je rovnako casovo narocne, ako napisat vlastne rutiny s tym, ze urcite budu chrobacne a pouzitelne az o nejaky cas...

LiborBes
Delphi › Delphi - StringGrid
28. 1. 2008   #64290

Co vlastne potrebujes? Potrebujes editovat grid? Ci len data pchat do tabulky? Skus pouzit SQLite, alebo si napis vlastne stlpcove editory pre VirtualTree... Ale ak chces len pracu s Gridom, tak si ho najprv nastav (napr. vo FormCreate, alebo lepsie naklikaj vlastnosti v design-time:



// Lepsie naklikat v design-time
with StringGrid1 do
begin
ColCount := 3; // Pocet stlpcov
FixedCols := 0;
FixedRows := 0;
RowCount := 0;
end; // WITH


a potom napr. tlacidlo pridaj urobi nieco take



StringGrid1.Cells[0, Pred(StringGrid1.RowCount)] := Edit1.Text;
StringGrid1.Cells[1, Pred(StringGrid1.RowCount)] := Edit2.Text;
StringGrid1.Cells[2, Pred(StringGrid1.RowCount)] := Edit3.Text;
StringGrid1.RowCount := Succ(StringGrid1.RowCount); // Pridame riadok

LiborBes
Delphi › Polygon - nechci počáteční b…
14. 1. 2008   #62371

Vedel som, ze nieco take som robil, len to stacilo poludctit ;)

LiborBes
Delphi › Čítanie z excelu
14. 1. 2008   #62360

Urcite by som takto nepristupoval ku obsahu XLS, ale to je jedno. V tom kode zasa az taky problem nevidim. Problem musi byt logicky niekde za showmessage. Skus si to skroknut, alebo pastni viac kodu.

LiborBes
Delphi › Počet desetinných míst v kom…
26. 11. 2007   #56207

Napr. cez format (nie je vsak najrychlejsi ak to chces robit v nejakych hardcore cykloch):

[CODE]
procedure TForm1.Button1Click(Sender: TObject);
var
R: Double;
begin
R := 0.1;
Label1.Caption := Format('%0.3f', [R]);
end;
[/CODE]

LiborBes
Delphi › Casova zavislost akci
20. 11. 2007   #55466

Použi na to Timer. Pastujem jednoduchý príkladik na otázky typu ANO / NIE.

Potrebuješ TTimer a ActionList s dvoma akciami ANO / NIE odkazujúce na ten istý EXECUTE ActionOdpovedExecute.

Timeru nastav OnTimer event: TimerTimer. Ten sa stará o to, že sleduje "časomieru", ktorá po štvrť sekunde sa refrešuje, keď progressbar pozícia dosiahne maximum, tak sa skočí na novú otázku.



unit UTFormJednodnoduchyTester;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ActnList, ComCtrls, StdCtrls, Buttons;

resourcestring
// ---------------------------------------------------------------------------
sPretecenaOtazka = 'Interná chyba: Otázky pretiekli!';

type
// ---------------------------------------------------------------------------
TFormJednodnoduchyTester = class(TForm)
BitBtnAno: TBitBtn;
BitBtnNie: TBitBtn;
LabelOtazka: TLabel;
LabelOdpoved: TLabel;
ProgressBarCakajuciInterval: TProgressBar;
ActionList: TActionList;
ActionAno: TAction;
ActionNie: TAction;
Timer: TTimer;

procedure TimerTimer(Sender: TObject);
procedure ActionOdpovedExecute(Sender: TObject);
private
FOtazka: Integer; // Aktualna otazka
FSpravnych: Integer; // Kolko spravnych odpovedi je zaznamenanych

function DajVProgrese: Boolean;
procedure NastavVProgrese(const Hodnota: Boolean);
procedure NastavOtazku(const Hodnota: Integer);
protected
procedure ZacniTestovat;
procedure CakazSOdpovedou;
procedure ZacniOdpoved;
procedure UkonciOdpoved;
procedure DalsiaOtazka;
procedure KoniecTestu;

property VProgrese: Boolean read DajVProgrese write NastavVProgrese;
public
constructor Create(AOwner: TComponent); override;

property Otazka: Integer read FOtazka write NastavOtazku;
end; // TFormJednodnoduchyTester

var
FormJednodnoduchyTester: TFormJednodnoduchyTester;

implementation

type
// ---------------------------------------------------------------------------
TOtazka = record
Znenie: String;
Odpoved: Boolean;
end; // TOtazka

const
// ---------------------------------------------------------------------------
CAKAJ_MS = 3000; // Cakaj milisekund
OTAZKY : Array[0..3] of TOtazka =
((Znenie: 'Volas sa Margita Figuli?'; Odpoved: False),
(Znenie: 'Pochadzas zo Zeme'; Odpoved: True),
(Znenie: 'Milujes pivo?'; Odpoved: True),
(Znenie: 'Neznasas Fica'; Odpoved: True)
); // OTAZKY

{$R *.dfm}

// *****************************************************************************
// Zabezpeci refresovanie progressbaru
procedure TFormJednodnoduchyTester.TimerTimer(Sender: TObject);
begin
CakazSOdpovedou;
end;

// *****************************************************************************
procedure TFormJednodnoduchyTester.ActionOdpovedExecute(Sender: TObject);
var
Tlacidlo: Boolean;
begin
// Zistime, ci sa spravne odpovedalo a podla toho aj priradime farbu odpovede
Tlacidlo := (Sender = ActionAno); // Na ktore tlacidlo sa kliklo?
if Tlacidlo <> OTAZKY[FOtazka].Odpoved then
LabelOdpoved.Font.Color := clRed
else
begin
LabelOdpoved.Font.Color := clBlack;
Inc(FSpravnych); // Zapamatame si, ze bola spravna odpoved
end; // ELSE

// Spustime proces cakania so zobrazenim odpovede
ActionAno.Enabled := False;
ActionNie.Enabled := False;
if OTAZKY[FOtazka].Odpoved then
LabelOdpoved.Caption := 'ÁNO'
else
LabelOdpoved.Caption := 'NIE';
ZacniOdpoved;
end;

// *****************************************************************************
function TFormJednodnoduchyTester.DajVProgrese: Boolean;
begin
Result := Timer.Enabled;
end;

// *****************************************************************************
procedure TFormJednodnoduchyTester.NastavVProgrese(const Hodnota: Boolean);
begin
Timer.Enabled := Hodnota;
end;

// *****************************************************************************
procedure TFormJednodnoduchyTester.NastavOtazku(const Hodnota: Integer);
begin
if (Hodnota < Low(OTAZKY)) or (Hodnota> High(OTAZKY)) then
raise Exception.CreateRes(@sPretecenaOtazka);
FOtazka := Hodnota;
LabelOtazka.Caption := OTAZKY[FOtazka].Znenie;
LabelOdpoved.Caption := '';
ActionAno.Enabled := True;
ActionNie.Enabled := True;
end;

// *****************************************************************************
procedure TFormJednodnoduchyTester.ZacniTestovat;
begin
Otazka := 0; // Skoc na prvu otazku
FSpravnych := 0; // Zatial ziadna spravna odpoved
end;

// *****************************************************************************
procedure TFormJednodnoduchyTester.CakazSOdpovedou;
begin
if (not VProgrese) then
ZacniOdpoved
else
begin
ProgressBarCakajuciInterval.Position := ProgressBarCakajuciInterval.Position + 1;
if ProgressBarCakajuciInterval.Position = ProgressBarCakajuciInterval.Max then
UkonciOdpoved;
end; // IF
end;

// *****************************************************************************
procedure TFormJednodnoduchyTester.ZacniOdpoved;
const
REFRESH = 250; // Refresh v milisekundach - cim menej tym plynulejsie ale zatazuje viac system
begin
try // EXCEPT
ProgressBarCakajuciInterval.Position := 0;
ProgressBarCakajuciInterval.Max := CAKAJ_MS div REFRESH;
Timer.Interval := REFRESH;
VProgrese := True;
except
VProgrese := False;
end; // EXCEPT
end;

// *****************************************************************************
procedure TFormJednodnoduchyTester.UkonciOdpoved;
begin
VProgrese := False;
ProgressBarCakajuciInterval.Position := 0;
DalsiaOtazka;
end;

// *****************************************************************************
procedure TFormJednodnoduchyTester.DalsiaOtazka;
begin
if FOtazka = High(OTAZKY) then
KoniecTestu
else
Otazka := Otazka + 1;
end;

// *****************************************************************************
procedure TFormJednodnoduchyTester.KoniecTestu;
begin
ShowMessage('Koniec testu!'#13#10 +
'Správnych odpovedí: ' + IntToStr(FSpravnych) + #13#10 +
'Všetkých otázok: ' + IntToStr(Length(OTAZKY)));
Close;
end;

// *****************************************************************************
constructor TFormJednodnoduchyTester.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Timer.Enabled := False;
ZacniTestovat;
end;

end.

 

 

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