logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Delphi6, przypisanie zmiennej string. Co zrobiłem źle?

rafaelle1 30 Lip 2006 00:46 2177 7
REKLAMA
  • #1 2863087
    rafaelle1
    Poziom 12  
    Posty: 102
    Ocena: 12
    Witam

    Jestem baaaaardzo początkujący w środowisku delphi6
    chciałem zrobić programik do czegoś tam , mniejsza o to
    mój problem polega na tym ze nie moge przypisać zmiennej string:

    mam listbox1 w którym jest kilka pozycji potrzebuje zamienić je na cyfry
    
    procedure TForm1.x1Click(Sender: TObject);
    var
    x, y:string;
    begin
    x:=listbox1.Items[listbox1.itemindex];
    if x='0' then y:='22';
    if x='1' then y:='57';
    if x='2' then y:='39';
    if x='3' then y:='73';
    
    end;


    teraz aby w następnym poleceniu podkładał zamiennik to zrobiłem tak:
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    iehttp1.ExecuteURL('http://www.jakiś adres/(y)');
    
    

    chodzi o to ze pod danym adresem jest kilka stron numerowanych , te numery co podałem to tylko przykład , program ma wyswietlać wiadomość nr"y" z listbox1 po zaznaczeniu w nim pozycji "x" i kliknięciu button1
    i nie zamienia, co zrobiłem źle?
  • REKLAMA
  • #2 2863325
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    iehttp1.ExecuteURL('http://www.jakiś adres/(y)');


    zmień na...

    iehttp1.ExecuteURL('http://www.jakiś adres/'+y);


    albo jeśli nie zadziała to na

    iehttp1.ExecuteURL(pchar('http://www.jakiś adres/'+y));


    :-)
  • REKLAMA
  • #3 2864403
    rafaelle1
    Poziom 12  
    Posty: 102
    Ocena: 12
    To nie pomogło k, zrobiłem tak :
    na samym początku programu wpisałem
    
    var
      Form1: TForm1;
       y:string;


    potem zmieniłem na:
    
    procedure TForm1.x1Click(Sender: TObject);
    var
    x:  integer;
    begin
     pubic:=listbox1.itemindex;
    if x=0 then y:='57';
    if xc=1 then y:='22';
    if x=2 then y:='39';
    


    w nast poleceniu :
    
    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
    iehttp1.ExecuteURL('http://www.jakiś adres/'+y+); 
    


    i działa
    :D

    Dodano po 48 [minuty]:

    Witam ponownie
    Tym razem nie wiem kompletnie od czego zacząć :cry:

    mam listbox , w którym jest kilka pozycji (raz , dwa , trzy)
    jak zrobić aby program pobierał pokolei pozycje z listboxa , i z każdą pozycją wykonywał jakąś operacje (np . showmessage)

    pomocy
  • #4 2865064
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    to może...

    for i:=0 to listbox1.items.count-1 do
    begin
      { a tutaj już wykonujesz jakies polecenie, pod i jest wstawiony aktualnie "przetwarzany" wiersz listboxa }
    end;
  • REKLAMA
  • #5 2865303
    rafaelle1
    Poziom 12  
    Posty: 102
    Ocena: 12
    Wstawiłem to ,jest ok z tym ze pobiera tylko ostatni wpis z listboxa (z samego dołu) reszte zadań wykonuje ok

    wiem że trzeba wprowadzić pętle , dopuki nie wyśle wiadomości wszystkim wpisom z listboxa to nie zakończy
    nie wiem jak to napisać w programie

    pobierz 1 wpis z listbox1
    wyślij mu wiadomość (to akurat mało ważne)
    sprawdź czy są jeszcze wpisy w lostbox1
    jeżeli tak to
    wyślij wiadomość do kolejnego wpisu
    jeżeli nie to
    zakończ



    lool
    prosze sie nie śmiać ale to jest mój pierwszy program w delphi, i chciałbym go dokończyć
    już niewiele brakuje do końca :D
  • REKLAMA
  • Pomocny post
    #6 2866265
    Jaca
    Poziom 32  
    Posty: 1332
    Pomógł: 239
    Ocena: 217
    Zerknij na to:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Indeks: integer;
    begin
      with ListBox1 do
        for Indeks:=0 to Count-1 do
          Application.MessageBox(PChar(Items[Indeks]),'Info...',32);
    end;


    Procedura wyświetla MsgBox'y z każdym wpisem zawartym w ListBox'ie.

    Pozdrawiam...
  • #7 2880402
    rafaelle1
    Poziom 12  
    Posty: 102
    Ocena: 12
    Działa jak należy , dzięki :please:

    Dodano po 14 [minuty]:

    Teraz kolejny problem:D

    Współpraca z serwerem

    Potrzebuje zrobić coś takiego że program będzie sie blokował na określony czas (np 1 godz) jeżeli na serwerze w pliku XXX.txt jest określony wpis (np id komputera aby z jednego komputera nie można było wysłać 2 razy tego samego wpisu), czyli program ma robić :

    sprawdzać czy w pliku XXX.txt na serwerze jest wpis ,
    jeżeli nie ma dodać
    jeżeli jest wstrzymać i wyświetlić wiadomość (np że wpis był dodany o 14 godz i do 15 godz nie można wysłać nowego)

    :oops:
  • #8 2882756
    Jaca
    Poziom 32  
    Posty: 1332
    Pomógł: 239
    Ocena: 217
    Zamieszczam źródło programu sterowania urządzeniem podłączonym do RS232 i sterowanym poprzez plik *.txt na serwerze www. Może to nie na temat ale program zawiera w sobie:
    - pracę z wątkiem (TThread)
    - obsługę RS232
    - obsługę pliku *.txt
    - obsługę połączenia z serwerem www
    czyli wszystkie (nawet więcej) potrzebne w Twoim projekcie informacje. Weź z niego co Ci potrzeba :)

    Program używa:
    - pakiet Indy (TIdFTP)
    - komponent ComPort (Tobie nie potrzebny)

    Pozdrawiam...
    Załączniki:
    • WWW_RS232.rar (258.48 KB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

✨ Dyskusja dotyczy problemów początkującego programisty z przypisaniem i wykorzystaniem zmiennych typu string w Delphi 6. Autor chciał zamienić wybrane pozycje z ListBoxa na odpowiadające im wartości numeryczne i użyć ich w wywołaniu metody ExecuteURL komponentu iehttp1. Początkowo błędnie konstruował łańcuch URL, stosując składnię z nawiasami, co uniemożliwiało poprawne podstawienie zmiennej. Poprawne rozwiązanie polegało na konkatenacji łańcuchów znaków, np. 'http://adres/' + y. Kolejnym zagadnieniem było iteracyjne przetwarzanie wszystkich pozycji ListBoxa, co rozwiązano przez pętlę for od 0 do Count-1, umożliwiającą wykonanie operacji na każdej pozycji, np. wyświetlenie komunikatu. W dalszej części autor pytał o mechanizm blokowania programu na określony czas w zależności od zawartości pliku tekstowego na serwerze, aby zapobiec wielokrotnemu wysyłaniu tych samych danych z jednego komputera. W odpowiedzi zaproponowano przykład programu sterującego urządzeniem przez RS232 z obsługą pliku tekstowego na serwerze oraz wykorzystaniem wątków (TThread) i komponentu Indy (TIdFTP), co może być pomocne przy implementacji takiego mechanizmu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA