-
Постов
159 -
Зарегистрирован
-
Посещение
-
Победитель дней
6
Весь контент Axbor
-
Не могу загрузить... Проверьте пожалуйста ссылку.
-
// --------------------------------------------------------------------------- #include <fmx.h> #pragma hdrstop #include "Unit1.h" // --------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.fmx" TForm1 *Form1; // --------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Mask = "+7(00)000-00-00;0;*"; PhoneNumber = ""; } // --------------------------------------------------------------------------- void __fastcall TForm1::edtPhoneTyping(TObject *Sender) { edtPhone->CaretPosition = GetCaretPos(); } // --------------------------------------------------------------------------- int __fastcall TForm1::GetCaretPos() { int i; int Result = 0; for (i = 0; i < Mask.Length(); i++) { if (!(MaskGetCharType(Mask, i) == mcDirective || MaskGetCharType(Mask, i) == mcMask)) Result += 1; if ((Result + PhoneNumber.Length()) == i) break; } Result = Result + PhoneNumber.Length() - 1; return Result; } int __fastcall TForm1::GetMaxLength() { int Result = 0; for (int i = 0; i < Mask.Length(); i++) if (MaskGetCharType(Mask, i) == mcMask) Result = Result + 1; return Result; } void __fastcall TForm1::edtPhoneKeyDown(TObject *Sender, WORD &Key, System::WideChar &KeyChar, TShiftState Shift) { if ((Key == 8) && (PhoneNumber.Length() > 0)) PhoneNumber = PhoneNumber.SubString(1, PhoneNumber.Length() - 1); else if ((PhoneNumber.Length() < GetMaxLength()) && (Key == 0) && IsDigit(KeyChar)) PhoneNumber = PhoneNumber + KeyChar; else KeyChar = 0; } // --------------------------------------------------------------------------- void __fastcall TForm1::edtPhoneKeyUp(TObject *Sender, WORD &Key, System::WideChar &KeyChar, TShiftState Shift) { edtPhone->CaretPosition = GetCaretPos(); } //--------------------------------------------------------------------------- void __fastcall TForm1::edtPhoneValidating(TObject *Sender, UnicodeString &Text) { Text = FormatMaskText(Mask, PhoneNumber); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { edtPhone->Text = FormatMaskText(Mask, PhoneNumber); } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <System.Classes.hpp> #include <FMX.Controls.hpp> #include <FMX.Forms.hpp> #include <System.MaskUtils.hpp> #include <FMX.Controls.Presentation.hpp> #include <FMX.Edit.hpp> #include <FMX.StdCtrls.hpp> #include <FMX.Types.hpp> #include <System.Character.hpp> #include <string.h> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TEdit *edtPhone; TButton *Button1; void __fastcall edtPhoneTyping(TObject *Sender); void __fastcall edtPhoneKeyDown(TObject *Sender, WORD &Key, System::WideChar &KeyChar, TShiftState Shift); void __fastcall edtPhoneKeyUp(TObject *Sender, WORD &Key, System::WideChar &KeyChar, TShiftState Shift); void __fastcall edtPhoneValidating(TObject *Sender, UnicodeString &Text); void __fastcall FormCreate(TObject *Sender); private: // User declarations public: String PhoneNumber; String Mask; int __fastcall GetCaretPos(); int __fastcall GetMaxLength(); // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif Для тех кому нужен на C++
-
JSON получаю от своего сервера. Туда написано вот такой код: <?php $result = $conn->query($sql); $rows = array(); while($r = $result->fetch_assoc()){ $rows[] = $r; } print json_encode($rows); ?> Оттуда получаю вот такой JSON: [ { "Caption":"Jinnixona", "Content":"Jinnixonaning boshlig'i birorta jinni tuzalganmi-yo'qmi, tekshirish \r\nuchun ularni kinoteatrga olib boribdi. O'tiradigan stullarning hammasini\r\n bo'yatib qo'yibdi. Kim o'tirmasa o'sha tuzalgan bo'ladi deb o'ylabdi. \r\nJinnilarni hammasi o'tiribdi, lekin bittasi stulga gazeta solib keyin \r\no'tiribdi. Doktor uni tuzalganmi deb o'ylab savol beribdi: \r\n---- Sen nega gazeta solding, biror narsa sezdingmi? desa jinni: \r\n---- \"Men hammadan balandroqda o'tirmoqchi edim ,bo'yim pastroq\" debdi..." } ] Я и так сделал но думаю что есть другой более адекватный способ. При парсинге \n, \r эти символы не преобразуется на \\n или \\r как я заметил. Они очень хорошо выполняют свою функцию
-
TJSONObject *o = dynamic_cast<TJSONObject*> (TJSONObject::ParseJSONValue(TEncoding::ASCII->GetBytes(s), 0)); if (!o) return; TJSONArray *a = dynamic_cast<TJSONArray*>(o->Get("M")->JsonValue); if (!a) return; for (int i = 0; i < a->Count; i++) { TJSONObject *b = dynamic_cast<TJSONObject*>(a->Get(i)); if (! return; Jokes[i + CurrPos].Caption = b->Pairs[0]->JsonValue->ToString(); Jokes[i + CurrPos].Content = b->Pairs[1]->JsonValue->ToString(); Count++; } delete L; L = 0; "s" это текст которая хранит JSON внутри значений которого есть символ " (кавычка). В JONS е уже добавлены BackSlash перед такими символами. При парсинге JOSN опят добавляются BackSlash перед спец символами. Как от этого избежать?
-
Чем отличается TThread::Synchronize(TThread::CurrentThread, getFile); от вашего кода TTask::Run(_di_TProc()); что где лучше использовать?
-
void __fastcall TForm1::Button1Click(TObject *Sender) { TThread::Synchronize(TThread::CurrentThread, getFile); } void TForm1::getFile() { TMemoryStream *MS = new TMemoryStream; IdHTTP1->Get("YOUR URL", MS); MS->SaveToFile("*.*"); delete MS; }
-
Stream:=TMemoryStream.Create; IdHTTP1.Get('http://devdelphi.ru/files/VK_APImodul.rar',Stream); Stream.SaveToFile('C:\1.rar'); Stream.Free; Что бы программа не завис при загрузки файла, нужно использовать поток.
-
Спасибо всем за ответы.
-
Сами задаем сами отвечаем. Изменения высоты Latifa1Layout->Height = Latifa1Caption->Height + Latifa1Text->Height + 20; сделал в Label(OnResize) и всё. Ошибка исчез.
-
Почему TfgToast нету на C++, а все остальные есть? Или где то нужно включить? Embarcadero XE 10
-
В нашем форуме можно добавлять теги из трех букв но искать теги из трех букв невозможно. Например я хочу искать FGX он не дает мне искать. Исправьте это пожалуйста.
-
А что будет если не использовать его? Можно ли не использовать когда я знаю точно что тип объекта именно такой? Помогает ли оно избежать утечек памяти?
-
Короче есть такой код при выполнении которого выходит ошибка Bitmap size too big: void __fastcall TForm1::TabControl2Gesture(TObject *Sender, const TGestureEventInfo &EventInfo, bool &Handled) { switch (EventInfo.GestureID) { case sgiLeft: if(!ChangeJoke(false)) return; TabControl2->Next(TTabTransition::Slide, TTabTransitionDirection::Normal); Handled = true; Latifa2Caption->Text = Latifa3Caption->Text; Latifa2Text->Text = Latifa3Text->Text; Latifa2Layout->Height = Latifa3Layout->Height; TabControl2->TabIndex = 1; break; case sgiRight: if(!ChangeJoke(true)) return; TabControl2->Previous(TTabTransition::Slide, TTabTransitionDirection::Normal); Latifa2Caption->Text = Latifa1Caption->Text; Latifa2Text->Text = Latifa1Text->Text; Latifa2Layout->Height = Latifa1Layout->Height; TabControl2->TabIndex = 1; Handled = true; break; default: break; } } bool __fastcall TForm1::ChangeJoke(bool iLeft) { if(iLeft) { if(CurrPos == 0) return false; Latifa1Caption->Text = Jokes[CurrPos - 1].Caption; Latifa1Text->Text = Jokes[CurrPos - 1].Content; Latifa1Layout->Height = Latifa1Caption->Height + Latifa1Text->Height + 20; CurrPos --; return true; } else { if(CurrPos + 1 >= Count) { TThread::Synchronize(TThread::CurrentThread, GetJoke); return false; } Latifa3Caption->Text = Jokes[CurrPos + 1].Caption; Latifa3Text->Text = Jokes[CurrPos + 1].Content; Latifa3Layout->Height = Latifa3Caption->Height + Latifa3Text->Height + 20; CurrPos ++; return true; } } Там внутри TabItem ов находится ScrollBox(align=Client) внутри ScrollBox есть Layout (Align Top) внутри Layout Rectangle(Align Content) и еще два Label (Align = top, AutoSize = true, WrodWrap = true). Еще заметил, иногда без ошибки выполняется но размер Layout становится слишком большим. Что то идет явно не так. (UPD) Когда не выходит ошибка и размер Layout становится становится слишком большой исправляется это при повторе движения. И после это всё работает нормально.
-
Я и в старых не замечал такую функцию. Но даже если было бы должно было быть в Tools->Editor Options->Code Insight а там я не заметил.
-
Где то прочитал что dynamic_cast помогает избежать утечек памяти. Как с этим работать? Если можно пример где обязательно нужно использовать это.
-
При ручному написанию Memo1->Lines->Add( суфлёр не работает. Нужно при наборе Memo1->Lines->Add нажать <Enter> (на подсказку), а там оно скобки сама расставит. И суфлёр тоже будет показывать.
-
Когда я перетаскивал компонентов было проблема когда мышка двигалось очень быстро компонент которая я передвигал отставал от мышки. Что бы избавиться от этого нужно AutoCapture этого компонента сделать true. Тогда пока мышка не отпущена фокус остается на этом компоненте. Пример: Добавляем в форму один компонент (в моем случае Rectangle). В конструкторе формы запишем: __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { Rectangle1->AutoCapture = true; isDown = false; } //--------------------------------------------------------------------------- Потом запишем на OnMouseDown, OnMouseMove, OnMouseUp запишем как обычно. void __fastcall TMainForm::Rectangle1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y) { oldX = X; oldY = Y; isDown = true; } //--------------------------------------------------------------------------- void __fastcall TMainForm::Rectangle1MouseMove(TObject *Sender, TShiftState Shift, float X, float Y) { if(!isDown) return; Rectangle1->Postion->Y = Rectangle1->Postion->Y + Y - oldY; Rectangle1->Postion->X = Rectangle1->Postion->X + X - oldX; } //--------------------------------------------------------------------------- void __fastcall TMainForm::RectangleMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y) { isDown = false; } //--------------------------------------------------------------------------- Вот и всё. Таким же образом можно перетаскивать форму и т.д,
-
Еще для перетаскивания формы или что угодно. Просто ставьте значение элемента с чем перетаскиваете AutoCapture = true; и всё. Как хотите так и двигайте. хоть быстро хоть медленно, то что вы перетаскиваете никогда не будет оставаться. Я тоже очень долго думал.