[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. AGIMgal

    AGIMgal New Member

    Joined:
    9 Jun 2010
    Messages:
    66
    Likes Received:
    0
    Reputations:
    0
    очень интересно, тока я там по описанию обьектов и вообще работе с ними ничево толком не нашёл.
     
  2. AGIMgal

    AGIMgal New Member

    Joined:
    9 Jun 2010
    Messages:
    66
    Likes Received:
    0
    Reputations:
    0
    и воще, чё в гугле то писать?
     
  3. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    объектно-ориентированное программирование delphi
    delphi создание компонентов в run-time
    delphi tcomponent
     
  4. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Пытаюсь сделать MySQL соединение..
    Делаю все как написано здесь http://www.interface.ru/home.asp?artId=4937
    Не понял фразы:
    Но сделал так:
    Code:
    procedure TForm1.MySQL1Click(Sender: TObject);
    begin
    if FMySQL.Connect('localhost', 'root', '1111', 'dbname', '3306', '', false, 0) then ShowMessage('connected ok!');
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      MySQLClient := TMySQLClient.Create;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      MySQLClient.Free;
      if MySQLResult <> nil then
      MySQLResult.Free;
    end;
    В итоге ошибка:
    [Error] Unit1.pas(34): Undeclared identifier: 'FMySQL'
    34 строка это там где FMySQL
     
  5. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Замени FMySQL на MySQLClient
     
  6. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    поменяй FMySQL на MySQLClient

    //пока статью смотрел уже ответили
     
  7. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    [Error] Unit1.pas(34): There is no overloaded version of 'connect' that can be called with these arguments
     
  8. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Вызываешь с неправильными параметрами, эта функция принимает:
    (string, string, string, string, Integer, string, Boolean, Integer)
    точно все передаешь?
     
    1 person likes this.
  9. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    3306 должно быть числом а не строкой
     
    1 person likes this.
  10. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Code:
      if (Edit1.text <> '') and (Edit3.text <> '') and (Edit5.text <> '')
      then
      begin
        Label7.Caption := 'Check connection...';
        if MySQLClient.Connect(Edit1.Text, Edit3.Text, Edit4.Text, Edit5.Text, port, '', false, 0)
        then
          begin
            Label7.Caption := 'Connect is OK';
            Label7.Font.color := RGB(69, 139, 0);
          end
        else
          begin
            Label7.Caption := 'Connection failed';
            Label7.Font.color := RGB(255, 0, 0);
          end
      end;
    Надпись "Check connection..." почему-то никогда не высвечивается это при том что соединение проверяется секунды 3 если (если фейл)... Почему так? Делфи ж потовая штука :)
     
  11. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Коннект выполняется в этом же потоке. Метка может быть еще перерисоваться не успела, а поток сразу был занят другим, а после уже перерисовалась с новым кэпшеном
    Потоковая - если сам напрограммишь потоки
    Чисто ради интереса добавь Application.ProcessMessages; перед коннектом
     
  12. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Добавил и теперь всегда показывает... Мне это надо будет везде добавлять или где-то можно почитать про потоки?
     
  13. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Application.ProcessMessages; в принципе с потоками не связана, она разгружает очередь сообщений приложения. Просто знай что когда надо обновить интерфейс то следует ее вызывать.
    Про потоки тебе сейчас читать не обязательно, когда сам будешь писать многопоточное приложение тогда и читай.
     
  14. moodoone

    moodoone Member

    Joined:
    21 Oct 2009
    Messages:
    144
    Likes Received:
    38
    Reputations:
    5
    PHP:
    function replacestr(const ssrchreplacestring): string;
    var
    integer;
    sourcestring;
    begin
    source
    := s;
    result:= '';
    repeat
    i
    :=pos(srchsource);
    if 
    0 then begin
    result 
    := result copy(source,1,i-1) + replace;
    source := copy (source,i+length(srch),maxint);
    end
    else
    result := result source;
    until i<=0;
    end;
    Есть функция замены строки в строке. Как сделать чтобы она заменяла только первое найденное значение?
     
    #6894 moodoone, 29 Sep 2010
    Last edited: 29 Sep 2010
  15. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    поставить Break перед until самое простое решение
     
  16. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    А что, StringReplace(s, srch, replace, []) уже отменили? Зачем изобретать велосипед?
     
  17. Mr.Crazy

    Mr.Crazy New Member

    Joined:
    12 Aug 2010
    Messages:
    19
    Likes Received:
    1
    Reputations:
    0
    Меня интересует вопрос, как сделать так, что бы программа открывалась только тогда когда она лежит в каталоге с нужным мне файлом.
    И переименовывание файлов при закрытии\открытие определенного процесса. (можно гугла)
     
  18. sebay

    sebay Member

    Joined:
    9 Mar 2009
    Messages:
    26
    Likes Received:
    22
    Reputations:
    0
    подскажите пожалуйста как сделать так чтобы графика подольше задерживалась?
    Code:
    Uses Graph,Crt;
    type ttt=array[0..1300]of double;
    var x, xt, yt, ya, yc, ye:ttt;
    
        ea,ec,ee: double;                  {pogreshnosti}
        a, b, e, h, p: double;
        ch, sh:char;
        n, i, j, k, grad:integer;
        ff:text;
    
    procedure graphic(init: integer; Ymin,Ymax: real; y,x:ttt;
                      n,color,typ : integer; s: string);
    const maxx=1450; maxy=850;
    var
    tnum: string;
    nz,r,m,p,i,j,kl,kr,kt,kb,kf,k0,kbf,kx,ky,p0: integer;
    a1,hst,xma,xmi,yma,ymi,z: real;
    begin
     nz:=6;   { kolichestvo yacheek v setke }
     r:=0;
     kl:=60;  { otstup po x }
     kt:=40;  { otstup po y }
     kr:=maxx-40;
     kb:=maxy-40;
     kx:=kr-kl;
     ky:=kb-kt;
     if(init=1) then
       begin
       xma:=b;
       xmi:=a;
       yma:=y[1];
       ymi:=y[1];
       if(not((Ymin=0) and (Ymax=0))) then
                       begin
                       ymi:=Ymin;yma:=Ymax
                       end
                                      else
                                      begin
                                      for i:=0 to n do
                                        begin
                                        if(y[i]<ymi) then ymi:=y[i];
                                        if(y[i]>yma) then yma:=y[i]
                                        end;
                                      a1:=abs(yma-ymi);
                                      yma:=yma+0.1*a1;
                                      ymi:=ymi-0.1*a1
                                      end;
       { vkluchaem grafiku }
       m:=detect;  {i:=egahi;}  initgraph(m,i,'c:\bp\bgi');
       { pereschityvaem koordinaty }
       cleardevice;
       setfillstyle(1,0);
       bar(2,2,maxx-2,maxy-2);
       setcolor (7);
       hst:=(yma-ymi)/nz;
       z:=yma;
       kf:=kt;
       p:=round(1.0/nz*ky);
       a1:=abs(z);
       j:=0;
       if(a1<1)then
                 begin
                 while(a1<1)do
                        begin j:=j-1;
                        a1:=a1*10
                        end
                 end
              else
              if(a1>10)then
                  begin
                  while(a1>10)do
                      begin
                      j:=j+1;
                      a1:=a1/10;
                      end;
                  end;
       for i:=0 to nz do
           begin
           a1:=z*exp(-j*ln(10));
           str(a1:3:4,tnum);
           kbf:=textwidth(tnum)+6;
           moveto(kl-kbf, kf-6);
           outtext(tnum);
           line(kl,kf,kr,kf);
           z:=z-hst;
           kf:=kf+p
           end;
       moveto(kl-kbf, 15);
       str(j,tnum);
       outtext('1xE');
       moveto(kl-kbf+25, 15);
       outtext(tnum);
       hst:=(xma-xmi)/nz;
       z:=xmi;
       kf:=kl;
       p:=round(1.0/nz*kx);
       for i:=0 to nz do
           begin
                  a1:=abs(z);
                  if(a1<10.0) then j:=2  else if(a1<100.0) then j:=1 else j:=2;
                  str(z:4:j,tnum);
                  kbf:=textwidth(tnum)+2;
                  moveto(kf-kbf div 2,kb+4);
                  outtext(tnum);
                  line(kf,kb,kf,kt);z:=z+hst;
                  kf:=kf+p
           end;
       p0:=kl+10
       end;{end of "init"}
       setcolor(color);
       hst:=kx/(xma-xmi);
       a1:=ky/(yma-ymi);
       j:=0;
       if(typ=0) then j:=0;
       if(typ=1) then j:=3;
       if(typ=2)then j:=1;
       setlinestyle(j,1,1);
       settextstyle(DEFAULTFONT,HORIZDIR,1);
       kbf:=textwidth(s)+6;
       outtextxy(p0,10,s);
       moveto(p0+kbf,15);
       lineto(p0+kbf+20,15);
       p0:=p0+100;
       for i:=0 to n do
           begin
           k0:= round(kl+(x[i]-xmi)*hst);
           kf:= round(kb-(y[i]-ymi)*a1);
           if(i=0)then moveto(k0,kf);
           if(typ<3)then lineto(k0,kf) else
                                       begin
                                       circle(k0,kf,1);
                                       ellipse(k0,kf,0,360,4,4)
                                       end
           end
       end;
    
       function gtest(z:double): double;
            begin
            gtest:=sqr(cos(pi*z));
            end;
    
       function f(u,v:double): double;
            begin
            f:=-pi*sin(2*pi*u)+p*(v-gtest(u));
            end;
    
    
       procedure fora;
       begin
          ya[0]:=gtest(a);
          for i:=1 to n do
            ya[i]:=ya[i-1]+h*f(x[i-1],ya[i-1]);
       end;
    
       procedure forc;
       var k1, k2: double;
       begin
          yc[0]:=gtest(a);
          for i:=1 to n do
            begin
            k1:=h*f(x[i-1],yc[i-1]);
            k2:=h*f(x[i-1]+h, yc[i-1]+k1);
            yc[i]:=yc[i-1]+(k1+k2)/2;
            end;
       end;
    
       procedure fore;
       var k1, k2, k3, k4: double;
       begin
          ye[0]:=gtest(a);
          for i:=1 to n do
            begin
            k1:=h*f(x[i-1],yc[i-1]);
            k2:=h*f(x[i-1]+h/3, ye[i-1]+k1/3);
            k3:=h*f(x[i-1]+2/3*h, ye[i-1]+2/3*k2);
            ye[i]:=ye[i-1]+(k1+3*k2)/2;
            end;
       end;
    
       function pogr(uhty:ttt):double;
       var max: double;
       begin
            max:=0;
            for k:=1 to n do
               if abs(uhty[k]-gtest(a+k*h)) > max then max:=abs(uhty[k]-gtest(a+k*h));
            pogr:=max;
       end;
    
       procedure tab;
       begin
          for i:=1 to 5 do
            begin
               ea:=pogr(ya);
               ec:=pogr(yc);
               ee:=pogr(ye);
               writeln('n=',n,'  ea=',ea:12,'  ec=',ec:12,'  ee=',ee:12);
               n:=n*2;
               fora; forc; fore;
            end;
       end;
    
    begin
       clrscr;
       a:=0;                  {nachalo otrezka}
       b:=1;                  {konec otrezka}
       n:=20;                 {delaem srazy ravnomernuy setku,kol-vo uzlov n+1}
       h:=(b-a)/(n+1);        {shag setki}
       grad:=50;
       p:=7;
       for i:=0 to grad do
            begin
            xt[i]:=a+i*(b-a)/(grad+1);
            yt[i]:=gtest(xt[i]);
            end;
       {(xt,yt)-eto koordinaty testovogo grafika}
       for i:=0 to n do
            x[i]:=a+i*h;
    
       fora; forc; fore;
    
      ea:=pogr(ya);
       ec:=pogr(yc);
       ee:=pogr(ye);
       writeln('n=',n,'  ea=',ea:12,'  ec=',ec:12,'  ee=',ee:12);
    
       graphic(1,0,0,yt,xt,grad,11,0,'test');
       graphic(0,0,0,ya,x,n,10,0,'a');
       graphic(0,0,0,yc,x,n,4,0,'c');
       graphic(0,0,0,ye,x,n,5,0,'e');
    
       writeln('p=',p:4);
       if n<=20 then
            begin
            for j:=0 to n do
                    begin
                    writeln('j=',j:3,'  ya=',ya[j]:12,'  yc=',yc[j]:12,'  ye=',ye[j]:12, '  ytest=',gtest(a+j*h):12);
                    end;
            end;
       writeln;
    
       for j:=1 to 8  do
            begin
               ea:=pogr(ya);
               ec:=pogr(yc);
               ee:=pogr(ye);
               writeln('n=',n:5,'  ea=',ea:10,'  ec=',ec:12,'  ee=',ee:14);
               if n=1300 then break;
               n:=n*2;
               if n>1300 then n:=1300;
               h:=(b-a)/(n+1);
               for i:=0 to n do
               x[i]:=a+i*h;
               fora; forc; fore;
            end;
    
     sh:=readkey;
    closegraph;
    end.
    
     
  19. NemeZz

    NemeZz Elder - Старейшина

    Joined:
    20 Aug 2008
    Messages:
    102
    Likes Received:
    67
    Reputations:
    3
    в процедуре график после moveto и lineto можешь повставлять произвольно слипы (sleep), к сожалению они не привязаны к времени, а к тактам процессора, так что на одном компе выверенные таймауты могут быть совсем другими на другом.
    Все нужно подбирать.
     
  20. stepashka_

    stepashka_ Мотоциклист

    Joined:
    9 Nov 2009
    Messages:
    1,022
    Likes Received:
    423
    Reputations:
    234
    Ставлю indy 10 на 7 дельфи

    При компиляции IndyCore70.dpk выскакивают ошибки
    Первая ошибка вот к этой строке FIPVersion: TIdIPVersion;
    Вторая class function URLDecode(ASrc: string; AByteEncoding: TIdTextEncoding = nil
    Третья if TextIsSame(IdCharsetNames[Lcset], ACharSet) then begin
    Четвёртая IdCharsets,
     
Thread Status:
Not open for further replies.